[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n# github: [labexp]\nliberapay: OSMTracker\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: \"Bug Report\"\ndescription: \"Report an issue or bug with OSMTracker for Android.\"\nlabels: \"bug\"\nbody:\n  - type: markdown\n    attributes:\n      value: \"**Thank you for reporting a bug! Before reporting, please have a look at the [Q&A](https://github.com/labexp/osmtracker-android/discussions/categories/q-a), make sure the issue has no duplicate and hasn't been already addressed by searching through [the existing and past issues](https://github.com/labexp/osmtracker-android/issues).\\nPlease fill out the following details to help us diagnose the issue.**\"\n  \n  - type: textarea\n    id: description\n    attributes:\n      label: \"Description\"\n      description: \"Provide a clear and concise description of the issue.\"\n      placeholder: \"Describe the issue here...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: steps_to_reproduce\n    attributes:\n      label: \"Steps to Reproduce\"\n      description: \"Please list the steps to reproduce the issue.\"\n      value: |\n        1. \n        2. \n        3. \n      placeholder: \"Step-by-step instructions...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: logs\n    attributes:\n      label: \"Logs or Console Errors (if applicable)\"\n      description: |\n        If available, please paste or attach any relevant logs or error messages.  \n        - On Android, you can use [adb logcat](https://developer.android.com/studio/command-line/logcat) to capture logs.\n      render: \"plaintext\"\n    validations:\n      required: false\n  \n  - type: textarea\n    id: screenshots\n    attributes:\n      label: \"Screenshots or Videos (Optional)\"\n      description: \"Attach any relevant screenshots or videos.\"\n    validations:\n      required: false\n\n  - type: input\n    id: android_version\n    attributes:\n      label: \"Android Version\"\n      placeholder: \"e.g., Android 12\"\n    validations:\n      required: true\n  \n  - type: input\n    id: device_model\n    attributes:\n      label: \"Device Model\"\n      placeholder: \"e.g., Samsung Galaxy S21\"\n    validations:\n      required: true\n  \n  - type: checkboxes\n    id: submission_checklist\n    attributes:\n      label: \"Submission Checklist\"\n      description: \"Please confirm the following before submitting:\"\n      options:\n        - label: \"I am reporting an issue, not asking a question.\"\n          required: true\n        - label: \"I have updated to the latest OSMTracker version, and the issue still exists.\"\n          required: true\n        - label: \"I have checked the Q&A Discussions, open and closed issues, and the wiki, but did not find a solution.\"\n          required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\ncontact_links:\n  - name: \"Questions about OSMTracker\"\n    url: \"https://github.com/labexp/osmtracker-android/discussions/categories/q-a\"\n    about: \"Ask questions and discuss with the OSMTracker community in GitHub Discussions.\"\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation_report.yml",
    "content": "name: \"Documentation Report\"\ndescription: \"Report errors or suggest improvements for project documentation.\"\nlabels: \"documentation\"\nbody:\n  - type: markdown\n    attributes:\n      value: \"**Thank you for helping us improve our documentation! Please complete the following information to help us address the issue efficiently.**\"\n  \n  - type: textarea\n    id: description\n    attributes:\n      label: \"Description\"\n      description: \"Explain the problem or the section that needs improvement in the documentation.\"\n      placeholder: \"Describe the documentation issue here...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: affected_section\n    attributes:\n      label: \"Affected Section\"\n      description: \"Indicate which part of the documentation contains the error. This can be specified using a URL, section, or specific page.\"\n      placeholder: \"E.g., https://example.com/docs/section or 'Installation Guide' section or page 3 of PDF manual...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: error_found\n    attributes:\n      label: \"Error Found\"\n      description: \"Describe what is wrong. This could be: lack of clarity, spelling/grammar errors, outdated information, or missing information.\"\n      placeholder: \"Detail the specific error or issue found...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: improvement_proposal\n    attributes:\n      label: \"Improvement Proposal (optional)\"\n      description: \"How should the documentation be corrected or improved?\"\n      placeholder: \"Suggest how the documentation could be improved...\"\n    validations:\n      required: false\n  \n  - type: textarea\n    id: error_evidence\n    attributes:\n      label: \"Evidence of Error (optional)\"\n      description: \"Provide evidence of the error, such as screenshots, manual captures, videos, or examples.\"\n      placeholder: \"Upload or describe evidence of the documentation issue...\"\n    validations:\n      required: false\n  \n  - type: checkboxes\n    id: submission_checklist\n    attributes:\n      label: \"Submission Checklist\"\n      description: \"Please confirm the following before submitting:\"\n      options:\n        - label: \"I have verified that this documentation issue hasn't been reported previously.\"\n          required: true\n        - label: \"I have provided specific details about the location of the issue in the documentation.\"\n          required: true\n        - label: \"The information I've provided is accurate and clear.\"\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: \"Feature Request\"\ndescription: \"Suggest an enhancement or new feature for OSMTracker for Android.\"\nlabels: \"enhancement\"\nbody:\n  - type: markdown\n    attributes:\n      value: \"**Thank you for suggesting a new feature! Before submitting your request, please review the [Discussions](https://github.com/labexp/osmtracker-android/discussions) and make sure this feature hasn't already been requested by searching through [existing issues](https://github.com/labexp/osmtracker-android/issues).\\nPlease complete the following details to help us better understand your proposal.**\"\n  \n  - type: textarea\n    id: description\n    attributes:\n      label: \"Description\"\n      description: \"Briefly explain the requested functionality.\"\n      placeholder: \"Describe the feature here...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: use_cases\n    attributes:\n      label: \"Use Cases\"\n      description: \"Who would use this functionality?\"\n      placeholder: \"Describe who would benefit from this feature...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: benefits\n    attributes:\n      label: \"Benefits\"\n      description: \"How would this improve OSMTracker?\"\n      placeholder: \"Explain how this feature would enhance the application...\"\n    validations:\n      required: true\n  \n  - type: textarea\n    id: alternatives\n    attributes:\n      label: \"Alternatives\"\n      description: \"Are there other options that could be implemented/considered instead?\"\n      placeholder: \"Describe alternatives you've considered...\"\n    validations:\n      required: false\n  \n  - type: textarea\n    id: example\n    attributes:\n      label: \"Example (optional)\"\n      description: \"Provide visual or schematic examples of how the feature would look/function.\"\n      placeholder: \"Attach or describe visual examples...\"\n    validations:\n      required: false\n  \n  - type: checkboxes\n    id: submission_checklist\n    attributes:\n      label: \"Submission Checklist\"\n      description: \"Please confirm the following before submitting:\"\n      options:\n        - label: \"I have verified that this feature hasn't been requested previously.\"\n          required: true\n        - label: \"I have provided sufficient information to understand my proposal.\"\n          required: true\n        - label: \"I am willing to provide additional information if necessary.\"\n          required: true\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "[comment]: # (Thank you for your contribution! Please fill out the following details to help us review your pull request.)\n# 📝 Pull Request Title\n\n## 🛠️ Issue\n- Closes #add-your-issue-ID\n\n[comment]: # (Link to the ISSUES related, if applicable)\n[comment]: # (* Related to: ISSUE #number)\n## 🛠️ Related issues (if applicable)\n- ISSUES #add-ISSUE\n\n\n\n## 📖 Description\n[comment]: # (Provide a clear explanation of the changes in this PR)\n\n\n\n## 🖼️ Screenshots (if applicable)\n- Include any relevant screenshots or examples of the changes made. This helps reviewers visualize the updates\n\n\n\n## ✅ Pull Request Checklist\n[comment]: # (Please confirm the following before submitting your PR)\n[comment]: # (To check a task please put a \"x\" inside the `[]`)\n[comment]: # ([ ] : not done)\n[comment]: # ([x] : done)\n[comment]: # (Make sure how your PR looks clicking the \"Preview\" tab at the top of this editor)\n\n- [ ] The PR is proposed to the DEVELOP branch.\n- [ ] The changes have been tested on the target Android API and minimum Android API.\n- [ ] Automated tests have been added (if applicable).\n- [ ] The feature is well documented.\n- [ ] There is a reference to the original ISSUE and related work.\n\n\n## 📝 Additional Notes\n- Any additional context, questions, or considerations for the reviewers.\n- Take a look at our [Contributing Guide](https://github.com/labexp/osmtracker-android/blob/develop/CONTRIBUTING.md) before submitting your PR.\n"
  },
  {
    "path": ".github/workflows/android.yml",
    "content": "name: Build\n\non:\n  push:\n    branches:\n      - master\n      - develop\n  pull_request:\n    branches:\n      - develop\n\njobs:\n  build_and_test:\n    name: Build and Test\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Setup Java JDK\n        uses: actions/setup-java@v4\n        with:\n          distribution: 'temurin'\n          java-version: '17'\n          cache: 'gradle'\n\n      - name: Grant execute permission for gradlew\n        run: chmod +x gradlew\n\n      - name: Build with Gradle\n        run: ./gradlew assembleDebug --stacktrace\n\n      - name: Rename output APK\n        run: |\n          DATE=$(date +'%Y%m%d-%H%M')\n          mv app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/debug/OSMTracker-debug-$DATE.apk\n          echo \"ARTIFACT_DATE=$DATE\" >> $GITHUB_ENV\n\n      - name: Upload a Build Artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: debug-${{ env.ARTIFACT_DATE }}\n          path: app/build/outputs/apk/debug/OSMTracker-debug-*.apk\n\n      - name: Run unit tests and jacoco coverage\n        run: ./gradlew testDebugUnitTest jacocoTestReport --stacktrace -Dorg.gradle.jvmargs=\"-Xmx4g -XX:MaxMetaspaceSize=1g\"\n        env:\n          GRADLE_OPTS: \"-Dorg.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g\"\n\n      - name: Enable KVM\n        run: |\n          echo 'KERNEL==\"kvm\", GROUP=\"kvm\", MODE=\"0666\", OPTIONS+=\"static_node=kvm\"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules\n          sudo udevadm control --reload-rules\n          sudo udevadm trigger --name-match=kvm\n\n      - name: Run connected tests\n        uses: ReactiveCircus/android-emulator-runner@v2\n        with:\n          api-level: 26\n          script: |\n            adb logcat &\n            ./gradlew connectedCheck --no-parallel\n\n      - name: Coveralls GitHub Action\n        uses: coverallsapp/github-action@v2\n        with:\n          format: jacoco\n"
  },
  {
    "path": ".github/workflows/nightly.yml",
    "content": "name: Nightly APK\n\non:\n  schedule: # Scheduled jobs only run on the default repository branch\n    - cron: \"0 1 * * *\"\n  workflow_dispatch:\n\njobs:\n  check-recent-commits:\n    runs-on: ubuntu-latest\n    outputs:\n      has_recent_commits: ${{ steps.check-commits.outputs.has_recent_commits }}\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0  # Fetch all history for git log\n          ref: develop    # Checkout the develop branch specifically\n\n      - name: Check for recent commits on develop branch\n        id: check-commits\n        run: |\n          # Get the current timestamp and calculate 24 hours ago\n          CURRENT_TIMESTAMP=$(date +%s)\n          TWENTY_FOUR_HOURS_AGO=$((CURRENT_TIMESTAMP - 86400))\n\n          # Check if there are any commits in the last 24 hours\n          RECENT_COMMITS=$(git log --since=\"$TWENTY_FOUR_HOURS_AGO\" --oneline | wc -l)\n\n          if [ \"$RECENT_COMMITS\" -gt 0 ]; then\n            echo \"Found $RECENT_COMMITS commits in the last 24 hours\"\n            echo \"has_recent_commits=true\" >> $GITHUB_OUTPUT\n          else\n            echo \"No commits found in the last 24 hours\"\n            echo \"has_recent_commits=false\" >> $GITHUB_OUTPUT\n          fi\n\n  build:\n    needs: check-recent-commits\n    if: needs.check-recent-commits.outputs.has_recent_commits == 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n        with:\n          ref: develop    # Build from develop branch\n\n      - name: Set up Java JDK\n        uses: actions/setup-java@v4\n        with:\n          distribution: 'temurin'\n          java-version: '17'\n\n      - name: Setup Signing Keystore\n        run: |                 \n          # 1. Decode nightly keystore secret\n          echo \"${{ secrets.NIGHTLY_KEYSTORE }}\" | base64 -d > /tmp/nightly-keystore.jks\n          echo \"Keystore created in /tmp/nightly-keystore.jks\"\n          \n          # Verify\n          echo \"✅ Keystore created in: /tmp/nightly-keystore.jks\"\n          ls -la /tmp/nightly-keystore.jks\n          echo \"ks_path=/tmp/nightly-keystore.jks\" >> $GITHUB_OUTPUT\n          \n\n      - name: Setup Android SDK\n        uses: android-actions/setup-android@v2\n\n      - name: Build with Gradle\n        run: |        \n          ./gradlew assembleDebug --stacktrace \\\n            -Pandroid.injected.signing.store.file=\"/tmp/nightly-keystore.jks\" \\\n            -Pandroid.injected.signing.store.password=\"${{ secrets.KEYSTORE_PASSWORD }}\" \\\n            -Pandroid.injected.signing.key.alias=\"${{ secrets.KEY_ALIAS }}\" \\\n            -Pandroid.injected.signing.key.password=\"${{ secrets.KEY_PASSWORD }}\"\n\n      - name: Cleanup Keystore\n        run: |\n          echo \"Cleaning keystore...\"\n          rm -f app/nightly-keystore.jks\n          echo \"✅ Keystore removed\"\n\n      - name: Rename output APK\n        run: |\n          DATE=$(date +'%Y%m%d-%H%M')\n          mv app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/debug/OSMTracker-nightly-$DATE.apk\n          echo \"ARTIFACT_DATE=$DATE\" >> $GITHUB_ENV\n\n      - name: Upload a Build Artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: nightly-${{ env.ARTIFACT_DATE }}\n          path: app/build/outputs/apk/debug/OSMTracker-nightly-*.apk\n\n      - name: Check if nightly tag exists and delete\n        run: |\n          gh auth login --with-token <<< \"${{ secrets.GITHUB_TOKEN }}\"\n          if gh release view nightly > /dev/null 2>&1; then\n            echo \"Nightly tag exists, deleting release...\"\n            gh release delete nightly --cleanup-tag --yes\n          else\n            echo \"Nightly tag does not exist, skipping deletion\"\n          fi\n\n      - name: Create GitHub Nightly Release\n        uses: softprops/action-gh-release@v2.2.2\n        with:\n          tag_name: 'nightly'\n          name: 'Nightly Build'\n          draft: false\n          prerelease: true\n          files: app/build/outputs/apk/debug/OSMTracker-nightly-*.apk\n          body: \"Nightly build for OSMTracker\"\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n\n  skip-build:\n    needs: check-recent-commits\n    if: needs.check-recent-commits.outputs.has_recent_commits == 'false'\n    runs-on: ubuntu-latest\n    steps:\n      - name: Skip build notification\n        run: echo \"No recent commits in the last 24 hours. Skipping build.\"\n"
  },
  {
    "path": ".gitignore",
    "content": "build\n.idea\n*.iml\n.gradle\ntrash\nlocal.properties\nproguard-project.txt\n# -no resources are copied from -nb\napp/src/main/res/*-no\n*.pl\n*.sh\napp/null/\napp/release/\n\n# python vitualenv\n.venv\n\n# GPX created during tests\napp/src/test/assets/gpx/output-test.gpx\n"
  },
  {
    "path": ".travis.yml",
    "content": "sudo: true\n\nlanguage: android\njdk: oraclejdk8\n\nandroid:\n    components:\n        - build-tools-29.0.2\n        - android-29\n        - tools\n        - android-22\n        - sys-img-armeabi-v7a-android-22\n\nlicenses:\n    - android-sdk-license-.+\n    - '.+'\n\nbefore_install:\n- mkdir \"$ANDROID_HOME/licenses\" || true\n- yes | sdkmanager \"platforms;android-27\"\n\nbefore_script:\n     - echo no | android create avd --force -n test -c 100M -t android-22 --abi armeabi-v7a\n     - emulator -avd test -no-audio -no-window -no-skin &\n     - android-wait-for-emulator\n     - adb shell input keyevent 82 &\n     - android list targets\n"
  },
  {
    "path": ".tx/config",
    "content": "[main]\nhost = https://www.transifex.com\nlang_map = cs_CZ: cs-rCZ, pt_PT: pt-rPT, zh_CN: zh-rCN, zh_TW: zh-rTW, pt_BR: pt-rBR, tr_TR: tr-rTR, fa_IR: fa-rIR, ro_RO: ro-rRO, es_CL: es-rCL, id_ID: id-rID, bg_BG: bg-rBG, fr_FR: fr-rFR\n\n[osmtracker-android.strings]\nfile_filter = app/src/main/res/values-<lang>/strings.xml\nsource_file = app/src/main/res/values/strings.xml\nsource_lang = en\ntype = ANDROID\n\n[osmtracker-android.accessibility]\nfile_filter = app/src/main/res/values-<lang>/accessibility.xml\nsource_file = app/src/main/res/values/accessibility.xml\nsource_lang = en\ntype = ANDROID\n\n[osmtracker-android.waypoints]\nfile_filter = app/src/main/res/values-<lang>/waypoints.xml\nsource_file = app/src/main/res/values/waypoints.xml\nsource_lang = en\ntype = ANDROID\n\n[osmtracker-android.strings-preferences]\nfile_filter = app/src/main/res/values-<lang>/strings-preferences.xml\nsource_file = app/src/main/res/values/strings-preferences.xml\nsource_lang = en\ntype = ANDROID\n\n[osmtracker-android.strings-tags]\nfile_filter = app/src/main/res/values-<lang>/strings-tags.xml\nsource_file = app/src/main/res/values/strings-tags.xml\nsource_lang = en\ntype = ANDROID\n\n"
  },
  {
    "path": "AUTHORS",
    "content": "Contributors\n------------\n\nNicolas Guillaumin <nguillaumin+osmtracker at googlemail.com>\n - Initial author.\n \nViesturs Zarins < ? >\n - Draw OSM map as background feature.\n \nMatthias Glaub <matthias.glaub at googlemail.com>\n - Various patches and bug fixes.\n \nJeremy D Monin <jdmonin at nand.net>\n - Help for multi-track ability.\n - Various patches and bug fixes.\n \n Paul O'Shea\n - Various patches and bug fixes\n \n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "\n# 🤝 Contributing to OSMTracker\n\nThank you for your interest in contributing! 🎉  \nWhether you're fixing a bug, adding a new feature, or improving documentation — all contributions are welcome.\n\n---\n## 📚 Table of Contents\n1. 🔰 Before You Start\n2. 🛠️ How to Run the App (Setup Guide)\n3. 🧪 Running Tests\n4. 🌍 Translations\n5. 🧑‍💻 Git Workflow (GitFlow)\n6. 👶 New Contributor Quick Guide (For Beginners)\n7. 📜 Code Style & Commit Guidelines\n8. 🚀 How to Submit a Pull Request\n9. 💬 Community & Support\n\n---\n\n## 🔰 1. Before You Start\n- Make sure you have **Git** and **Android Studio** installed.\n- Familiarity with **GitFlow** is recommended (see below).\n- If you're new to open/free source, check out our **beginner section** ↓\n\n---\n\n## 🛠️ 2. How to Run the App Locally\n\n```bash\n# Clone the repository\ngit clone https://github.com/labexp/osmtracker-android/\ncd osmtracker-android\n```\n\n1. Install Android Studio. - [Here](https://developer.android.com/studio/install) is the official guide on how to install it on different operating systems\n2. Open the IDE and click `open an existing Android Studio project`, then look for the folder where you cloned the repository  \n3. Build the project (`Ctrl + F9` or the 🛠️ hammer button)\n\n\n\n## 🧪 3. Running Tests\n\nThis repository has an automated way to run the tests on branches but if you already have the project installed on you computer then you can also run them from a terminal.\nIt's recommended to run the tests locally before making a new pull request to make sure the changes doesn't break any previous functionality. You can run the tests locally as follows:\n - Make sure you are at the *root directory of the project*\n\t - `$ cd YOUR_PATH/osmtracker-android`\n\n### 📱 Instrumentation Tests (Require Emulator or Device)\n - For running **instrumentation** tests it's needed to previously start up an emulator (or real device),  you can do it from Android Studio but also without it using the command line. For that,  you need to move to the Android SDK installation directory and look for a folder called `emulator` once there, start any already created emulator by typing:\n\t-\t`$ ./emulator -avd NAME` to start the emulator called *NAME* (run `$ ./emulator -list-avds` for a valid list of AVD names)\n\t- When  it's up, go back to the root project folder and run the instrumentation tests with\n\t- `$ ./gradlew connectedAndroidTest`\n\n### ✅ Unit Tests\n - For running the **unit tests** no emulator or device is needed, just run \n\t - `$ ./gradlew test`\n - Now just wait for gradle to run the tests for you, it'll show the results of which tests passed or failed when it's finished\n\n\n## 🌍 4. Translations\nOSMTracker is translated using Transifex (see the [wiki](https://github.com/labexp/osmtracker-android/wiki/Translating)).\nOnce translations are complete, they will be updated via automated Transifex PR.\n\n\n## 🧑‍💻 5. Git Workflow (GitFlow)\n\nWe use **GitFlow** branching model:\n\n| Branch | Purpose |\n|--------|----------|\n| `master` | Stable production releases |\n| `develop` | Main development branch |\n| `feature/*` | New features |\n| `hotfix/*` | Quick fixes for production |\n\n- If you want more information, take a look [here](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)\n---\n\n## 👶 6. New Contributor Quick Guide (Beginner-Friendly)\n\n> ✨ If this is your first open-source contribution, start here!\n\n1. ⭐ **Fork the repository**\n\n   After forking, make sure your fork includes **all the required branches** (especially `develop`, not only `master`).\n\n   You can verify this by checking the branches tab in your fork on GitHub.\n\n2. 📥 **Clone your fork**\n   ```bash\n   git clone https://github.com/YOUR_USERNAME/osmtracker-android.git\n   ```\n3. 🔄 (Optional) Add upstream to stay updated  \n   ```bash\n   git remote add upstream https://github.com/labexp/osmtracker-android.git\n   ```\n4. 🌱 Create a branch  \n   ```bash\n   git checkout develop\n   git checkout -b feature/your-feature-name\n   ```\n5. ✍️ Make changes + commit (atomic commits)\n6. 🚀 Push your branch\n7. 📝 Open a Pull Request (PR)\n\n---\n\n## 📜 7. Commit Message Convention\nUse **clear and descriptive** commit messages.\n\n✅ Good:\n```\nfeat: add option to export GPX file\nfix: resolve crash when no GPS signal\ndocs: update contributing guide\n```\n❌ Bad:\n```\nupdate stuff\nfix bug\n```\n\n---\n## 🚀 8. How to Submit a Pull Request\n1. Push your changes\n2. Go to GitHub → Open PR\n3. Fill the PR template fully\n4. Wait for review ✅\n\n⚠️ PRs without a complete template may be rejected.\n\n---\n\n## 💬 9. Community & Support\n- Have questions? Open a **Discussion** or an **Issue**\n- (Optional): Join the contributors chat/[Telegram](https://t.me/OSMTracker).\n\nLet's build something awesome together! 🚀"
  },
  {
    "path": "COPYING",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "LICENSES",
    "content": "==== File lib/osmdroid-android-*.jar ====\r\n\r\n\tosmtracker-android reuses code from osmdroid (http://osmdroid.googlecode.com/),\r\n\treleased under LGPL.\r\n\t\r\n\t\t                   GNU LESSER GENERAL PUBLIC LICENSE\r\n\t                       Version 3, 29 June 2007\r\n\t\r\n\t Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\r\n\t Everyone is permitted to copy and distribute verbatim copies\r\n\t of this license document, but changing it is not allowed.\r\n\t\r\n\t\r\n\t  This version of the GNU Lesser General Public License incorporates\r\n\tthe terms and conditions of version 3 of the GNU General Public\r\n\tLicense, supplemented by the additional permissions listed below.\r\n\t\r\n\t  0. Additional Definitions.\r\n\t\r\n\t  As used herein, \"this License\" refers to version 3 of the GNU Lesser\r\n\tGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\r\n\tGeneral Public License.\r\n\t\r\n\t  \"The Library\" refers to a covered work governed by this License,\r\n\tother than an Application or a Combined Work as defined below.\r\n\t\r\n\t  An \"Application\" is any work that makes use of an interface provided\r\n\tby the Library, but which is not otherwise based on the Library.\r\n\tDefining a subclass of a class defined by the Library is deemed a mode\r\n\tof using an interface provided by the Library.\r\n\t\r\n\t  A \"Combined Work\" is a work produced by combining or linking an\r\n\tApplication with the Library.  The particular version of the Library\r\n\twith which the Combined Work was made is also called the \"Linked\r\n\tVersion\".\r\n\t\r\n\t  The \"Minimal Corresponding Source\" for a Combined Work means the\r\n\tCorresponding Source for the Combined Work, excluding any source code\r\n\tfor portions of the Combined Work that, considered in isolation, are\r\n\tbased on the Application, and not on the Linked Version.\r\n\t\r\n\t  The \"Corresponding Application Code\" for a Combined Work means the\r\n\tobject code and/or source code for the Application, including any data\r\n\tand utility programs needed for reproducing the Combined Work from the\r\n\tApplication, but excluding the System Libraries of the Combined Work.\r\n\t\r\n\t  1. Exception to Section 3 of the GNU GPL.\r\n\t\r\n\t  You may convey a covered work under sections 3 and 4 of this License\r\n\twithout being bound by section 3 of the GNU GPL.\r\n\t\r\n\t  2. Conveying Modified Versions.\r\n\t\r\n\t  If you modify a copy of the Library, and, in your modifications, a\r\n\tfacility refers to a function or data to be supplied by an Application\r\n\tthat uses the facility (other than as an argument passed when the\r\n\tfacility is invoked), then you may convey a copy of the modified\r\n\tversion:\r\n\t\r\n\t   a) under this License, provided that you make a good faith effort to\r\n\t   ensure that, in the event an Application does not supply the\r\n\t   function or data, the facility still operates, and performs\r\n\t   whatever part of its purpose remains meaningful, or\r\n\t\r\n\t   b) under the GNU GPL, with none of the additional permissions of\r\n\t   this License applicable to that copy.\r\n\t\r\n\t  3. Object Code Incorporating Material from Library Header Files.\r\n\t\r\n\t  The object code form of an Application may incorporate material from\r\n\ta header file that is part of the Library.  You may convey such object\r\n\tcode under terms of your choice, provided that, if the incorporated\r\n\tmaterial is not limited to numerical parameters, data structure\r\n\tlayouts and accessors, or small macros, inline functions and templates\r\n\t(ten or fewer lines in length), you do both of the following:\r\n\t\r\n\t   a) Give prominent notice with each copy of the object code that the\r\n\t   Library is used in it and that the Library and its use are\r\n\t   covered by this License.\r\n\t\r\n\t   b) Accompany the object code with a copy of the GNU GPL and this license\r\n\t   document.\r\n\t\r\n\t  4. Combined Works.\r\n\t\r\n\t  You may convey a Combined Work under terms of your choice that,\r\n\ttaken together, effectively do not restrict modification of the\r\n\tportions of the Library contained in the Combined Work and reverse\r\n\tengineering for debugging such modifications, if you also do each of\r\n\tthe following:\r\n\t\r\n\t   a) Give prominent notice with each copy of the Combined Work that\r\n\t   the Library is used in it and that the Library and its use are\r\n\t   covered by this License.\r\n\t\r\n\t   b) Accompany the Combined Work with a copy of the GNU GPL and this license\r\n\t   document.\r\n\t\r\n\t   c) For a Combined Work that displays copyright notices during\r\n\t   execution, include the copyright notice for the Library among\r\n\t   these notices, as well as a reference directing the user to the\r\n\t   copies of the GNU GPL and this license document.\r\n\t\r\n\t   d) Do one of the following:\r\n\t\r\n\t       0) Convey the Minimal Corresponding Source under the terms of this\r\n\t       License, and the Corresponding Application Code in a form\r\n\t       suitable for, and under terms that permit, the user to\r\n\t       recombine or relink the Application with a modified version of\r\n\t       the Linked Version to produce a modified Combined Work, in the\r\n\t       manner specified by section 6 of the GNU GPL for conveying\r\n\t       Corresponding Source.\r\n\t\r\n\t       1) Use a suitable shared library mechanism for linking with the\r\n\t       Library.  A suitable mechanism is one that (a) uses at run time\r\n\t       a copy of the Library already present on the user's computer\r\n\t       system, and (b) will operate properly with a modified version\r\n\t       of the Library that is interface-compatible with the Linked\r\n\t       Version.\r\n\t\r\n\t   e) Provide Installation Information, but only if you would otherwise\r\n\t   be required to provide such information under section 6 of the\r\n\t   GNU GPL, and only to the extent that such information is\r\n\t   necessary to install and execute a modified version of the\r\n\t   Combined Work produced by recombining or relinking the\r\n\t   Application with a modified version of the Linked Version. (If\r\n\t   you use option 4d0, the Installation Information must accompany\r\n\t   the Minimal Corresponding Source and Corresponding Application\r\n\t   Code. If you use option 4d1, you must provide the Installation\r\n\t   Information in the manner specified by section 6 of the GNU GPL\r\n\t   for conveying Corresponding Source.)\r\n\t\r\n\t  5. Combined Libraries.\r\n\t\r\n\t  You may place library facilities that are a work based on the\r\n\tLibrary side by side in a single library together with other library\r\n\tfacilities that are not Applications and are not covered by this\r\n\tLicense, and convey such a combined library under terms of your\r\n\tchoice, if you do both of the following:\r\n\t\r\n\t   a) Accompany the combined library with a copy of the same work based\r\n\t   on the Library, uncombined with any other library facilities,\r\n\t   conveyed under the terms of this License.\r\n\t\r\n\t   b) Give prominent notice with the combined library that part of it\r\n\t   is a work based on the Library, and explaining where to find the\r\n\t   accompanying uncombined form of the same work.\r\n\t\r\n\t  6. Revised Versions of the GNU Lesser General Public License.\r\n\t\r\n\t  The Free Software Foundation may publish revised and/or new versions\r\n\tof the GNU Lesser General Public License from time to time. Such new\r\n\tversions will be similar in spirit to the present version, but may\r\n\tdiffer in detail to address new problems or concerns.\r\n\t\r\n\t  Each version is given a distinguishing version number. If the\r\n\tLibrary as you received it specifies that a certain numbered version\r\n\tof the GNU Lesser General Public License \"or any later version\"\r\n\tapplies to it, you have the option of following the terms and\r\n\tconditions either of that published version or of any later version\r\n\tpublished by the Free Software Foundation. If the Library as you\r\n\treceived it does not specify a version number of the GNU Lesser\r\n\tGeneral Public License, you may choose any version of the GNU Lesser\r\n\tGeneral Public License ever published by the Free Software Foundation.\r\n\t\r\n\t  If the Library as you received it specifies that a proxy can decide\r\n\twhether future versions of the GNU Lesser General Public License shall\r\n\tapply, that proxy's public statement of acceptance of any version is\r\n\tpermanent authorization for you to choose that version for the\r\n\tLibrary.\r\n\t\r\n\r\n==== File lib/slf4-android-*.jar ====\r\n\t\r\n\tosmtracker-android uses a library from slf4j (http://www.slf4j.org/android/)\r\n\tThis library is published under the MIT license: http://www.slf4j.org/license.html\r\n\t\r\n\r\n==== OpenStreetMap data ====\r\n\r\n\tMap tiles are provided by OpenStreetMap (http://www.openstreetmap.org/),\r\n\tunder the Creative Commons Attribution-ShareAlike 2.0 license\r\n\t(http://creativecommons.org/licenses/by-sa/2.0/).\r\n\r\n\t(c) OpenStreetMap (and) contributors, CC-BY-SA\r\n\t\r\n\t\r\n==== File res/raw/beep.mp3 ====\r\n\r\n\thttp://www.freesound.org/samplesViewSingle.php?id=26777\r\n\thttp://creativecommons.org/licenses/sampling+/1.0/\r\n\r\n\r\n==== File res/raw/beepbeep.mp3 ====\r\n\r\n\thttp://www.freesound.org/samplesViewSingle.php?id=107786\r\n\thttp://creativecommons.org/licenses/sampling+/1.0/\r\n"
  },
  {
    "path": "README.md",
    "content": "# OSMTracker for Android™\n\n![Build](https://github.com/labexp/osmtracker-android/actions/workflows/android.yml/badge.svg?branch=develop)\n[![Coverage Status](https://coveralls.io/repos/github/labexp/osmtracker-android/badge.svg?branch=develop)](https://coveralls.io/github/labexp/osmtracker-android?branch=develop)\n\n**OSMTracker for Android™** is a mobile app designed for OpenStreetMap mappers and outdoor adventurers. It lets you log a GPS track to document your journey. Its customizable buttons let you simply add POIs as track points directly inside your GPX track.\n\nIt also supports voice recording, picture taking, and note-taking. This is the perfect app to survey a place or a path whether you are hiking, cycling, or exploring new areas.\n\n![Main screen](https://wiki.openstreetmap.org/w/images/thumb/7/7b/OSMTracker-Android-main-screen-en.jpg/200px-OSMTracker-Android-main-screen-en.jpg)\n\nHere is a screenshot of the main screen with its default buttons. You can [customize](https://github.com/labexp/osmtracker-android/wiki/Custom-buttons-layouts) these buttons to your liking.\n\n## Get the App 📲\n\n[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height=\"80\"/>](https://play.google.com/store/apps/details?id=net.osmtracker)\n[<img src=\"https://f-droid.org/badge/get-it-on.png\" alt=\"Get it on F-Droid\" height=\"80\">](https://f-droid.org/app/net.osmtracker)\n\n## More Info ℹ️\n\n- Find more information in the [documentation](https://github.com/labexp/osmtracker-android/wiki)\n- Submit bug reports in the [issue tracker](https://github.com/labexp/osmtracker-android/issues)\n- Contributions are welcome, please visit our [contributor guide](https://github.com/labexp/osmtracker-android/blob/master/CONTRIBUTING.md)\n- Translations can be done on [Transifex](https://explore.transifex.com/labexp/osmtracker-android/)\n\n## Community & Support 🌐\n\nJoin our **Telegram group** to connect with users, developers, translators, and contributors:  \n👉 [https://t.me/OSMTracker](https://t.me/OSMTracker)\n\nUse this space for real-time discussions, guidance, and support.  \nFor bug reports or feature requests, continue using the [GitHub Issues](https://github.com/labexp/osmtracker-android/issues) tracker.\n\n\n## Note 📝\n\nOSMTracker for Android™ official source code repository is [https://github.com/labexp/osmtracker-android](https://github.com/labexp/osmtracker-android).\n"
  },
  {
    "path": "app/build.gradle",
    "content": "plugins {\n    id 'com.android.application'\n    id 'kotlin-android'\n    id 'jacoco'\n}\n\nandroid {\n    namespace 'net.osmtracker'\n    compileSdk 35\n\n    defaultConfig {\n        applicationId \"net.osmtracker\"\n        minSdk 25\n        targetSdk 35\n        multiDexEnabled true\n\n        // Version code should be increased after each release\n        versionCode 73\n        versionName new Date().format('yyyy.MM.dd')\n\n        testApplicationId \"net.osmtracker.test\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.findByName('release')\n        }\n        debug {\n            versionNameSuffix \"-dev\"\n        }\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_17\n        targetCompatibility JavaVersion.VERSION_17\n    }\n    kotlinOptions {\n        jvmTarget = JavaVersion.VERSION_17\n    }\n\n    signingConfigs {\n        if (project.hasProperty('signing.storeFile')) {\n            release {\n                storeFile file(project.property('signing.storeFile'))\n                storePassword project.property('signing.storePassword')\n                keyAlias project.property('signing.keyAlias')\n                keyPassword project.property('signing.keyPassword')\n            }\n        }\n    }\n\n    packagingOptions {\n        resources.excludes += [\n            'META-INF/DEPENDENCIES', \n            'META-INF/LICENSE.txt', \n            'META-INF/NOTICE.txt'\n        ]\n    }\n    testOptions {\n        unitTests.returnDefaultValues = true\n        // This flag is required for Robolectric to find XML resources\n        unitTests.includeAndroidResources = true\n        unitTests.all {\n            it.jvmArgs = [\n                '--add-opens', 'java.base/java.io=ALL-UNNAMED',\n                       '--add-opens', 'java.base/java.lang=ALL-UNNAMED',\n                       '--add-opens', 'java.base/java.lang.reflect=ALL-UNNAMED',\n                       '--add-opens', 'java.base/java.util=ALL-UNNAMED'\n            ]\n        }\n        animationsDisabled = true\n    }\n}\n\ndependencies {\n    // Lib to show OSM map as background\n    implementation 'org.osmdroid:osmdroid-android:6.1.20'\n    // OAuth\n    implementation 'net.openid:appauth:0.11.1'\n    implementation 'com.android.volley:volley:1.2.1'\n    // For upload traces to osm server\n    implementation('de.westnordost:osmapi-traces:3.1') {\n        // Already included in Android\n        exclude group: 'net.sf.kxml', module: 'kxml2'\n        exclude group: 'xmlpull', module: 'xmlpull'\n    }\n    // For upload notes to osm server\n    implementation ('de.westnordost:osmapi-notes:3.1'){\n        // Already included in Android\n        exclude group: 'net.sf.kxml', module: 'kxml2'\n        exclude group: 'xmlpull', module: 'xmlpull'\n    }\n    // App intro\n    implementation 'com.github.AppIntro:AppIntro:6.3.1'\n\n    implementation 'com.google.android.material:material:1.12.0'\n    implementation 'org.slf4j:slf4j-android:1.7.30'\n    implementation 'org.apache.commons:commons-io:1.3.2'\n    implementation 'androidx.core:core:1.15.0'\n    implementation 'androidx.constraintlayout:constraintlayout:2.2.0'\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version\"\n    implementation 'androidx.appcompat:appcompat:1.7.0'\n    implementation 'androidx.preference:preference:1.2.0'\n    implementation 'androidx.preference:preference-ktx:1.2.1'\n\n    // Required -- JUnit 4 framework\n    testImplementation 'junit:junit:4.13.2'\n    // Robolectric\n    testImplementation 'org.robolectric:robolectric:4.11.1'\n    // AndroidX Test core for Robolectric\n    testImplementation \"androidx.test:core:1.6.1\"\n    // Mockito framework\n    testImplementation \"org.mockito:mockito-core:3.12.4\"\n\n    // Required for local unit tests. Prevent null in JSONObject, JSONArray, etc.\n    testImplementation 'org.json:json:20240303'\n\n    // Required for instrumented tests\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.7.0'\n    androidTestImplementation 'androidx.test.ext:junit:1.2.1'\n    androidTestImplementation 'androidx.test:rules:1.6.1'\n}\n\nrepositories {\n    google()\n    mavenCentral()\n    maven { url \"https://jitpack.io\" }\n}\n\napply from: \"jacoco.gradle\"\n"
  },
  {
    "path": "app/jacoco.gradle",
    "content": "jacoco {\n    toolVersion = jacocoVersion\n}\n\ntasks.withType(Test).configureEach {\n    jacoco.includeNoLocationClasses = true\n    jacoco.excludes = ['jdk.internal.*']\n}\n\ntasks.register(\"jacocoTestReport\", JacocoReport) {\n    dependsOn testDebugUnitTest\n\n    reports {\n        xml.required = true\n    }\n\n    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*']\n    def mainSrc = \"${project.projectDir}/src/main/java\"\n\n    sourceDirectories.setFrom(files([mainSrc]))\n    classDirectories.setFrom(fileTree(dir: layout.buildDirectory.dir(\"intermediates/javac/debug\").get().asFile, excludes: fileFilter))\n    executionData.setFrom(fileTree(dir: layout.buildDirectory.get(), includes: [\n            'jacoco/testDebugUnitTest.exec', 'outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec'\n    ]))\n}"
  },
  {
    "path": "app/lint.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<lint>\n    <issue id=\"ExtraTranslation\" severity=\"ignore\" />\n    <issue id=\"HardcodedText\" severity=\"ignore\" />\n    <issue id=\"MissingTranslation\" severity=\"ignore\" />\n    <issue id=\"UnusedResources\" severity=\"ignore\" />\n</lint>"
  },
  {
    "path": "app/src/androidTest/assets/gpx/gpx-test.gpx",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"OSMTracker for Android™ - https://github.com/labexp/osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">\n\t<wpt lat=\"34.12\" lon=\"18.45\">\n\t\t<ele>5812.2</ele>\n\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t<name><![CDATA[wp1]]></name>\n\t\t<link href=\"http%3A%2F%2Flink1.com\">\n\t\t\t<text>http://link1.com</text>\n\t\t</link>\n\t\t<sat>2</sat>\n\t\t<hdop>0.0625</hdop>\n\t</wpt>\n\t<wpt lat=\"43.76\" lon=\"31.89\">\n\t\t<ele>75.4</ele>\n\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t<name><![CDATA[wp2]]></name>\n\t\t<link href=\"http%3A%2F%2Flink2.com\">\n\t\t\t<text>http://link2.com</text>\n\t\t</link>\n\t\t<sat>6</sat>\n\t\t<hdop>0.1525000035762787</hdop>\n\t</wpt>\n\t<trk>\n\t\t<name><![CDATA[Tracked with OSMTracker for Android™]]></name>\n\t\t<cmt><![CDATA[Warning: HDOP values aren't the HDOP as returned by the GPS device. They're approximated from the location accuracy in meters.]]></cmt>\n\t\t<trkseg>\n\t\t\t<trkpt lat=\"12.34\" lon=\"56.78\">\n\t\t\t\t<ele>4321.7</ele>\n\t\t\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t\t\t<hdop>0.10499999672174454</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>45.79999923706055</speed>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t\t<trkpt lat=\"21.57\" lon=\"12.6\">\n\t\t\t\t<ele>12.1</ele>\n\t\t\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t\t\t<hdop>0.05999999865889549</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>12.600000381469727</speed>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t</trkseg>\n\t</trk>\n</gpx>\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/activity/PreferencesTest.java",
    "content": "package net.osmtracker.activity;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.clearText;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.typeText;\nimport static androidx.test.espresso.assertion.ViewAssertions.matches;\nimport static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;\nimport static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static org.hamcrest.Matchers.stringContainsInOrder;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.recyclerview.widget.RecyclerView;\nimport androidx.test.core.app.ActivityScenario;\nimport androidx.test.espresso.contrib.RecyclerViewActions;\nimport androidx.test.espresso.matcher.ViewMatchers;\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport androidx.test.platform.app.InstrumentationRegistry;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport java.io.File;\nimport java.util.Arrays;\n\n\n@RunWith(AndroidJUnit4.class)\npublic class PreferencesTest {\n\n\tprivate Context context;\n\tprivate ActivityScenario<Preferences> activity;\n\n\t@Before\n\tpublic void setup() {\n\t\tcontext = InstrumentationRegistry.getInstrumentation().getTargetContext();\n\n\t\t// Reset preferences to default before each test to ensure a clean state\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tprefs.edit().clear().commit();\n\n\t\t// Launch the activity\n\t\tactivity = ActivityScenario.launch(Preferences.class);\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\tactivity.close();\n\t}\n\n\t/**\n\t * Test that the Storage Directory preference logic works to rejects empty input.\n\t */\n\t@Test\n\tpublic void testStorageDirectoryValidatesNonEmpty() {\n\t\tString keyTitle = context.getString(R.string.prefs_storage_dir);\n\t\tString defaultValue = OSMTracker.Preferences.VAL_STORAGE_DIR;\n\n\t\t// Looks for storage directory preference\n\t\tscrollToAndClick(keyTitle);\n\n\t\t// Try to save an empty value\n\t\tonView(withId(android.R.id.edit)).perform(clearText());\n\t\tonView(withText(android.R.string.ok)).perform(click());\n\n\t\t// Open the preference to verify the value in the list remains the default (unchanged)\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.check(matches(hasDescendant(withText(defaultValue))));\n\t}\n\n\t/**\n\t * Test that the Storage Directory preference logic works to automatically append a leading\n\t * slash separator if missing.\n\t */\n\t@Test\n\tpublic void testStorageDirectoryValidatesAppendLeadingSlash() {\n\t\tString keyTitle = context.getString(R.string.prefs_storage_dir);\n\t\tString expected = File.separator + \"my_folder\";\n\n\n\t\t// Looks for storage directory preference\n\t\tscrollToAndClick(keyTitle);\n\n\t\t// Try to type a value without a slash\n\t\tonView(withId(android.R.id.edit)).perform(clearText());\n\t\tonView(withId(android.R.id.edit))\n\t\t\t\t.perform(typeText(\"my_folder\"));\n\t\tonView(withText(android.R.string.ok)).perform(click());\n\n\t\t// Open the preference to verify the value in the list is the expected\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.check(matches(hasDescendant(withText(expected))));\n\t}\n\n\t/**\n\t * Test Numeric Input logic (GPS Logging Interval): update summary with suffix.\n\t */\n\t@Test\n\tpublic void testNumericInputLogic() {\n\t\tString title = context.getString(R.string.prefs_gps_logging_interval);\n\t\tString suffix = context.getString(R.string.prefs_gps_logging_interval_seconds);\n\n\t\tscrollToAndClick(title);\n\n\t\t// Enter a valid number\n\t\tonView(withId(android.R.id.edit))\n\t\t\t\t.perform(clearText(), typeText(\"30\"));\n\t\tonView(withText(android.R.string.ok)).perform(click());\n\n\t\t// Verify summary format: \"30 seconds. <Static Summary>\"\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.check(matches(hasDescendant(withText(stringContainsInOrder(Arrays.asList(\"30\",\n\t\t\t\t\t\tsuffix))))));\n\t}\n\n\t/**\n\t * Test that the Reset button in numeric preferences restores the default value.\n\t */\n\t@Test\n\tpublic void testResetButtonResetsValue() {\n\t\tString title = context.getString(R.string.prefs_gps_logging_interval);\n\t\tString suffix = context.getString(R.string.prefs_gps_logging_interval_seconds);\n\t\tString defaultValue = OSMTracker.Preferences.VAL_GPS_LOGGING_INTERVAL;\n\n\t\tscrollToAndClick(title);\n\n\t\t// Set a custom value \"50\"\n\t\tonView(withId(android.R.id.edit)).perform(clearText(), typeText(\"50\"));\n\t\tonView(withText(android.R.string.ok)).perform(click());\n\n\t\t// Verify custom value is set\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.check(matches(hasDescendant(withText(stringContainsInOrder(Arrays.asList(\"50\",\n\t\t\t\t\t\tsuffix))))));\n\n\t\t// Reopen dialog\n\t\tscrollToAndClick(title);\n\n\t\t// Click the Reset button (Neutral button)\n\t\tonView(withText(R.string.prefs_reset_default_value)).perform(click());\n\n\t\t// Verify value is back to default \"0\"\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.check(matches(hasDescendant(withText(stringContainsInOrder(Arrays.asList(\n\t\t\t\t\t\tdefaultValue,\n\t\t\t\t\t\tsuffix))))));\n\t}\n\n\t/**\n\t * Test ListPreference custom summary logic (Screen Orientation)\n\t * Should show \"Selected Value. \\n ...\" (don't check for the 2nd line of the summary)\n\t */\n\t@Test\n\tpublic void testListPreferenceCustomSummary() {\n\t\tString title = context.getString(R.string.prefs_ui_orientation);\n\n\t\tscrollToAndClick(title);\n\n\t\t// Select 1st option from array resource entries\n\t\tString[] entries = context.getResources()\n\t\t\t\t.getStringArray(R.array.prefs_ui_orientation_options_keys);\n\t\tonView(withText(entries[0])).perform(click());\n\n\t\t// Verify the two-line summary exists\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class)).check(matches(hasDescendant(\n\t\t\t\twithText(stringContainsInOrder(Arrays.asList(entries[0], \".\\n\"))))));\n\t}\n\n\t/**\n\t * Test Clear OAuth Data logic.\n\t */\n\t@Test\n\tpublic void testClearOAuthData() {\n\t\tString title = context.getString(R.string.prefs_osm_clear_oauth_data);\n\n\t\t// Inject a fake token to enable the button\n\t\tSharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context)\n\t\t\t\t.edit();\n\t\teditor.putString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN, \"fake_token\");\n\t\teditor.commit();\n\n\t\t// Relaunch to refresh UI state\n\t\tActivityScenario.launch(Preferences.class);\n\n\n\t\tscrollToAndClick(title);\n\n\t\t// Click OK on Confirmation Dialog\n\t\tonView(withText(R.string.prefs_osm_clear_oauth_data_dialog)).check(matches(isDisplayed()));\n\t\tonView(withText(android.R.string.ok)).perform(click());\n\n\t\t// Verify token is gone in prefs\n\t\tassert(!PreferenceManager.getDefaultSharedPreferences(context)\n\t\t\t\t.contains(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN));\n\t}\n\n\t// --- Helper Methods ---\n\n\t/**\n\t * Helper to scroll to a preference in the RecyclerView and click it.\n\t */\n\tprivate void scrollToAndClick(String text) {\n\t\tonView(ViewMatchers.isAssignableFrom(RecyclerView.class))\n\t\t\t\t.perform(RecyclerViewActions.actionOnItem(\n\t\t\t\t\t\thasDescendant(withText(text)),\n\t\t\t\t\t\tclick()));\n\t}\n\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/data/Mocks.java",
    "content": "package net.osmtracker.data;\n\npublic class Mocks {\n    public static String MOCK_LAYOUT_CONTENT =\n            \"<layouts>\"\n                    +\"    <layout name=\\\"root\\\">\"\n                    +\"\t\t<row>\"\n                    +\"\t\t\t<button type=\\\"tag\\\" label=\\\"A\\\"/>\"\n                    +\"\t\t\t<button type=\\\"tag\\\" label=\\\"B\\\"/>\"\n                    +\"\t\t\t<button type=\\\"tag\\\" label=\\\"C\\\"/>\"\n                    +\"\t\t</row>\"\n                    +\"\t</layout>\"\n                    +\"</layouts>\";\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/layouts/DeleteLayoutTest.java",
    "content": "package net.osmtracker.layouts;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.longClick;\nimport static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static net.osmtracker.util.TestUtils.checkToastIsShownWith;\nimport static net.osmtracker.util.TestUtils.getLayoutsDirectory;\nimport static net.osmtracker.util.TestUtils.getStringResource;\nimport static net.osmtracker.util.TestUtils.injectMockLayout;\nimport static net.osmtracker.util.TestUtils.listFiles;\nimport static org.apache.commons.io.FileUtils.deleteDirectory;\nimport static org.hamcrest.Matchers.equalToIgnoringCase;\nimport static org.junit.Assert.assertFalse;\n\nimport android.Manifest;\n\nimport androidx.lifecycle.Lifecycle;\nimport androidx.test.core.app.ActivityScenario;\nimport androidx.test.rule.GrantPermissionRule;\n\nimport net.osmtracker.R;\nimport net.osmtracker.activity.ButtonsPresets;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.util.CustomLayoutsUtils;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\n\nimport java.io.IOException;\nimport java.util.ArrayList;\n\npublic class DeleteLayoutTest {\n\n\t@Rule\n\tpublic GrantPermissionRule storagePermission = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE);\n\n\tpublic ActivityScenario<ButtonsPresets> activity;\n\n\tprivate static final String layoutName = \"mock\";\n\tprivate static final String ISOLanguageCode = \"es\";\n\n\t@Before\n\tpublic void setUp() {\n\t\t// Makes sure that only the mock layout exists\n\t\ttry {\n\t\t\tdeleteDirectory(getLayoutsDirectory());\n\t\t\tinjectMockLayout(layoutName, ISOLanguageCode);\n\t\t} catch (IOException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\t// Launch activity\n\t\tactivity = ActivityScenario.launch(ButtonsPresets.class);\n\t\tactivity.moveToState(Lifecycle.State.RESUMED);\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\tactivity.close();\n\t}\n\n\t/**\n\t * Assumes being in the ButtonsPresets activity\n\t * Deletes the layout with the received name\n\t */\n\tprivate void deleteLayout() {\n\t\tonView(withText(layoutName)).perform(longClick());\n\t\tonView(withText(getStringResource(R.string.buttons_presets_context_menu_delete))).perform(click());\n\t\tString textToMatch = getStringResource(R.string.buttons_presets_delete_positive_confirmation);\n\t\tonView(withText(equalToIgnoringCase(textToMatch))).perform(click());\n\t}\n\n\t/**\n\t * Deletes the mock layout and then checks that:\n\t * - The UI option doesn't appear anymore\n\t * - The XML file is deleted\n\t * - A Toast is shown to inform about what happened\n\t * - The icons directory is deleted\n\t */\n\t@Test\n\tpublic void layoutDeletionTest() {\n\t\tdeleteLayout();\n\n\t\t// Check the informative Toast is shown\n\t\tcheckToastIsShownWith(getStringResource(R.string.buttons_presets_successful_delete));\n\n\t\t// Check the layout doesn't appear anymore\n\t\tonView(withText(layoutName)).check(doesNotExist());\n\n\t\t// List files after the deletion\n\t\tArrayList<String> filesAfterDeletion = listFiles(getLayoutsDirectory());\n\n\t\t// Check the xml file was deleted\n\t\tString layoutFileName = CustomLayoutsUtils.createFileName(layoutName, ISOLanguageCode);\n\t\tassertFalse(filesAfterDeletion.contains(layoutFileName));\n\n\t\t// Check the icons folder was deleted\n\t\tassertFalse(filesAfterDeletion.contains(layoutName + DataHelper.LAYOUTS_ICONS_DIR_SUFFIX));\n\t}\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/layouts/DownloadLayoutTest.java",
    "content": "package net.osmtracker.layouts;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.assertion.ViewAssertions.matches;\nimport static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;\nimport static androidx.test.espresso.matcher.ViewMatchers.isRoot;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;\nimport static junit.framework.TestCase.fail;\nimport static net.osmtracker.util.WaitForView.waitForView;\n\nimport android.Manifest;\nimport android.content.SharedPreferences;\n\nimport androidx.lifecycle.Lifecycle;\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ActivityScenario;\nimport androidx.test.espresso.Espresso;\nimport androidx.test.espresso.contrib.RecyclerViewActions;\nimport androidx.test.espresso.matcher.ViewMatchers;\nimport androidx.test.rule.GrantPermissionRule;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.TrackManager;\nimport net.osmtracker.util.TestUtils;\n\nimport org.apache.commons.io.FileUtils;\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\n\nimport java.util.Locale;\n\npublic class DownloadLayoutTest {\n\n\tprivate final int WAIT_VIEW_TIMEOUT = 5000;\n\n\t@Rule\n\tpublic GrantPermissionRule fineLocationPermission = GrantPermissionRule.grant(Manifest.permission.ACCESS_FINE_LOCATION);\n\t@Rule\n\tpublic GrantPermissionRule coarseLocationPermission = GrantPermissionRule.grant(Manifest.permission.ACCESS_COARSE_LOCATION);\n\t@Rule\n\tpublic GrantPermissionRule writeStoragePermission = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE);\n\n\tpublic ActivityScenario<TrackManager> activity;\n\n\t@Before\n\tpublic void setUp() {\n\t\t// Skip cool intro\n\t\tSharedPreferences dtPrefs = PreferenceManager\n\t\t\t\t.getDefaultSharedPreferences(getInstrumentation().getTargetContext());\n\t\tdtPrefs.edit().putBoolean(OSMTracker.Preferences.KEY_DISPLAY_APP_INTRO, false).apply();\n\t\t// Launch activity\n\t\tactivity = ActivityScenario.launch(TrackManager.class);\n\t\tactivity.moveToState(Lifecycle.State.RESUMED);\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\tactivity.close();\n\t}\n\n\t@Test\n\tpublic void downloadLayoutTest() {\n\t\tdeleteLayoutsDirectory();\n\n\t\tTestUtils.setLayoutsTestingRepository();\n\n\t\tString layoutName = \"abc\";\n\n\t\tnavigateToAvailableLayouts();\n\n\t\tclickButtonsToDownloadLayout(layoutName);\n\n\t\tmakePostDownloadAssertions(layoutName);\n\t}\n\n\n\tpublic void deleteLayoutsDirectory() {\n\t\ttry {\n\t\t\tFileUtils.deleteDirectory(TestUtils.getLayoutsDirectory());\n\t\t} catch (Exception e) {\n\t\t\te.printStackTrace();\n\t\t\tfail();\n\t\t}\n\t}\n\n\n\t/**\n\t * Assuming being in TrackManager\n\t */\n\tpublic void navigateToAvailableLayouts() {\n\t\t// Open options menu in the Action Bar\n\t\topenActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());\n\t\t// Click on \"Settings\" in this menu\n\t\tonView(withText(TestUtils.getStringResource(R.string.menu_settings))).perform(click());\n\t\t// Click on \"Buttons presets\" settings\n\t\tonView(ViewMatchers.withId(androidx.preference.R.id.recycler_view))\n\t\t\t\t.perform(RecyclerViewActions.actionOnItem(\n\t\t\t\t\t\tViewMatchers.hasDescendant(withText(R.string.prefs_ui_buttons_layout)),\n\t\t\t\t\t\tclick()\n\t\t\t\t));\n\t\t// Wait for \"+\" to be visible\n\t\tonView(isRoot()).perform(waitForView(R.id.launch_available, WAIT_VIEW_TIMEOUT));\n\t\t// Perform a click action on the \"+\" button\n\t\tonView(withId(R.id.launch_available)).perform(click());\n\t}\n\n\n\t/**\n\t * Check the new layouts appears as a new option\n\t * Select the layout and check its buttons are shown when tracking\n\t *\n\t * @param layoutName layout name\n\t */\n\tprivate void makePostDownloadAssertions(String layoutName) {\n\t\tEspresso.pressBack();\n\n\t\t// Check the layout appears as a new option in AvailableLayouts\n\t\tonView(withText(layoutName.toLowerCase())).check(matches(isDisplayed()));\n\n\t\t// Select the layout\n\t\tonView(withText(layoutName.toLowerCase())).perform(click());\n\n\t\t// Go to TrackLogger\n\t\tEspresso.pressBack();\n\t\tEspresso.pressBack();\n\t\tonView(withId(R.id.trackmgr_fab)).perform(click());\n\n\t\t// Check the buttons are loaded correctly\n\t\tString[] expectedButtonsLabels = new String[]{\"A\", \"B\", \"C\"};\n\t\tfor (String label : expectedButtonsLabels)\n\t\t\tonView(withText(label)).check(matches(isDisplayed()));\n\n\t}\n\n\n\tprivate void clickButtonsToDownloadLayout(String layoutName) {\n\t\tonView(withText(layoutName)).perform(click());\n\n\t\t// Catch languages available dialog that shows up when the cell phone is not in English\n\t\tif (!Locale.getDefault().getLanguage().equalsIgnoreCase(\"en\")) {\n\t\t\tonView(withText(\"English\")).perform(click());\n\t\t}\n\n\t\tonView(withText(TestUtils.getStringResource(R.string.available_layouts_description_dialog_positive_confirmation))).\n\t\t\t\tperform(click());\n\n\t\tTestUtils.checkToastIsShownWith(TestUtils.getStringResource(R.string.available_layouts_successful_download));\n\t}\n}"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/layouts/RepositorySettingsDialogTest.java",
    "content": "package net.osmtracker.layouts;\n\nimport static androidx.test.espresso.Espresso.onView;\nimport static androidx.test.espresso.action.ViewActions.clearText;\nimport static androidx.test.espresso.action.ViewActions.click;\nimport static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;\nimport static androidx.test.espresso.action.ViewActions.typeText;\nimport static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;\nimport static androidx.test.espresso.assertion.ViewAssertions.matches;\nimport static androidx.test.espresso.matcher.ViewMatchers.isChecked;\nimport static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;\nimport static androidx.test.espresso.matcher.ViewMatchers.isEnabled;\nimport static androidx.test.espresso.matcher.ViewMatchers.withId;\nimport static androidx.test.espresso.matcher.ViewMatchers.withText;\nimport static net.osmtracker.util.TestUtils.checkToastIsShownWith;\nimport static net.osmtracker.util.TestUtils.getStringResource;\nimport static org.hamcrest.core.IsNot.not;\n\nimport android.view.View;\n\nimport androidx.lifecycle.Lifecycle;\nimport androidx.test.core.app.ActivityScenario;\nimport androidx.test.espresso.ViewAssertion;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.AvailableLayouts;\n\nimport org.hamcrest.Matcher;\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\n\npublic class RepositorySettingsDialogTest {\n\n\tpublic ActivityScenario<AvailableLayouts> activity;\n\n\t@Before\n\tpublic void setUp() {\n\t\t// Launch activity\n\t\tactivity = ActivityScenario.launch(AvailableLayouts.class);\n\t\tactivity.moveToState(Lifecycle.State.RESUMED);\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\tactivity.close();\n\t}\n\n\t@Test\n\tpublic void testToggleBehaviour() {\n\t\tonView(withId(R.id.github_config)).perform(click());\n\n\t\tonView(withId(R.id.default_server)).perform(click(), closeSoftKeyboard());\n\t\tcheckStateAfterToggle(R.id.default_server, R.id.custom_server);\n\t\tcheckTextFieldsState(not(isEnabled()));\n\t\tcheckTextFieldsDefaultValues();\n\n\t\tonView(withId(R.id.custom_server)).perform(click(), closeSoftKeyboard());\n\t\tcheckStateAfterToggle(R.id.custom_server, R.id.default_server);\n\t\tcheckTextFieldsState(isEnabled());\n\t}\n\n\t@Test\n\tpublic void testRepositoryValidation() {\n\t\tString validUser = OSMTracker.Preferences.VAL_GITHUB_USERNAME;\n\t\tString validRepository = OSMTracker.Preferences.VAL_REPOSITORY_NAME;\n\t\tString validBranch = OSMTracker.Preferences.VAL_BRANCH_NAME;\n\t\tString invalidBranch = \"NONE\";\n\n\t\tcheckRepositoryValidity(validUser, validRepository, validBranch, true);\n\t\tcheckRepositoryValidity(validUser, validRepository, invalidBranch, false);\n\t}\n\n\n\tpublic void checkStateAfterToggle(int expectedActiveId, int expectedInactiveId) {\n\t\tonView(withId(expectedActiveId)).check(matches(not(isEnabled())));\n\t\tonView(withId(expectedActiveId)).check(matches(isChecked()));\n\t\tonView(withId(expectedInactiveId)).check(matches(not(isChecked())));\n\t\tonView(withId(expectedInactiveId)).check(matches(isEnabled()));\n\t}\n\n\tpublic void checkRepositoryValidity(String user, String repo, String branch, boolean isValid) {\n\t\tonView(withId(R.id.github_config)).perform(click());\n\n\t\tonView(withId(R.id.custom_server)).perform(click(), closeSoftKeyboard());\n\n\t\tonView(withId(R.id.github_username)).perform(clearText(), typeText(user), closeSoftKeyboard());\n\t\tonView(withId(R.id.repository_name)).perform(clearText(), typeText(repo), closeSoftKeyboard());\n\t\tonView(withId(R.id.branch_name)).perform(clearText(), typeText(branch), closeSoftKeyboard());\n\n\t\tonView(withText(getStringResource(R.string.menu_save))).perform(click());\n\n\t\tString expectedMessage = (isValid) ? getStringResource(R.string.github_repository_settings_valid_server) :\n\t\t\t\tgetStringResource(R.string.github_repository_settings_invalid_server);\n\n\t\tcheckToastIsShownWith(expectedMessage);\n\n\t\tViewAssertion expectedDialogState = (isValid) ? doesNotExist() : matches(isDisplayed());\n\t\tcheckDialogState(expectedDialogState);\n\t}\n\n\t/**\n\t * Check if the dialog is shown by looking for its title on the screen\n\t */\n\tprivate void checkDialogState(ViewAssertion assertion) {\n\t\tonView(withText(getStringResource(R.string.prefs_ui_github_repository_settings))).check(assertion);\n\t}\n\n\t/**\n\t * Check that the text fields values match the expected default ones\n\t */\n\tprivate void checkTextFieldsDefaultValues() {\n\t\tonView(withId(R.id.repository_name)).check(matches(withText(OSMTracker.Preferences.VAL_REPOSITORY_NAME)));\n\t\tonView(withId(R.id.branch_name)).check(matches(withText(OSMTracker.Preferences.VAL_BRANCH_NAME)));\n\t\tonView(withId(R.id.github_username)).check(matches(withText(OSMTracker.Preferences.VAL_GITHUB_USERNAME)));\n\t}\n\n\t/**\n\t * @param matcher can be isEnabled or not(isEnabled()) or any matcher\n\t */\n\tpublic void checkTextFieldsState(Matcher<View> matcher) {\n\n\t\tonView(withId(R.id.github_username)).check(matches(matcher));\n\t\tonView(withId(R.id.repository_name)).check(matches(matcher));\n\t\tonView(withId(R.id.branch_name)).check(matches(matcher));\n\t}\n\n\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/util/LogcatHelper.java",
    "content": "package net.osmtracker.util;\n\nimport android.util.Log;\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.util.regex.Pattern;\n\npublic class LogcatHelper {\n\n    public static boolean checkLogForMessage(String tag, String message) {\n        try {\n            Process process = Runtime.getRuntime().exec(\"logcat -d \" + tag + \":I *:S\");\n            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));\n\n            String line;\n            Pattern pattern = Pattern.compile(\".*\\\\b\" + Pattern.quote(message) + \"\\\\b.*\");\n\n            while ((line = bufferedReader.readLine()) != null) {\n                if (pattern.matcher(line).matches()) {\n                    return true;\n                }\n            }\n        } catch (Exception e) {\n            Log.e(\"LogcatHelper\", \"Error reading logcat output\", e);\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/util/TestUtils.java",
    "content": "package net.osmtracker.util;\n\nimport static net.osmtracker.util.LogcatHelper.checkLogForMessage;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.platform.app.InstrumentationRegistry;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.data.Mocks;\nimport net.osmtracker.db.DataHelper;\n\nimport java.io.File;\nimport java.io.FileWriter;\nimport java.util.ArrayList;\n\n/**\n * Contains common and reusable static methods used for tests\n */\npublic class TestUtils {\n\n    public static String TESTING_GITHUB_USER = \"labexp\";\n    public static String TESTING_GITHUB_REPOSITORY = \"osmtracker-android-layouts\";\n    public static String TESTING_GITHUB_BRANCH = \"for_tests\";\n\n    /**\n     * List all the files in a folder and return a list of the names\n     */\n    public static ArrayList<String> listFiles(File directory){\n        ArrayList result = new ArrayList();\n        for(File file : directory.listFiles()){\n            result.add(file.getName());\n        }\n        return  result;\n    }\n\n    /**\n     * Create a directory inside a directory and return the corresponding file\n     */\n    public static File createDirectory(File parentDir, String newDirName){\n        File newDir = new File(parentDir.getAbsolutePath() + File.separator + newDirName);\n        newDir.mkdir();\n        return newDir;\n    }\n\n    /**\n     * Create a file inside a directory\n     */\n    public static File createFile(File parentDir, String newFileName){\n        File newFile = new File(parentDir.getAbsolutePath()+ File.separator + newFileName);\n        return newFile;\n    }\n\n    /**\n     * Install a mock layout in the phone\n     *  - Creates the xml, the icons directory and some empty png files inside\n     */\n    public static void injectMockLayout(String layoutName, String ISOLangCode) {\n        File layoutsDir = getLayoutsDirectory();\n\n        // Create a mock layout file\n        String layoutFileName = CustomLayoutsUtils.createFileName(layoutName, ISOLangCode);\n        File newLayout = createFile(layoutsDir,layoutFileName);\n        writeToFile(newLayout, Mocks.MOCK_LAYOUT_CONTENT);\n\n        // Create the icons directory\n        File iconsDir = createDirectory(layoutsDir, layoutName + DataHelper.LAYOUTS_ICONS_DIR_SUFFIX);\n\n        // And put some mock files inside\n        int pngsToCreate = 4;\n        File png;\n        for (int i = 1; i <= pngsToCreate; i++) {\n            png = createFile(iconsDir, i+\".png\");\n            writeToFile(png, \"foo\");\n        }\n    }\n\n\n    /**\n     * Write content to a file\n     */\n    public static void writeToFile(File file, String content){\n        try{\n            FileWriter writer = new FileWriter(file);\n            writer.write(content);\n            writer.close();\n        }catch (Exception e){\n            System.out.println(\"Error writing to file\");\n        }\n    }\n\n    /**\n     * Get the app's storage directory\n     * - If it doesn't exist then should create it before returning\n     */\n    public static File getAppDirectory(){\n        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();\n        String storageDir =  context.getExternalFilesDir(null).getAbsolutePath();\n        File appDirectory = new File(storageDir + OSMTracker.Preferences.VAL_STORAGE_DIR);\n        appDirectory.mkdirs();\n        return appDirectory;\n    }\n\n    /**\n     * Get the app's layouts directory\n     * - If it doesn't exist then should create it before returning\n     */\n    public static File getLayoutsDirectory(){\n        String appDirectory = getAppDirectory().getAbsolutePath();\n        File layoutsDirectory = new File(appDirectory + File.separator + DataHelper.LAYOUTS_SUBDIR);\n        layoutsDirectory.mkdirs();\n        return layoutsDirectory;\n    }\n\n    public static void checkToastIsShownWith(String text){\n        // Espresso can not check Toast for android >= 11\n        // https://github.com/android/android-test/issues/803\n        //onView(withText(text)).inRoot(new ToastMatcher()).check(matches(isDisplayed()));\n        checkLogForMessage(\"TOAST\", text);\n    }\n\n    public static String getStringResource(int resourceId){\n        return InstrumentationRegistry.getInstrumentation().getTargetContext().getString(resourceId);\n    }\n\n    public static void setGithubRepositorySettings(String user, String repo, String branch){\n        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();\n        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();\n        editor.putString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, user);\n        editor.putString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, repo);\n        editor.putString(OSMTracker.Preferences.KEY_BRANCH_NAME, branch);\n        editor.commit();\n    }\n\n    public static void setLayoutsTestingRepository(){\n        setGithubRepositorySettings(TESTING_GITHUB_USER,TESTING_GITHUB_REPOSITORY,TESTING_GITHUB_BRANCH);\n    }\n\n}\n"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/util/ToastMatcher.java",
    "content": "package net.osmtracker.util;\n\nimport android.os.IBinder;\nimport androidx.test.espresso.Root;\nimport android.view.WindowManager;\n\nimport org.hamcrest.Description;\nimport org.hamcrest.TypeSafeMatcher;\n\n/**\n * Used to search for Toasts in the UI\n * This class was taken from <a href=\"https://stackoverflow.com/questions/28390574/checking-toast-message-in-android-espresso\">stackoverflow</a>\n */\npublic class ToastMatcher extends TypeSafeMatcher<Root> {\n\n    @Override\n    public void describeTo(Description description) {\n        description.appendText(\"is toast\");\n    }\n\n    @Override\n    public boolean matchesSafely(Root root) {\n        int type = root.getWindowLayoutParams().get().type;\n        if ((type == WindowManager.LayoutParams.TYPE_TOAST)) {\n            IBinder windowToken = root.getDecorView().getWindowToken();\n            IBinder appToken = root.getDecorView().getApplicationWindowToken();\n            if (windowToken == appToken) {\n                return true;\n            }\n        }\n        return false;\n    }\n}"
  },
  {
    "path": "app/src/androidTest/java/net/osmtracker/util/WaitForView.java",
    "content": "package net.osmtracker.util;\n\nimport android.view.View;\nimport androidx.test.espresso.PerformException;\nimport androidx.test.espresso.UiController;\nimport androidx.test.espresso.ViewAction;\nimport androidx.test.espresso.matcher.ViewMatchers;\nimport androidx.test.espresso.util.HumanReadables;\nimport androidx.test.espresso.util.TreeIterables;\n\nimport org.hamcrest.Matcher;\n\nimport java.util.concurrent.TimeoutException;\n\npublic class WaitForView implements ViewAction {\n    private final int viewId;\n    private final long timeout;\n\n    /**\n     * This ViewAction tells espresso to wait till a certain view is found in the view hierarchy.\n     * @param viewId The id of the view to wait for.\n     * @param timeout The maximum time which espresso will wait for the view to show up (in milliseconds)\n     */\n    public WaitForView(int viewId, long timeout) {\n        this.viewId = viewId;\n        this.timeout = timeout;\n    }\n\n    @Override\n    public Matcher<View> getConstraints() {\n        return ViewMatchers.isRoot();\n    }\n\n    @Override\n    public String getDescription() {\n        return \"wait for a specific view with id \" + viewId + \" during \" + timeout + \" millis.\";\n    }\n\n    @Override\n    public void perform(UiController uiController, View rootView) {\n        uiController.loopMainThreadUntilIdle();\n        long startTime = System.currentTimeMillis();\n        long endTime = startTime + timeout;\n        Matcher<View> viewMatcher = ViewMatchers.withId(viewId);\n\n        do {\n            for (View child : TreeIterables.breadthFirstViewTraversal(rootView)) {\n                if (viewMatcher.matches(child)) {\n                    return;\n                }\n            }\n            uiController.loopMainThreadForAtLeast(100);\n        } while (System.currentTimeMillis() < endTime);\n\n        throw new PerformException.Builder()\n                .withCause(new TimeoutException())\n                .withActionDescription(this.getDescription())\n                .withViewDescription(HumanReadables.describe(rootView))\n                .build();\n    }\n\n    public static ViewAction waitForView(final int viewId, final long timeout) {\n        return new WaitForView(viewId, timeout);\n    }\n}\n"
  },
  {
    "path": "app/src/androidTest/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"app_name\">OSMTrackerTestsTest</string>\n\n</resources>"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:installLocation=\"auto\">\n\n    <!-- Location permissions -->\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_LOCATION\"/>\n\n    <!-- Foreground services and network permissions -->\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"/>\n\n    <!-- External storage permissions -->\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n\n    <application\n        android:description=\"@string/app_description\"\n        android:icon=\"@drawable/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/HighContrast\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:usesCleartextTraffic=\"true\" >\n\n        <uses-library\n            android:name=\"org.apache.http.legacy\"\n            android:required=\"false\" />\n\n        <activity android:name=\"net.osmtracker.activity.Intro\"\n            android:label=\"@string/app_intro\"\n            android:theme=\"@style/AppIntroStyle\"/>\n        <activity\n            android:name=\".activity.TrackManager\"\n            android:theme=\"@style/AppTheme\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".activity.TrackLogger\"\n            android:label=\"@string/tracklogger\"\n            android:launchMode=\"singleTop\" />\n        <activity\n            android:name=\".activity.Preferences\"\n            android:exported=\"false\"\n            android:label=\"@string/prefs\"\n            android:theme=\"@style/AppTheme\" />\n        <activity\n            android:name=\".activity.WaypointList\"\n            android:label=\"@string/wplist\" />\n        <activity\n            android:name=\".activity.NoteList\"\n            android:theme=\"@style/AppTheme\"\n            android:label=\"@string/notelist\" />\n        <activity\n            android:name=\".activity.TrackDetail\"\n            android:label=\"@string/trackdetail\" />\n        <activity\n            android:name=\".activity.OpenStreetMapUpload\"\n            android:label=\"@string/osm_upload\"\n            android:exported=\"true\">\n        </activity>\n        <activity android:name=\".activity.OpenStreetMapNotesUpload\"\n            android:theme=\"@style/AppTheme\"/>\n        <activity\n            android:name=\"net.openid.appauth.RedirectUriReceiverActivity\"\n            tools:node=\"replace\" android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\"/>\n                <category android:name=\"android.intent.category.DEFAULT\"/>\n                <category android:name=\"android.intent.category.BROWSABLE\"/>\n                <data\n                    android:scheme=\"osmtracker\"/>\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".activity.GitHubUpload\"\n            android:label=\"Github\" />\n        <activity\n            android:name=\".activity.GitHubConfig\"\n            android:label=\"Github\" />\n        <activity\n            android:name=\".activity.GitHubNewRepo\"\n            android:label=\"Github\" />\n        <activity\n            android:name=\".activity.GitHubNewFork\"\n            android:label=\"Github\" />\n        <activity\n            android:name=\".activity.GitHubPullRequest\"\n            android:label=\"Github\" />\n        <activity\n            android:name=\".activity.About\"\n            android:label=\"@string/about\" />\n        <activity\n            android:name=\".activity.DisplayTrack\"\n            android:label=\"@string/displaytrack\" />\n        <activity\n            android:name=\".activity.DisplayTrackMap\"\n            android:label=\"@string/displaytrackmap\" />\n        <activity android:name=\".activity.ButtonsPresets\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"launch_buttons_presets\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\".activity.AvailableLayouts\" />\n\n        <service\n            android:name=\".service.gps.GPSLogger\"\n            android:foregroundServiceType=\"location\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"osmtracker.intent.GPS_SERVICE\" />\n            </intent-filter>\n        </service>\n\n        <provider\n            android:name=\".db.TrackContentProvider\"\n            android:authorities=\"net.osmtracker.provider\"\n            android:exported=\"false\" />\n\n        <receiver android:name=\".receiver.MediaButtonReceiver\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MEDIA_BUTTON\" />\n            </intent-filter>\n        </receiver>\n\n        <provider\n            android:name=\"androidx.core.content.FileProvider\"\n            android:authorities=\"net.osmtracker.fileprovider\"\n            android:exported=\"false\"\n            android:grantUriPermissions=\"true\">\n            <meta-data\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\n                android:resource=\"@xml/filepaths\" />\n        </provider>\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/GitHubUser.java",
    "content": "package net.osmtracker;\n\nimport net.osmtracker.github.*;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\npublic class GitHubUser {\n    private SharedPreferences sharedPreferences;\n\n    public GitHubUser(Context context) {\n        sharedPreferences = context.getSharedPreferences(GitHubConstants.SHARED_PREFS_NAME, Context.MODE_PRIVATE);\n    }\n\n    public void saveCredentials(String username, String token) {\n        sharedPreferences.edit()\n                .putString(GitHubConstants.KEY_USERNAME, username)\n                .putString(GitHubConstants.KEY_TOKEN, token)\n                .apply();\n    }\n\n    public String getUsername() {\n        return sharedPreferences.getString(GitHubConstants.KEY_USERNAME, \"\");\n    }\n\n    public String getToken() {\n        return sharedPreferences.getString(GitHubConstants.KEY_TOKEN, \"\");\n    }\n\n    public boolean hasCredentials() {\n        return !getUsername().isEmpty() && getToken().length() == 40;\n    }\n\n    public void clear() {\n        sharedPreferences.edit().clear().apply();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/OSMTracker.java",
    "content": "package net.osmtracker;\n\n\n/**\n * Constants & app-wide variables.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class OSMTracker {\n\n\t/**\n\t * Stores settings keys and default values.\n\t * See preferences.xml for layout, strings-preferences.xml for text.\n\t */\n\tpublic static final class Preferences {\n\t\t// Property names\n\t\tpublic final static String KEY_STORAGE_DIR = \"logging.storage.dir\";\n\t\tpublic final static String KEY_VOICEREC_DURATION = \"voicerec.duration\";\n\t\tpublic final static String KEY_UI_THEME = \"ui.theme\";\n\t\tpublic final static String KEY_GPS_OSSETTINGS = \"gps.ossettings\";\n\t\tpublic final static String KEY_GPS_CHECKSTARTUP = \"gps.checkstartup\";\n\t\tpublic final static String KEY_GPS_IGNORE_CLOCK = \"gps.ignoreclock\";\n\t\tpublic final static String KEY_GPS_LOGGING_INTERVAL = \"gps.logging.interval\";\n\t\tpublic final static String KEY_GPS_LOGGING_MIN_DISTANCE = \"gps.logging.min_distance\";\n\t\tpublic final static String KEY_USE_BAROMETER = \"gpx.use_barometer\";\n\t\tpublic final static String KEY_USE_NOTES = \"gpx.notes\";\n\t\tpublic final static String KEY_OUTPUT_FILENAME = \"gpx.filename\";\n\t\tpublic final static String KEY_OUTPUT_FILENAME_LABEL  = \"gpx.filename.label\";\n\t\tpublic final static String KEY_OUTPUT_ACCURACY = \"gpx.accuracy\";\n\t\tpublic final static String KEY_OUTPUT_GPX_HDOP_APPROXIMATION = \"gpx.hdop.approximation\";\n\t\tpublic final static String KEY_OUTPUT_DIR_PER_TRACK = \"gpx.directory_per_track\";\n\t\tpublic final static String KEY_OUTPUT_COMPASS = \"gpx.compass_heading\";\n\t\t\n\t\tpublic final static String KEY_UI_PICTURE_SOURCE = \"ui.picture.source\";\n\t\tpublic final static String KEY_UI_BUTTONS_LAYOUT = \"ui.buttons.layout\";\n\t\tpublic final static String KEY_UI_DISPLAYTRACK_OSM = \"ui.displaytrack.osm\";\n\t\t/** True if DisplayTrack activity has already asked the user whether they'd rather see DisplayTrackMap. */\n\t\tpublic static final String KEY_UI_ASKED_DISPLAYTRACK_OSM = \"ui.displaytrack.asked_osm\";\n\t\tpublic final static String KEY_UI_DISPLAY_KEEP_ON = \"ui.display_keep_on\";\n\t\tpublic final static String KEY_UI_MAP_TILE = \"ui.map.tile\";\n\t\tpublic final static String KEY_SOUND_ENABLED = \"sound_enabled\";\n\t\tpublic final static String KEY_UI_ORIENTATION = \"ui.orientation\";\n\t\tpublic final static String KEY_OSM_TRACK_VISIBILITY = \"osm.track.visibility\";\n\t\tpublic final static String KEY_OSM_OAUTH2_ACCESSTOKEN = \"osm.oauth2.accesstoken\";\n\t\tpublic final static String KEY_OSM_OAUTH_CLEAR_DATA = \"osm.oauth.clear-data\";\n\n\t\t//keys for repository settings\n\t\tpublic final static String KEY_GITHUB_USERNAME = \"github_username\";\n\t\tpublic final static String KEY_REPOSITORY_NAME = \"repository_name\";\n\t\tpublic final static String KEY_BRANCH_NAME = \"branch_name\";\n\n\t\t// intro flag\n\t\tpublic final static String KEY_DISPLAY_APP_INTRO = \"app.intro\";\n\n\t\t// Default values\n\t\tpublic final static String VAL_STORAGE_DIR = \"/osmtracker\";\n\t\tpublic final static String VAL_VOICEREC_DURATION = \"2\";\n\t\tpublic final static String VAL_UI_THEME = \"net.osmtracker:style/DefaultTheme\";\n\t\tpublic final static boolean VAL_GPS_CHECKSTARTUP = true;\n\t\tpublic final static boolean VAL_GPS_IGNORE_CLOCK = false;\n\t\tpublic final static String VAL_GPS_LOGGING_INTERVAL = \"0\";\n\t\tpublic final static String VAL_GPS_LOGGING_MIN_DISTANCE = \"0\";\n\t\tpublic final static boolean VAL_USE_BAROMETER = false;\n\t\tpublic final static String VAL_USE_NOTES = \"both\";\n\t\t\n\t\tpublic final static String VAL_OUTPUT_FILENAME_NAME = \"name\";\n\t\tpublic final static String VAL_OUTPUT_FILENAME_NAME_DATE = \"name_date\";\n\t\tpublic final static String VAL_OUTPUT_FILENAME_DATE_NAME = \"date_name\";\n\t\tpublic final static String VAL_OUTPUT_FILENAME_DATE = \"date\";\n\t\tpublic final static String VAL_OUTPUT_FILENAME = VAL_OUTPUT_FILENAME_NAME_DATE;\n\t\tpublic final static String VAL_OUTPUT_FILENAME_LABEL = \"\";\n\n\t\tpublic final static String VAL_OUTPUT_ACCURACY_NONE = \"none\";\n\t\tpublic final static String VAL_OUTPUT_ACCURACY_WPT_NAME = \"wpt_name\";\n\t\tpublic final static String VAL_OUTPUT_ACCURACY_WPT_CMT = \"wpt_cmt\";\n\t\tpublic final static String VAL_OUTPUT_ACCURACY = VAL_OUTPUT_ACCURACY_NONE;\n\n\t\tpublic final static String VAL_OUTPUT_COMPASS_NONE = \"none\";\n\t\tpublic final static String VAL_OUTPUT_COMPASS_COMMENT = \"comment\";\n\t\tpublic final static String VAL_OUTPUT_COMPASS_EXTENSION = \"extension\";\n\t\tpublic final static String VAL_OUTPUT_COMPASS = VAL_OUTPUT_COMPASS_NONE;\n\t\t\n\t\tpublic final static boolean VAL_OUTPUT_GPX_HDOP_APPROXIMATION = false;\n\t\tpublic final static boolean VAL_OUTPUT_GPX_OUTPUT_DIR_PER_TRACK = true;\n\n\t\tpublic final static String VAL_UI_PICTURE_SOURCE_CAMERA = \"camera\";\n\t\tpublic final static String VAL_UI_PICTURE_SOURCE_GALLERY = \"gallery\";\n\t\tpublic final static String VAL_UI_PICTURE_SOURCE_ASK = \"ask\";\n\t\tpublic final static String VAL_UI_PICTURE_SOURCE = VAL_UI_PICTURE_SOURCE_CAMERA;\n\t\t\n\t\tpublic final static String VAL_UI_BUTTONS_LAYOUT = \"default\";\n\t\tpublic final static boolean VAL_UI_DISPLAYTRACK_OSM = false;\n\t\tpublic final static boolean VAL_UI_DISPLAY_KEEP_ON = true;\n\t\tpublic final static boolean VAL_SOUND_ENABLED = true;\n\t\t// Matches Track.OSMVisibility.Identifiable;\n\t\tpublic final static String VAL_OSM_TRACK_VISIBILITY = \"Identifiable\";\n\t\tpublic final static String VAL_UI_ORIENTATION_NONE = \"none\";\n\t\tpublic final static String VAL_UI_ORIENTATION_PORTRAIT = \"portrait\";\n\t\tpublic final static String VAL_UI_ORIENTATION_LANDSCAPE = \"landscape\";\n\t\tpublic final static String VAL_UI_ORIENTATION = VAL_UI_ORIENTATION_NONE;\n\t\t\n\t\tpublic final static String VAL_UI_MAP_TILE_MAPNIK = \"MAPNIK\";\n\n\t\t//default values for repository settings\n\t\tpublic final static String VAL_GITHUB_USERNAME = \"labexp\";\n\t\tpublic final static String VAL_REPOSITORY_NAME = \"osmtracker-android-layouts\";\n\t\tpublic final static String VAL_BRANCH_NAME = \"master\";\n\n\t\t// intro flag\n\t\tpublic final static boolean VAL_DISPLAY_APP_INTRO = true;\n\n\n\t};\n\t\n\t/**\n\t * The full Package name of OSMTracker returned by calling\n\t * OSMTracker.class.getPackage().getName()\n\t */\n\tpublic final static String PACKAGE_NAME = OSMTracker.class.getPackage().getName();\n\n\t/**\n\t * Intent for tracking a waypoint\n\t */\n\tpublic final static String INTENT_TRACK_WP = OSMTracker.PACKAGE_NAME + \".intent.TRACK_WP\";\n\n\t/**\n\t * Intent for updating a previously tracked waypoint\n\t */\n\tpublic final static String INTENT_UPDATE_WP = OSMTracker.PACKAGE_NAME + \".intent.UPDATE_WP\";\n\t\n\t/**\n\t * Intent for deleting a previously tracked waypoint\n\t */\n\tpublic final static String INTENT_DELETE_WP = OSMTracker.PACKAGE_NAME + \".intent.DELETE_WP\";\n\n\t/**\n\t * Intent for tracking a note\n\t */\n\tpublic final static String INTENT_TRACK_NOTE = OSMTracker.PACKAGE_NAME + \".intent.TRACK_NOTE\";\n\t/**\n\t * Intent for updating a previously tracked waypoint\n\t */\n\tpublic final static String INTENT_UPDATE_NOTE = OSMTracker.PACKAGE_NAME + \".intent.UPDATE_NOTE\";\n\n\t/**\n\t * Intent to start tracking\n\t */\n\tpublic final static String INTENT_START_TRACKING = OSMTracker.PACKAGE_NAME + \".intent.START_TRACKING\";\n\n\t/**\n\t * Intent to stop tracking\n\t */\n\tpublic final static String INTENT_STOP_TRACKING = OSMTracker.PACKAGE_NAME + \".intent.STOP_TRACKING\";\n\n\t/**\n\t * Key for extra data \"waypoint name\" in Intent\n\t */\n\tpublic final static String INTENT_KEY_NAME = \"name\";\n\n\t/**\n\t * Key for extra data \"link\" in Intent\n\t */\n\tpublic final static String INTENT_KEY_LINK = \"link\";\n\t\n\t/**\n\t * Key for extra data \"uuid\" in Intent\n\t */\n\tpublic final static String INTENT_KEY_UUID = \"uuid\";\n\t\n\t/**\n\t * Approximation factor for calculating Horizontal Dilution of Precision\n\t * from location.getAccuracy(). location.getAccuracy() returns an accuracy measured\n\t * in meters, and HDOP is obtained by dividing accuracy by this factor.\n\t * The value is totally false (!), but is still useful for certain use case like\n\t * track display in JOSM.\n\t * See: http://code.google.com/p/osmtracker-android/issues/detail?id=15 \n\t */\n\tpublic final static int HDOP_APPROXIMATION_FACTOR = 4;\n\t\n\t/**\n\t * time (in ms) we use to handle a key press as a long press\n\t */\n\tpublic final static long LONG_PRESS_TIME = 1000;\n\t\n\t/** Device string identifiers */\n\tpublic static final class Devices {\n\t\tpublic static final String NEXUS_S = \"Nexus S\";\n\t}\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/About.java",
    "content": "package net.osmtracker.activity;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DatabaseHelper;\nimport net.osmtracker.db.ExportDatabaseTask;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.Dialog;\nimport android.app.ProgressDialog;\nimport android.content.DialogInterface;\nimport android.content.SharedPreferences;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager.NameNotFoundException;\nimport android.os.Bundle;\nimport android.os.Environment;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.widget.TextView;\n\nimport androidx.preference.PreferenceManager;\n\nimport java.io.File;\n\n/**\n * Simply display the about screen.\n * \n * @author Nicolas Guillaumin\n *\n */\npublic class About extends Activity {\n\n\tpublic static final int DIALOG_EXPORT_DB = 0;\n\tpublic static final int DIALOG_EXPORT_DB_COMPLETED = 1;\n\n\tprivate ProgressDialog exportDbProgressDialog;\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\tsetContentView(R.layout.about);\n\n\t\t// Retrieve app. version number\n\t\ttry {\n\t\t\tPackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0);\n\t\t\t((TextView) findViewById(R.id.about_version)).setText(pi.versionName);\n\t\t} catch (NameNotFoundException nnfe) { \n\t\t\t// Should not occur\n\t\t}\n\n\t\tfindViewById(R.id.about_debug_info_button).setOnClickListener(\n\t\t\t\tnew OnClickListener() {\n\t\t\t\t\t\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onClick(View v) {\n\t\t\t\t\t\tnew AlertDialog.Builder(v.getContext())\n\t\t\t\t\t\t\t.setTitle(R.string.about_debug_info)\n\t\t\t\t\t\t\t.setMessage(getDebugInfo())\n\t\t\t\t\t\t\t.setCancelable(true)\n\t\t\t\t\t\t\t.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.create().show();\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t);\n\n\t\tfindViewById(R.id.about_export_db_button).setOnClickListener(\n\t\t\t\tnew OnClickListener() {\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onClick(View view) {\n\t\t\t\t\t\tshowDialog(DIALOG_EXPORT_DB);\n\n\t\t\t\t\t\tFile dbFile = getDatabasePath(DatabaseHelper.DB_NAME);\n\t\t\t\t\t\tFile targetFolder = new File(\n\t\t\t\t\t\t\t\tEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),\n\t\t\t\t\t\t\t\t//Environment.getExternalStorageDirectory(),\n\t\t\t\t\t\t\t\tPreferenceManager.getDefaultSharedPreferences(About.this).getString(\n\t\t\t\t\t\t\t\t\t\tOSMTracker.Preferences.KEY_STORAGE_DIR,\n\t\t\t\t\t\t\t\t\t\tOSMTracker.Preferences.VAL_STORAGE_DIR));\n\n\t\t\t\t\t\tnew ExportDatabaseTask(About.this, targetFolder)\n\t\t\t\t\t\t\t\t.execute(dbFile);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t);\n\t}\n\n\t@Override\n\tprotected Dialog onCreateDialog(int id, Bundle args) {\n\t\tswitch(id) {\n\t\t\tcase DIALOG_EXPORT_DB:\n\t\t\t\texportDbProgressDialog = new ProgressDialog(this);\n\t\t\t\texportDbProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);\n\t\t\t\texportDbProgressDialog.setIndeterminate(false);\n\t\t\t\texportDbProgressDialog.setProgress(0);\n\t\t\t\texportDbProgressDialog.setMax(100);\n\t\t\t\texportDbProgressDialog.setCancelable(false);\n\t\t\t\texportDbProgressDialog.setMessage(getResources().getString(R.string.about_exporting_db));\n\t\t\t\texportDbProgressDialog.show();\n\t\t\t\treturn exportDbProgressDialog;\n\t\t\tcase DIALOG_EXPORT_DB_COMPLETED:\n\t\t\t\tnew AlertDialog.Builder(this)\n\t\t\t\t\t\t.setTitle(R.string.about_export_db)\n\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_info)\n\t\t\t\t\t\t.setMessage(getString(R.string.about_export_db_result, args.getString(\"result\")))\n\t\t\t\t\t\t.setCancelable(true)\n\t\t\t\t\t\t.setNeutralButton(android.R.string.ok,\n\t\t\t\t\t\t\tnew DialogInterface.OnClickListener() {\n\t\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.create()\n\t\t\t\t\t\t.show();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tpublic ProgressDialog getExportDbProgressDialog() {\n\t\treturn exportDbProgressDialog;\n\t}\n\n\tprivate String getDebugInfo() {\n\t\tFile externalStorageDir = this.getExternalFilesDir(null);\n\t\tSharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);\n\t\tString exportDirectoryNameInPreferences = preferences.getString(\n\t\t\t\tOSMTracker.Preferences.KEY_STORAGE_DIR,\tOSMTracker.Preferences.VAL_STORAGE_DIR);\n\t\tFile baseExportDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),\n\t\t\t\texportDirectoryNameInPreferences);\n\t\treturn \"External Storage Directory: '\" + externalStorageDir + \"'\\n\"\n\t\t\t\t+ \"External Storage State: '\"  + Environment.getExternalStorageState() + \"'\\n\"\n\t\t\t\t+ \"Can write to external storage: \"\n\t\t\t\t+ Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) + \"\\n\"\n\t\t\t\t+ \"Export External Public Storage Directory: '\"\n\t\t\t\t+ baseExportDirectory + \"'\\n\";\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/AvailableLayouts.java",
    "content": "package net.osmtracker.activity;\n\nimport android.annotation.SuppressLint;\nimport android.annotation.TargetApi;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.ProgressDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.SharedPreferences;\nimport android.graphics.Color;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.CheckBox;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.preference.PreferenceManager;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.layout.DownloadCustomLayoutTask;\nimport net.osmtracker.layout.GetStringResponseTask;\nimport net.osmtracker.layout.URLValidatorTask;\nimport net.osmtracker.util.CustomLayoutsUtils;\nimport net.osmtracker.util.URLCreator;\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserFactory;\n\nimport java.io.ByteArrayInputStream;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Set;\n\n/**\n * Created by emmanuel on 10/11/17.\n */\n\npublic class AvailableLayouts extends Activity {\n\n    private final static String TMP_SHARED_PREFERENCES_FILE = \"net.osmtracker.tmpspfile\";\n\n    //this variable indicates if the default github configuration is activated\n    private boolean isDefChecked;\n    private SharedPreferences sharedPrefs;\n    private SharedPreferences.Editor editor;\n\n    //options for repository settings\n    private EditText etxGithubUsername;\n    private EditText etxRepositoryName;\n    private EditText etxBranchName;\n    private CheckBox defaultServerCheckBox;\n    private CheckBox customServerCheckBox;\n\n    private boolean checkBoxPressed;\n\n    public static final int ISO_CHARACTER_LENGTH = 2;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);\n        editor = sharedPrefs.edit();\n        setTitle(getResources().getString(R.string.prefs_ui_available_layout));\n        // call task to download and parse the response to get the list of available layouts\n        if (isNetworkAvailable(this)) {\n            validateDefaultOptions();\n        } else {\n            Toast.makeText(getApplicationContext(),getResources().getString(R.string.available_layouts_connection_error),Toast.LENGTH_LONG).show();\n            finish();\n        }\n    }\n\n    @SuppressLint(\"StaticFieldLeak\")\n    public void validateDefaultOptions(){\n        String usernameGitHub = sharedPrefs.getString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, OSMTracker.Preferences.VAL_GITHUB_USERNAME);\n        String repositoryName = sharedPrefs.getString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, OSMTracker.Preferences.VAL_REPOSITORY_NAME);\n        String branchName = sharedPrefs.getString(OSMTracker.Preferences.KEY_BRANCH_NAME, OSMTracker.Preferences.VAL_BRANCH_NAME);\n        final String[] repositoryDefaultOptions = {usernameGitHub, repositoryName, branchName};\n        //we verify if the entered options are correct\n        new URLValidatorTask(){\n            protected void onPostExecute(Boolean result){\n                //validating the github repository\n                if(result){\n                    retrieveAvailableLayouts();\n                }else{\n                    Toast.makeText(getApplicationContext(),getResources().getString(R.string.available_layouts_response_null_exception),Toast.LENGTH_LONG).show();\n                    finish();\n                }\n            }\n        }.execute(repositoryDefaultOptions);\n    }\n\n    @SuppressLint(\"StaticFieldLeak\")\n    public void retrieveAvailableLayouts(){\n        //while it makes the request\n        final String waitingMessage = getResources().getString(R.string.available_layouts_connecting_message);\n        setTitle(getResources().getString(R.string.prefs_ui_available_layout) + waitingMessage);\n        String url = URLCreator.createMetadataDirUrl(this);\n        new GetStringResponseTask() {\n            protected void onPostExecute(String response) {\n                if(response == null){\n                    Toast.makeText(getApplicationContext(),getResources().getString(R.string.available_layouts_response_null_exception),Toast.LENGTH_LONG).show();\n                    finish();\n                }\n                else{\n                    setContentView(R.layout.available_layouts);\n                    setAvailableLayouts(parseResponse(response));\n                    //when the request is done\n                    setTitle(getResources().getString(R.string.prefs_ui_available_layout));\n                }\n            }\n\n        }.execute(url);\n    }\n\n    /**\n     * It's used for asking there is internet before doing any other networking\n     */\n    public static boolean isNetworkAvailable(Context context) {\n        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\n        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();\n\n        return activeNetworkInfo != null && activeNetworkInfo.isConnected();\n    }\n\n\n    /**\n     * It receives a string list with the names of the layouts to be listed in the activity\n     */\n    public void setAvailableLayouts(List<String> options) {\n        LinearLayout rootLayout = (LinearLayout)findViewById(R.id.root_layout);\n        int AT_START = 0; //the position to insert the view at\n        ClickListener listener = new ClickListener();\n        Log.e(\"#\",options.toString());\n        for(String option : options) {\n            Button layoutButton = new Button(this);\n            layoutButton.setHeight(150);\n            layoutButton.setText(CustomLayoutsUtils.convertFileName(option));\n            layoutButton.setTextSize(16f);\n            layoutButton.setTextColor(Color.WHITE);\n            layoutButton.setSingleLine(false);\n            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n            layoutParams.setMargins(50, 10, 50, 10);\n            layoutButton.setLayoutParams(layoutParams);\n            layoutButton.setPadding(40, 30, 40, 30);\n            layoutButton.setOnClickListener(listener);\n            rootLayout.addView(layoutButton,AT_START);\n        }\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.github_repository_settings_menu, menu);\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    //this override method creates the github repository settings windows, and upload the values in the shared preferences file if those changed\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    @Override\n    public boolean onOptionsItemSelected(final MenuItem item) {\n        if(item.getItemId() == R.id.github_config){\n            LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);\n            //this is for prevent any error with the inflater\n            assert inflater != null;\n            //This is the pop up that's appears when the config button in the top right corner is pressed\n            @SuppressLint(\"InflateParams\") final View repositoryConfigWindow = inflater.inflate(R.layout.github_repository_settings, null);\n            //instancing the edit texts of the layoutName inflate\n            etxGithubUsername = (EditText) repositoryConfigWindow.findViewById(R.id.github_username);\n            etxRepositoryName = (EditText) repositoryConfigWindow.findViewById(R.id.repository_name);\n            etxBranchName = (EditText) repositoryConfigWindow.findViewById(R.id.branch_name);\n            //instancing the checkbox option and setting the click listener\n            defaultServerCheckBox = (CheckBox) repositoryConfigWindow.findViewById(R.id.default_server);\n            customServerCheckBox = (CheckBox) repositoryConfigWindow.findViewById(R.id.custom_server);\n\n            //internal private shared preferences to manage the incorrect server requested by the user\n            final SharedPreferences tmpSharedPref = getApplicationContext().getSharedPreferences(TMP_SHARED_PREFERENCES_FILE, Context.MODE_PRIVATE);\n            //flag to manage if the user put an invalid server\n            boolean isCallBack = tmpSharedPref.getBoolean(\"isCallBack\", false);\n\n            //if the user put an invalid GitHub server, the user can edit the values again until the server is valid\n            if(!isCallBack){\n                //first, we verify if the default checkbox is activated, if true we put the default options into the edit texts and make them not editable\n                if(sharedPrefs.getBoolean(\"defCheck\", true)){\n                    toggleRepositoryOptions(true);\n                }\n                //if the default checkbox isn't checked we put the shared preferences values into the edit texts\n                else{\n                    toggleRepositoryOptions(false);\n                }\n            }\n            else{\n                toggleRepositoryOptions(false);\n                etxGithubUsername.setText(tmpSharedPref.getString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, \"\"));\n                etxRepositoryName.setText(tmpSharedPref.getString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, \"\"));\n                etxBranchName.setText(tmpSharedPref.getString(OSMTracker.Preferences.KEY_BRANCH_NAME, \"\"));\n            }\n\n            checkBoxPressed = false;\n\n            defaultServerCheckBox.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    checkBoxPressed = true;\n                    toggleRepositoryOptions(true);\n                    isDefChecked = true;\n                    //we save the status into the sharedPreferences file\n                    editor.putBoolean(\"defCheck\", isDefChecked);\n                    editor.commit();\n                }\n            });\n            customServerCheckBox.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    checkBoxPressed = true;\n                    toggleRepositoryOptions(false);\n                    isDefChecked = false;\n                    //we save the status into the sharedPreferences file\n                    editor.putBoolean(\"defCheck\", isDefChecked);\n                    editor.commit();\n                }\n            });\n            //creating the alert dialog with the github_repository_setting view\n            new AlertDialog.Builder(this)\n                    .setTitle(getResources().getString(R.string.prefs_ui_github_repository_settings))\n                    .setView(repositoryConfigWindow)\n                    .setPositiveButton(getResources().getString(R.string.menu_save), new DialogInterface.OnClickListener() {\n                        @SuppressLint(\"StaticFieldLeak\")\n                        @Override\n                        public void onClick(DialogInterface dialog, int which) {\n                            final String[] repositoryCustomOptions = {etxGithubUsername.getText().toString(), etxRepositoryName.getText().toString(), etxBranchName.getText().toString()};\n                            //we verify if the entered options are correct\n                            new URLValidatorTask(){\n                                protected void onPostExecute(Boolean result){\n                                    //validating the github repository\n                                    if(result){\n                                        String message = getResources().getString(R.string.github_repository_settings_valid_server);\n                                        Log.i(\"TOAST\", message);\n                                        Toast.makeText(AvailableLayouts.this, message, Toast.LENGTH_SHORT).show();\n                                        //save the entered options into the shared preferences file\n                                        editor.putString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, repositoryCustomOptions[0]);\n                                        editor.putString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, repositoryCustomOptions[1]);\n                                        editor.putString(OSMTracker.Preferences.KEY_BRANCH_NAME, repositoryCustomOptions[2]);\n                                        editor.commit();\n                                        //to avoid the request of invalid server at the beginning\n                                        tmpSharedPref.edit().putBoolean(\"isCallBack\", false).commit();\n                                        retrieveAvailableLayouts();\n                                    }else{\n                                        String message = getResources().getString(R.string.github_repository_settings_invalid_server);\n                                        Log.e(\"TOAST\", message);\n                                        Toast.makeText(AvailableLayouts.this, message, Toast.LENGTH_SHORT).show();\n                                        tmpSharedPref.edit().putString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, repositoryCustomOptions[0]).commit();\n                                        tmpSharedPref.edit().putString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, repositoryCustomOptions[1]).commit();\n                                        tmpSharedPref.edit().putString(OSMTracker.Preferences.KEY_BRANCH_NAME, repositoryCustomOptions[2]).commit();\n                                        //to make a request at the beginning of pop-up\n                                        tmpSharedPref.edit().putBoolean(\"isCallBack\", true).commit();\n                                        onOptionsItemSelected(item);\n                                    }\n                                }\n                            }.execute(repositoryCustomOptions);\n                        }\n                    })\n                    .setNegativeButton(getResources().getString(R.string.menu_cancel), new DialogInterface.OnClickListener() {\n                        @Override\n                        public void onClick(DialogInterface dialog, int which) {\n                            tmpSharedPref.edit().putBoolean(\"isCallBack\", false).commit();\n                            if (checkBoxPressed){\n                                if(!isDefChecked){\n                                    toggleRepositoryOptions(true);\n                                    isDefChecked = true;\n                                    //save the status into the sharedPreferences file\n                                    editor.putBoolean(\"defCheck\", isDefChecked);\n                                    editor.commit();\n                                }\n                                else{\n                                    toggleRepositoryOptions(false);\n                                    isDefChecked = false;\n                                    //save the status into the sharedPreferences file\n                                    editor.putBoolean(\"defCheck\", isDefChecked);\n                                    editor.commit();\n                                }\n                            }\n                            dialog.cancel();\n                        }\n                    })\n                    .setCancelable(true)\n                    .create().show();\n        }\n        return super.onOptionsItemSelected(item);\n    }\n\n    /*\n    * This toggles (default/custom) the states of repository settings options in function of boolean param\n    * status true: tries to activated default options\n    * status false: tries to activated custom options\n    * */\n    private void toggleRepositoryOptions(boolean status){\n        customServerCheckBox.setChecked(!status);\n        customServerCheckBox.setEnabled(status);\n        defaultServerCheckBox.setChecked(status);\n        defaultServerCheckBox.setEnabled(!status);\n        etxGithubUsername.setEnabled(!status);\n        etxBranchName.setEnabled(!status);\n        etxRepositoryName.setEnabled(!status);\n\n        //setting the default options into text fields\n        if(status){\n            etxGithubUsername.setText(OSMTracker.Preferences.VAL_GITHUB_USERNAME);\n            etxRepositoryName.setText(OSMTracker.Preferences.VAL_REPOSITORY_NAME);\n            etxBranchName.setText(OSMTracker.Preferences.VAL_BRANCH_NAME);\n        }\n        //setting the custom options into text fields\n        else{\n            etxGithubUsername.setText(sharedPrefs.getString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, \"\"));\n            etxRepositoryName.setText(sharedPrefs.getString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, OSMTracker.Preferences.VAL_REPOSITORY_NAME));\n            etxBranchName.setText(sharedPrefs.getString(OSMTracker.Preferences.KEY_BRANCH_NAME, OSMTracker.Preferences.VAL_BRANCH_NAME));\n        }\n    }\n\n    /*\n    parse the string (representation of a json) to get only the values associated with\n    key \"name\", which are the file names of the folder requested before.\n    */\n    private List<String> parseResponse(String response) {\n        List<String> options = new ArrayList<String>();\n        try {\n            // create JSON Object\n            JSONArray jsonArray = new JSONArray(response);\n            for (int i= 0; i < jsonArray.length(); i++) {\n                // create json object for every element of the array\n                JSONObject object = jsonArray.getJSONObject(i);\n                // get the value associated with\n                options.add( object.getString(\"name\") );\n            }\n        } catch (JSONException e) {\n            // TODO Auto-generated catch block\n            e.printStackTrace();\n            return null;\n        }\n        return options;\n    }\n\n    /**\n     * @param xmlFile is the meta xmlFile put in a String\n     * @return a HashMap like (LanguageName,IsoCode) Example: English -> en.\n     */\n    private HashMap<String,String> getLanguagesFor(String xmlFile){\n        HashMap<String,String> languages = new HashMap<String,String>();\n        try{\n            XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();\n            parser.setInput (new ByteArrayInputStream(xmlFile.getBytes()),\"UTF-8\");\n            int eventType = parser.getEventType();\n            while(eventType != XmlPullParser.END_DOCUMENT){\n                //Move to a <option> tag\n                if(parser.getEventType() == XmlPullParser.START_TAG\n                        && parser.getName().equals(\"option\")){\n                    String name = parser.getAttributeValue(null,\"name\");\n                    String iso = parser.getAttributeValue(null,\"iso\");\n                    languages.put(name,iso);\n                }\n                eventType = parser.next();\n            }\n        }catch(Exception e){\n            e.printStackTrace();\n        }\n        return languages;\n    }\n\n    /* xmlFile is the XML meta file parsed to string\n    *  localeLanguage is the ISO code of the phone's locale language\n    * Searches a description in the locale language and returns it if it is in xmlFile\n    * or null if it is not there\n    */\n    private String getDescriptionFor(String xmlFile, String localeLanguage){\n        String description = null;\n        try{\n            XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();\n            parser.setInput (new ByteArrayInputStream(xmlFile.getBytes()),\"UTF-8\");\n            int eventType = parser.getEventType();\n\n            while(eventType != XmlPullParser.END_DOCUMENT\n                    && description == null ){\n                if(eventType == XmlPullParser.START_TAG\n                        && parser.getName().equals(\"option\")){\n                    //We are in an option start tag\n                    //Ask for the option's iso\n                    String iso = parser.getAttributeValue(\"\",\"iso\");\n                    if(iso != null && iso.equals(localeLanguage)){\n                        //If the start tag has \"iso\" attribute and matches the locale language\n                        //Move to the content to the tag\n                        parser.next();\n                        //Save its content\n                        description = parser.getText();\n                    }\n                }\n                eventType = parser.next();\n            }\n\n        }catch(Exception e){\n            Log.e(\"#\",\"Error parsing metadata files: \"+e.toString());\n        }\n        return description;\n    }\n\n    private void showDescriptionDialog(String layoutName, String description, String iso){\n        AlertDialog.Builder b = new AlertDialog.Builder(this);\n        b.setTitle(layoutName);\n        b.setNegativeButton(getResources().getString(R.string.menu_cancel),null);\n        b.setPositiveButton(getResources().getString(R.string.available_layouts_description_dialog_positive_confirmation), new DownloadListener(layoutName, iso, this));\n        b.setMessage(description);\n        b.create().show();\n    }\n\n    private void showLanguageSelectionDialog(final HashMap<String,String> languages, final String xmlFile, final String layoutName){\n        Set<String> keys = languages.keySet();\n        final CharSequence options[] = new CharSequence[keys.toArray().length];\n        for(int i=0 ; i<keys.toArray().length ; i++){\n            options[i] = (String)keys.toArray()[i];\n        }\n        Toast.makeText(this,getResources().getString(R.string.available_layouts_not_available_language),\n                        Toast.LENGTH_LONG).show();\n        AlertDialog.Builder b = new AlertDialog.Builder(this);\n        b.setTitle(getResources().getString(R.string.available_layouts_language_dialog_title));\n        b.setItems(options, new DialogInterface.OnClickListener() {\n            @Override\n            public void onClick(DialogInterface dialogInterface, int i) {\n                String desc = getDescriptionFor(xmlFile,languages.get(options[i]));\n                showDescriptionDialog(layoutName,desc,languages.get(options[i]));\n            }\n        });\n        b.create().show();\n    }\n\n    private class ClickListener implements View.OnClickListener{\n        @Override\n        public void onClick(View view) {\n            final String layoutName = \"\"+((TextView) view).getText();\n            String url = URLCreator.createMetadataFileURL(view.getContext(), layoutName);\n            final ProgressDialog dialog = new ProgressDialog(view.getContext());\n            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);\n            dialog.setMessage(getResources().getString(R.string.available_layouts_checking_language_dialog));\n            dialog.show();\n            new GetStringResponseTask(){\n                @Override\n                protected void onPostExecute(String response) {\n                    dialog.dismiss();\n                    String xmlFile = response;\n                    String localLang = Locale.getDefault().getLanguage();\n                    String description = getDescriptionFor(xmlFile, localLang);\n                    if (description != null) {\n                        showDescriptionDialog(layoutName,description,localLang);\n                    } else {//List all other languages\n                        HashMap<String, String> languages = getLanguagesFor(xmlFile);\n                        Log.e(\"#\",languages.toString());\n                        showLanguageSelectionDialog(languages, xmlFile, layoutName);\n                    }\n                }\n            }.execute(url);\n        }\n    }\n\n    private class DownloadListener implements AlertDialog.OnClickListener{\n        private String layoutName;\n        private String iso;\n        private Context context;\n\n        public DownloadListener(String layoutName, String iso, Context context) {\n            this.layoutName = layoutName;\n            this.iso = iso;\n            this.context = context;\n        }\n\n        @Override\n        public void onClick(DialogInterface dialogInterface, int i) {\n            //Code for downloading the layoutName, must get the layoutName name here\n            String info[] = {this.layoutName, this.iso};\n            final ProgressDialog dialog = new ProgressDialog(this.context);\n            dialog.setMessage(getResources().getString(R.string.available_layouts_downloading_dialog));\n            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);\n            dialog.show();\n            new DownloadCustomLayoutTask(this.context){\n                protected void onPostExecute(Boolean status){\n                    String message=\"\";\n                    if (status) {\n                        message = getResources().getString(R.string.available_layouts_successful_download);\n                        Log.i(\"TOAST\", message);\n                    }\n                    else {\n                        message = getResources().getString(R.string.available_layouts_unsuccessful_download);\n                        Log.e(\"TOAST\", message);\n                    }\n                    Toast.makeText(getApplicationContext(),message,Toast.LENGTH_LONG).show();\n                    dialog.dismiss();\n                }\n            }.execute(info);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/ButtonsPresets.java",
    "content": "package net.osmtracker.activity;\n\nimport android.Manifest;\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.ProgressDialog;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.content.pm.PackageManager;\nimport android.os.Build;\nimport android.os.Bundle;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.preference.PreferenceManager;\n\nimport android.util.Log;\nimport android.view.ContextMenu;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.CheckBox;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.layout.DownloadCustomLayoutTask;\nimport net.osmtracker.util.CustomLayoutsUtils;\nimport net.osmtracker.util.FileSystemUtils;\n\nimport java.io.File;\nimport java.io.FilenameFilter;\nimport java.util.Hashtable;\n\n/**\n * Created by emmanuel on 20/10/17.\n */\n\npublic class ButtonsPresets extends Activity {\n\n    @SuppressWarnings(\"unused\")\n    private static final String TAG = ButtonsPresets.class.getSimpleName();\n\n    final private int RC_WRITE_PERMISSION = 1;\n\n    private CheckBox checkboxHeld;\n    private CheckBoxChangedListener listener;\n    private CheckBox selected;\n    private CheckBox defaultCheckBox;\n    private SharedPreferences prefs;\n    //Container for the file names and the presentation names\n    private static Hashtable<String, String> layoutsFileNames;\n    private static String storageDir;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState){\n        super.onCreate(savedInstanceState);\n        initializeAttributes();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n\n        if ( writeExternalStoragePermissionGranted() ) {\n            refreshActivity();\n        } else {\n            // Should we show an explanation?\n            if (ActivityCompat.shouldShowRequestPermissionRationale(this,\n                    Manifest.permission.WRITE_EXTERNAL_STORAGE)) {\n\n                // Show an explanation to the user *asynchronously* -- don't block\n                // this thread waiting for the user's response! After the user\n                // sees the explanation, try again to request the permission.\n                // TODO: explain why we need permission.\n                Log.w(TAG, \"we should explain why we need read permission\");\n\n            } else {\n\n                // No explanation needed, we can request the permission.\n                ActivityCompat.requestPermissions(this,\n                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, RC_WRITE_PERMISSION);\n            }\n\n        }\n    }\n\n    public void refreshActivity(){\n        LinearLayout downloadedLayouts = (LinearLayout) findViewById(R.id.list_layouts);\n        //main layout for the default layout checkbox\n        LinearLayout defaultSection = (LinearLayout) findViewById(R.id.buttons_presets);\n        //restart the hashtable\n        layoutsFileNames = new Hashtable<String, String>();\n        listLayouts(downloadedLayouts);\n        checkCurrentLayout(downloadedLayouts, defaultSection);\n    }\n\n    private void initializeAttributes(){\n        setTitle(getResources().getString(R.string.prefs_ui_buttons_layout));\n        setContentView(R.layout.buttons_presets);\n        listener = new CheckBoxChangedListener();\n        prefs = PreferenceManager.getDefaultSharedPreferences(this);\n        layoutsFileNames = new Hashtable<String, String>();\n        storageDir = File.separator + OSMTracker.Preferences.VAL_STORAGE_DIR;\n    }\n\n    private void listLayouts(LinearLayout rootLayout){\n        File layoutsDir = new File(this.getExternalFilesDir(null), storageDir +\n                File.separator + DataHelper.LAYOUTS_SUBDIR + File.separator);\n        int AT_START = 0; //the position to insert the view at\n        int fontSize = 20;\n        if (layoutsDir.exists() && layoutsDir.canRead()) {\n            //Ask for the layout's filenames\n            String[] layoutFiles = layoutsDir.list(new FilenameFilter() {\n                @Override\n                public boolean accept(File dir, String filename) {\n                    return filename.endsWith(DataHelper.LAYOUT_FILE_EXTENSION);\n                }\n            });\n            //Remove all the layouts\n            while(rootLayout.getChildAt(0) instanceof CheckBox){\n                rootLayout.removeViewAt(0);\n            }\n            //Fill with the new ones\n            for(String name : layoutFiles) {\n                CheckBox newCheckBox = new CheckBox(this);\n                newCheckBox.setTextSize((float) fontSize);\n                String newName = CustomLayoutsUtils.convertFileName(name);\n                layoutsFileNames.put(newName, name);\n                newCheckBox.setText(newName);\n                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);\n                layoutParams.setMargins(60, 0, 0, 0);\n                newCheckBox.setLayoutParams(layoutParams);\n                newCheckBox.setPadding(10,20,10,20);\n                newCheckBox.setOnClickListener(listener);\n                registerForContextMenu(newCheckBox);\n                rootLayout.addView(newCheckBox, AT_START);\n            }\n        }\n\n        defaultCheckBox = (CheckBox) findViewById(R.id.def_layout);\n        defaultCheckBox.setOnClickListener(listener);\n        //this is the maping default(It depends on the language of the mobile)->default\n        layoutsFileNames.put(defaultCheckBox.getText().toString(),OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT);\n        //verify the size of the layoutsFileNames, if it is greater than 1, we put invisible the message (in the downloaded layouts section)\n        if(layoutsFileNames.size() > 1){\n            TextView empyText = (TextView) findViewById(R.id.btnpre_empty);\n            empyText.setVisibility(View.INVISIBLE);\n        }else{\n            TextView empyText = (TextView) findViewById(R.id.btnpre_empty);\n            empyText.setVisibility(View.VISIBLE);\n        }\n    }\n\n\n    /**\n     * @param downloadedLayouts: this linear layout contains the downloaded custom layouts representation\n     * @param defaultSection: it contains the default layout representation\n     * It asks for the layout being used and checks it in the list\n     */\n    private void checkCurrentLayout(LinearLayout downloadedLayouts, LinearLayout defaultSection){\n        String activeLayoutName = CustomLayoutsUtils.getCurrentLayoutName(getApplicationContext());\n        boolean defLayout = false;\n\n        //first, we check if the default layout is activated\n        View defCheck = defaultSection.getChildAt(1); //the default checkbox in the activity\n        if(defCheck instanceof CheckBox){\n            CheckBox defCheckCast = (CheckBox) defCheck;\n            String defCheckName = layoutsFileNames.get(defCheckCast.getText());\n            if (activeLayoutName.equals(defCheckName)) {\n                selected = defCheckCast;\n                defLayout = true;\n            }\n        }\n\n        boolean found = false;\n        //then, if the default layout isn't activated, we verify the other layouts\n        if (!defLayout) {\n            for (int i = 0; i < downloadedLayouts.getChildCount(); i++) {\n                View current = downloadedLayouts.getChildAt(i);\n                if (current instanceof CheckBox) {\n                    CheckBox currentCast = (CheckBox) current;\n                    String currentName = layoutsFileNames.get(currentCast.getText());\n                    if (activeLayoutName.equals(currentName)) {\n                        selected = currentCast;\n                        found = true;\n                        break;\n                    }\n                }\n            }\n            //if not found the active layout then set the default\n            if(!found){\n                selected = (CheckBox) defCheck;\n                String targetLayout = layoutsFileNames.get(selected.getText());\n                prefs.edit().putString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT,\n                        targetLayout).commit();\n                //reload the activity\n                refreshActivity();\n            }\n        }\n\n        selected.setChecked(true);\n    }\n\n    private void selectLayout(CheckBox pressed){\n        selected.setChecked(false);\n        pressed.setChecked(true);\n        selected=pressed;\n        String targetLayout = layoutsFileNames.get(pressed.getText());\n        prefs.edit().putString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT,\n                targetLayout).commit();\n    }\n\n    //Class that manages the changes on the selected layout\n    private class CheckBoxChangedListener implements View.OnClickListener {\n        @Override\n        public void onClick(View view) {\n            selectLayout( (CheckBox)view );\n        }\n    }\n\n    //methods for the context menu for each checkbox\n    @Override\n    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {\n        super.onCreateContextMenu(menu, v, menuInfo);\n        //inflate the menu for the view selected\n        getMenuInflater().inflate(R.menu.btnprecb_context_menu, menu);\n        checkboxHeld = (CheckBox) v;\n    }\n\n    @SuppressLint(\"StaticFieldLeak\")\n    @Override\n    public boolean onContextItemSelected(MenuItem item) {\n        File externalFilesDir = this.getExternalFilesDir(null);\n        switch (item.getItemId()){\n            //this case download again the layout held and install it\n            case R.id.cb_update_and_install:\n                String layoutName = checkboxHeld.getText().toString();\n                String iso = getIso(layoutsFileNames.get(checkboxHeld.getText()));\n                String info[]= {layoutName, iso};\n                final ProgressDialog dialog = new ProgressDialog(checkboxHeld.getContext());\n                dialog.setMessage(getResources().getString(R.string.buttons_presets_updating_layout));\n                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);\n                dialog.show();\n                new DownloadCustomLayoutTask(this){\n                    protected void onPostExecute(Boolean status){\n                        //if the download is correct we activate it\n                        if (status) {\n                            selectLayout(checkboxHeld);\n                            //re-load the activity\n                            refreshActivity();\n                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.buttons_presets_successful_update), Toast.LENGTH_LONG).show();\n                        }\n                        else {\n                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.buttons_presets_unsuccessful_update), Toast.LENGTH_LONG).show();\n                        }\n                        dialog.dismiss();\n                    }\n                }.execute(info);\n                checkboxHeld.setChecked(false);\n                break;\n            //this case open a new confirm dialog to delete a layout, also, if the layout have a icon directory, it is deleted\n            case R.id.cb_delete:\n                new AlertDialog.Builder(this).\n                setTitle(checkboxHeld.getText())\n                .setMessage(getResources().getString(R.string.buttons_presets_delete_message).replace(\"{0}\", checkboxHeld.getText()))\n                .setCancelable(true)\n                .setIcon(android.R.drawable.ic_dialog_alert)\n                .setPositiveButton(getResources().getString(R.string.buttons_presets_delete_positive_confirmation), new DialogInterface.OnClickListener() {\n                    @Override\n                    public void onClick(DialogInterface dialog, int which) {\n                        String fileName = layoutsFileNames.get(checkboxHeld.getText());\n                        String rootDir = storageDir + File.separator + DataHelper.LAYOUTS_SUBDIR + File.separator;\n                        File fileToDelete = new File(externalFilesDir, rootDir + fileName);\n                        String iconDirName = fileName.substring(0, fileName.length() - CustomLayoutsUtils.LAYOUT_EXTENSION_ISO.length())\n                                + DataHelper.LAYOUTS_ICONS_DIR_SUFFIX;\n                        File iconDirToDelete = new File(externalFilesDir, rootDir + iconDirName);\n\n                        boolean successfulDeletion = FileSystemUtils.delete(fileToDelete, false);\n\n                        if(iconDirToDelete.exists())\n                            successfulDeletion &= FileSystemUtils.delete(iconDirToDelete, true);\n\n                        int messageToShowId = (successfulDeletion) ? R.string.buttons_presets_successful_delete :\n                                R.string.buttons_presets_unsuccessful_delete;\n                        String message = getResources().getString(messageToShowId);\n\n                        Log.println(successfulDeletion ? Log.INFO : Log.ERROR, \"TOAST\", message);\n\n                        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();\n\n                        //reload the activity\n                        refreshActivity();\n                    }\n                })\n                .setNegativeButton(getResources().getString(R.string.menu_cancel), new DialogInterface.OnClickListener() {\n                    @Override\n                    public void onClick(DialogInterface dialog, int which) {\n                        dialog.cancel();\n                    }\n                }).create().show();\n                break;\n        }\n        return super.onContextItemSelected(item);\n    }\n\n    /**\n     * This method obtain the iso of any layout file name\n     * Assumes that layoutName looks like a filename => name_xx.ext\n     * Example: given \"foo_es.xml\" return only \"es\"\n     */\n    private String getIso(String layoutName){\n        String tmp = layoutName.substring(0, layoutName.length() - DataHelper.LAYOUT_FILE_EXTENSION.length());\n        String iso = \"\";\n        for (int i=tmp.length() - AvailableLayouts.ISO_CHARACTER_LENGTH; i<tmp.length(); i++){\n                iso += tmp.charAt(i);\n        }\n        return iso;\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.launch_available_layouts_menu, menu);\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        if(item.getItemId() == R.id.launch_available){\n            startActivity(new Intent(this,AvailableLayouts.class));\n        }\n        return super.onOptionsItemSelected(item);\n    }\n\n\n    public void onRequestPermissionsResult(int requestCode,\n                                           String permissions[], int[] grantResults) {\n        switch (requestCode) {\n            case RC_WRITE_PERMISSION: {\n                // If request is cancelled, the result arrays are empty.\n                if (grantResults.length > 0\n                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n\n                    refreshActivity();\n\n                } else {\n\n                    // permission denied, boo! Disable the\n                    // functionality that depends on this permission.\n                    //TODO: add an informative message.\n                    Log.w(TAG, \"we should explain why we need read permission\");\n                }\n            }\n        }\n    }\n\n    //TODO: improve permissions management.\n    private boolean writeExternalStoragePermissionGranted(){\n        // On versions lower than Android 11, write external storage permission is required.\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {\n            Log.d(TAG, \"CHECKING - Write\");\n            return ContextCompat.checkSelfPermission(this,\n                    Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;\n        } else {\n            Log.d(TAG, \"Write External Storage is granted\");\n            return true;\n        }\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/DisplayTrack.java",
    "content": "package net.osmtracker.activity;\r\n\r\nimport net.osmtracker.OSMTracker;\r\nimport net.osmtracker.util.ThemeValidator;\r\nimport net.osmtracker.view.DisplayTrackView;\r\nimport net.osmtracker.db.TrackContentProvider;\r\n\r\nimport android.app.Activity;\r\nimport android.app.AlertDialog;\r\nimport android.content.DialogInterface;\r\nimport android.content.Intent;\r\nimport android.content.SharedPreferences;\r\nimport android.os.Bundle;\r\nimport androidx.core.app.ActivityCompat;\r\nimport androidx.core.content.ContextCompat;\r\nimport androidx.preference.PreferenceManager;\r\n\r\nimport android.view.ViewGroup.LayoutParams;\r\n\r\n/**\r\n * Displays current track in 2D view.\r\n *<P>\r\n * Used only if {@link OSMTracker.Preferences#KEY_UI_DISPLAYTRACK_OSM} is not true.\r\n * Otherwise {@link DisplayTrackMap} is used.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class DisplayTrack extends Activity {\r\n\r\n\t@SuppressWarnings(\"unused\")\r\n\tprivate static final String TAG = DisplayTrack.class.getSimpleName();\r\n\r\n\t@Override\r\n\tprotected void onCreate(Bundle savedInstanceState) {\r\n\t\t// Set application theme according to user settings\r\n\t\tsetTheme(getResources().getIdentifier(ThemeValidator.getValidTheme(\r\n\t\t\t\tPreferenceManager.getDefaultSharedPreferences(this), getResources()), null, null));\r\n\t\t\r\n\t\tsuper.onCreate(savedInstanceState);\r\n\t\t\r\n\t\t// Create special view and displays it\r\n\t\tfinal long trackId = getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\r\n\t\tDisplayTrackView dtv = new DisplayTrackView(this, trackId);\r\n\t\tdtv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));\r\n\t\tsetTitle(getTitle() + \": #\" + getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID));\r\n\t\tsetContentView(dtv);\t\t\r\n\r\n\t\t// If this is the first time showing this activity,\r\n\t\t// wait for everything to initialize and then ask\r\n\t\t// the user if they'd rather see the OSM background.\r\n\t\tSharedPreferences dtPrefs = PreferenceManager.getDefaultSharedPreferences(this);\r\n\t\tif (! dtPrefs.getBoolean(OSMTracker.Preferences.KEY_UI_ASKED_DISPLAYTRACK_OSM, false)) {\r\n\t\t\tdtPrefs.edit().putBoolean(OSMTracker.Preferences.KEY_UI_ASKED_DISPLAYTRACK_OSM, true).commit();\r\n\t\t\tdtv.post(new Runnable() {\r\n\t\t\t\t@Override\r\n\t\t\t\tpublic void run() {\r\n\t\t\t\t\tnew AlertDialog.Builder(DisplayTrack.this)\r\n\t\t\t\t\t\t.setTitle(net.osmtracker.R.string.prefs_displaytrack_osm)\r\n\t\t\t\t\t\t.setMessage(net.osmtracker.R.string.prefs_displaytrack_osm_summary_ask)\r\n\t\t\t\t\t\t.setNegativeButton(android.R.string.no, null)\r\n\t\t\t\t\t\t.setPositiveButton(net.osmtracker.R.string.displaytrack_map, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\tPreferenceManager.getDefaultSharedPreferences(DisplayTrack.this).edit()\r\n\t\t\t\t\t\t\t\t\t.putBoolean(OSMTracker.Preferences.KEY_UI_DISPLAYTRACK_OSM, true).commit();\r\n\t\t\t\t\t\t\t\tIntent i = new Intent(DisplayTrack.this, DisplayTrackMap.class);\r\n\t\t\t\t\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\r\n\t\t\t\t\t\t\t\tstartActivity(i);\r\n\t\t\t\t\t\t\t\tfinish();  // DisplayTrackMap replaces our activity\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.show();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\t\r\n\t\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/DisplayTrackMap.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.content.ContentUris;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.database.ContentObserver;\nimport android.database.Cursor;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.util.DisplayMetrics;\nimport android.util.Log;\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.MenuItem;\nimport android.view.MotionEvent;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.overlay.WayPointsOverlay;\n\nimport org.osmdroid.api.IMapController;\nimport org.osmdroid.config.Configuration;\nimport org.osmdroid.tileprovider.tilesource.TileSourceFactory;\nimport org.osmdroid.tileprovider.tilesource.ITileSource;\nimport org.osmdroid.tileprovider.tilesource.XYTileSource;\n\nimport org.osmdroid.util.GeoPoint;\nimport org.osmdroid.views.CustomZoomButtonsController;\nimport org.osmdroid.views.MapView;\nimport org.osmdroid.views.overlay.Polyline;\nimport org.osmdroid.views.overlay.ScaleBarOverlay;\nimport org.osmdroid.views.overlay.mylocation.SimpleLocationOverlay;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * Display current track over an OSM map.\n * Based on <a href=\"http://osmdroid.googlecode.com/\">osmdroid code</a>\n *<P>\n * Used only if {@link OSMTracker.Preferences#KEY_UI_DISPLAYTRACK_OSM} is set.\n * Otherwise {@link DisplayTrack} is used (track only, no OSM background tiles).\n *\n * @author Viesturs Zarins\n *\n */\npublic class DisplayTrackMap extends Activity {\n\n\tprivate static final String TAG = DisplayTrackMap.class.getSimpleName();\n\n\t/**\n\t * Key for keeping the zoom level in the saved instance bundle\n\t */\n\tprivate static final String CURRENT_ZOOM = \"currentZoom\";\n\n\t/**\n\t * Key for keeping scrolled left position of OSM view activity re-creation\n\t */\n\tprivate static final String CURRENT_SCROLL_X = \"currentScrollX\";\n\n\t/**\n\t * Key for keeping scrolled top position of OSM view across activity re-creation\n\t */\n\tprivate static final String CURRENT_SCROLL_Y = \"currentScrollY\";\n\n\t/**\n\t * Key for keeping whether the map display should be centered to the gps location\n\t */\n\tprivate static final String CURRENT_CENTER_TO_GPS_POS = \"currentCenterToGpsPos\";\n\n\t/**\n\t * Key for keeping whether the map display was zoomed and centered\n\t * on an old track id loaded from the database (boolean {@link #zoomedToTrackAlready})\n\t */\n\tprivate static final String CURRENT_ZOOMED_TO_TRACK = \"currentZoomedToTrack\";\n\n\t/**\n\t * Key for keeping the last zoom level across app. restart\n\t */\n\tprivate static final String LAST_ZOOM = \"lastZoomLevel\";\n\n\t/**\n\t * Default zoom level\n\t */\n\tprivate static final int DEFAULT_ZOOM = 16;\n\n\t/**\n\t * Default zoom level for center with zoom\n\t */\n\tprivate static final double CENTER_DEFAULT_ZOOM_LEVEL = 18;\n\n\t/**\n\t * Animation duration in milliseconds for center with zoom\n\t */\n\tprivate static final long ANIMATION_DURATION_MS = 1000;\n\n\t/**\n\t * Main OSM view\n\t */\n\tprivate MapView osmView;\n\n\t/**\n\t * Controller to interact with view\n\t */\n\tprivate IMapController osmViewController;\n\n\t/**\n\t * OSM view overlay that displays current location\n\t */\n\tprivate SimpleLocationOverlay myLocationOverlay;\n\n\t/**\n\t * OSM view overlay that displays current path\n\t */\n\tprivate Polyline polyline;\n\n\t/**\n\t * OSM view overlay that displays waypoints\n\t */\n\tprivate WayPointsOverlay wayPointsOverlay;\n\n\t/**\n\t * OSM view overlay for the map scale bar\n\t */\n\tprivate ScaleBarOverlay scaleBarOverlay;\n\n\t/**\n\t * Current track id\n\t */\n\tprivate long currentTrackId;\n\n\t/**\n\t * whether the map display should be centered to the gps location\n\t */\n\tprivate boolean centerToGpsPos = true;\n\n\t/**\n\t * whether the map display was already zoomed and centered\n\t * on an old track loaded from the database (should be done only once).\n\t */\n\tprivate boolean zoomedToTrackAlready = false;\n\n\t/**\n\t * the last position we know\n\t */\n\tprivate GeoPoint currentPosition;\n\n\t/**\n\t * The row id of the last location read from the database that has been added to the\n\t * list of layout points. Using this we to reduce DB load by only reading new points.\n\t * Initially null, to indicate that no data has yet been read.\n\t */\n\tprivate Integer lastTrackPointIdProcessed = null;\n\n\t/**\n\t * Observes changes on track points\n\t */\n\tprivate ContentObserver trackpointContentObserver;\n\n\t/**\n\t * Keeps the SharedPreferences\n\t */\n\tprivate SharedPreferences prefs = null;\n\n\t@Override\n\tpublic void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\n\t\t// loading the preferences\n\t\tprefs = PreferenceManager.getDefaultSharedPreferences(this);\n\n\t\tsetContentView(R.layout.displaytrackmap);\n\n\t\tcurrentTrackId = getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\tsetTitle(getTitle() + \": #\" + currentTrackId);\n\n\t\t// Initialize OSM view\n\t\tConfiguration.getInstance().load(this, prefs);\n\n\t\tosmView = findViewById(R.id.displaytrackmap_osmView);\n\t\t// pinch to zoom\n\t\tosmView.setMultiTouchControls(true);\n\t\tosmView.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.NEVER);\n\t\t// we'll use osmView to define if the screen is always on or not\n\t\tosmView.setKeepScreenOn(prefs.getBoolean(OSMTracker.Preferences.KEY_UI_DISPLAY_KEEP_ON, OSMTracker.Preferences.VAL_UI_DISPLAY_KEEP_ON));\n\t\tosmViewController = osmView.getController();\n\n\t\t// Check if there is a saved zoom level\n\t\tif (savedInstanceState != null) {\n\t\t\tosmViewController.setZoom(savedInstanceState.getInt(CURRENT_ZOOM, DEFAULT_ZOOM));\n\t\t\tosmView.scrollTo(savedInstanceState.getInt(CURRENT_SCROLL_X, 0),\n\t\t\t\t\tsavedInstanceState.getInt(CURRENT_SCROLL_Y, 0));\n\t\t\tcenterToGpsPos = savedInstanceState.getBoolean(CURRENT_CENTER_TO_GPS_POS, centerToGpsPos);\n\t\t\tzoomedToTrackAlready = savedInstanceState.getBoolean(CURRENT_ZOOMED_TO_TRACK, zoomedToTrackAlready);\n\t\t} else {\n\t\t\t// Try to get last zoom Level from Shared Preferences\n\t\t\tSharedPreferences settings = getPreferences(MODE_PRIVATE);\n\t\t\tosmViewController.setZoom(settings.getInt(LAST_ZOOM, DEFAULT_ZOOM));\n\t\t}\n\n\t\tselectTileSource();\n\n\t\tsetTileDpiScaling();\n\n\t\tcreateOverlays();\n\n\t\t// Create content observer for track points\n\t\ttrackpointContentObserver = new ContentObserver(new Handler()) {\n\t\t\t@Override\n\t\t\tpublic void onChange(boolean selfChange) {\n\t\t\t\tpathChanged();\n\t\t\t}\n\t\t};\n\n\t\t// Register listeners for zoom buttons\n\t\tfindViewById(R.id.displaytrackmap_imgZoomIn).setOnClickListener(v -> osmViewController.zoomIn());\n\t\tfindViewById(R.id.displaytrackmap_imgZoomOut).setOnClickListener(v -> osmViewController.zoomOut());\n\t\tfindViewById(R.id.displaytrackmap_imgZoomCenter).setOnClickListener(view -> {\n\t\t\tcenterToGpsPos = true;\n\t\t\tif (currentPosition != null) {\n\t\t\t\tosmViewController.animateTo(currentPosition,CENTER_DEFAULT_ZOOM_LEVEL, ANIMATION_DURATION_MS);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sets the map tile provider according to the user's demands in the settings.\n\t */\n\tpublic void selectTileSource() {\n\t\tString mapTile = prefs.getString(OSMTracker.Preferences.KEY_UI_MAP_TILE, OSMTracker.Preferences.VAL_UI_MAP_TILE_MAPNIK);\n\t\tLog.e(\"TileMapName active\", mapTile);\n\t\tosmView.setTileSource(selectMapTile(mapTile));\n\t}\n\n\t/**\n\t * Make text on map better readable on high DPI displays\n\t */\n\tpublic void setTileDpiScaling() {\n\t\tosmView.setTilesScaledToDpi(true);\n\t}\n\n\n\tstatic {\n\t\tTileSourceFactory.addTileSource(new XYTileSource(\"CyclOSM\",\n\t\t\t\t\t\t\t\t 0, 18, 256, \".png\", \n\t\t\t\t\t\t\t\t new String[] {\n\t\t\t\t\t\t\t\t\t \"https://a.tile-cyclosm.openstreetmap.fr/cyclosm/\",\n\t\t\t\t\t\t\t\t\t \"https://b.tile-cyclosm.openstreetmap.fr/cyclosm/\",\n\t\t\t\t\t\t\t\t\t \"https://c.tile-cyclosm.openstreetmap.fr/cyclosm/\"},\n\t\t\t\t\t\t\t\t \"© OpenStreetMap contributors\"));\n\t}\n\n\t/**\n\t * Returns a ITileSource for the map according to the selected mapTile\n\t * String. The default is mapnik.\n\t *\n\t * @param mapTile String that is the name of the tile provider\n\t * @return ITileSource with the selected Tile-Source\n\t */\n\tprivate ITileSource selectMapTile(String mapTile) {\n\t\ttry {\n\t\t\treturn TileSourceFactory.getTileSource(mapTile);\n\t\t} catch (Exception e) {\n\t\t\tLog.e(TAG, \"Invalid tile source '\"+mapTile+\"'\", e);\n\t\t\tLog.e(TAG, \"Default tile source selected: '\" + TileSourceFactory.DEFAULT_TILE_SOURCE.name() +\"'\");\n\t\t\treturn TileSourceFactory.DEFAULT_TILE_SOURCE;\n\t\t}\n\t}\n\n\n\t@Override\n\tprotected void onSaveInstanceState(Bundle outState) {\n\t\toutState.putInt(CURRENT_ZOOM, osmView.getZoomLevel());\n\t\toutState.putInt(CURRENT_SCROLL_X, osmView.getScrollX());\n\t\toutState.putInt(CURRENT_SCROLL_Y, osmView.getScrollY());\n\t\toutState.putBoolean(CURRENT_CENTER_TO_GPS_POS, centerToGpsPos);\n\t\toutState.putBoolean(CURRENT_ZOOMED_TO_TRACK, zoomedToTrackAlready);\n\t\tsuper.onSaveInstanceState(outState);\n\t}\n\n\t@Override\n\tprotected void onResume() {\n\t\tsuper.onResume();\n\t\tresumeActivity();\n\t}\n\n\tprivate void resumeActivity() {\n\t\t// setKeepScreenOn depending on user's preferences\n\t\tosmView.setKeepScreenOn(prefs.getBoolean(OSMTracker.Preferences.KEY_UI_DISPLAY_KEEP_ON, OSMTracker.Preferences.VAL_UI_DISPLAY_KEEP_ON));\n\n\t\t// Register content observer for any track point changes\n\t\tgetContentResolver().registerContentObserver(\n\t\t\t\tTrackContentProvider.trackPointsUri(currentTrackId),\n\t\t\t\ttrue, trackpointContentObserver);\n\n\t\t// Forget the last waypoint read from the DB\n\t\t// This ensures that all waypoints for the track will be reloaded\n\t\t// from the database to populate the path layout\n\t\tlastTrackPointIdProcessed = null;\n\n\t\t// Reload path\n\t\tpathChanged();\n\n\t\tselectTileSource();\n\n\t\tsetTileDpiScaling();\n\n\t\t// Refresh way points\n\t\twayPointsOverlay.refresh();\n\t}\n\n\t@Override\n\tprotected void onPause() {\n\t\t// Unregister content observer\n\t\tgetContentResolver().unregisterContentObserver(trackpointContentObserver);\n\n\t\t// Clear the points list.\n\t\tpolyline.setPoints(new ArrayList<>());\n\n\t\tsuper.onPause();\n\t}\n\n\t@Override\n\tprotected void onStop() {\n\t\tsuper.onStop();\n\n\t\t// Save zoom level in shared preferences\n\t\tSharedPreferences settings = getPreferences(MODE_PRIVATE);\n\t\tSharedPreferences.Editor editor = settings.edit();\n\t\teditor.putInt(LAST_ZOOM, osmView.getZoomLevel());\n\t\teditor.apply();\n\t}\n\n\t@Override\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\n\t\tMenuInflater inflater = getMenuInflater();\n\t\tinflater.inflate(R.menu.displaytrackmap_menu, menu);\n\t\treturn super.onCreateOptionsMenu(menu);\n\t}\n\n\n\t@Override\n\tpublic boolean onPrepareOptionsMenu(Menu menu) {\n\t\tmenu.findItem(R.id.displaytrackmap_menu_center_to_gps).setEnabled((!centerToGpsPos && currentPosition != null));\n\t\treturn super.onPrepareOptionsMenu(menu);\n\t}\n\n\t@Override\n\tpublic boolean onOptionsItemSelected(MenuItem item) {\n\t\tswitch (item.getItemId()) {\n\t\t\tcase R.id.displaytrackmap_menu_center_to_gps:\n\t\t\t\tcenterToGpsPos = true;\n\t\t\t\tif (currentPosition != null) {\n\t\t\t\t\tosmViewController.animateTo(currentPosition);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase R.id.displaytrackmap_menu_settings:\n\t\t\t\t// Start settings activity\n\t\t\t\tstartActivity(new Intent(this, Preferences.class));\n\t\t\t\tbreak;\n\t\t}\n\t\treturn super.onOptionsItemSelected(item);\n\t}\n\n\t@Override\n\tpublic boolean onTouchEvent(MotionEvent event) {\n\t\tswitch (event.getAction()) {\n\t\t\tcase MotionEvent.ACTION_MOVE:\n\t\t\t\tif (currentPosition != null)\n\t\t\t\t\tcenterToGpsPos = false;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn super.onTouchEvent(event);\n\t}\n\n\t/**\n\t * Creates overlays over the OSM view\n\t */\n\tprivate void createOverlays() {\n\t\tDisplayMetrics metrics = new DisplayMetrics();\n\t\tthis.getWindowManager().getDefaultDisplay().getMetrics(metrics);\n\n\t\t// set with to hopefully DPI independent 0.5mm\n\t\tpolyline = new Polyline();\n\t\tPaint paint = polyline.getOutlinePaint();\n\t\tpaint.setColor(Color.BLUE);\n\t\tpaint.setStrokeWidth((float) (metrics.densityDpi / 25.4 / 2));\n\t\tosmView.getOverlayManager().add(polyline);\n\n\t\tmyLocationOverlay = new SimpleLocationOverlay(this);\n\t\tosmView.getOverlays().add(myLocationOverlay);\n\n\t\twayPointsOverlay = new WayPointsOverlay(this, currentTrackId);\n\t\tosmView.getOverlays().add(wayPointsOverlay);\n\n\t\tscaleBarOverlay = new ScaleBarOverlay(osmView);\n\t\tosmView.getOverlays().add(scaleBarOverlay);\n\t}\n\n\t/**\n\t * On track path changed, update the two overlays and repaint view.\n\t * If {@link #lastTrackPointIdProcessed} is null, this is the initial call\n\t * from {@link #onResume()}, and not the periodic call from\n\t * {@link ContentObserver#onChange(boolean) trackpointContentObserver.onChange(boolean)}\n\t * while recording.\n\t */\n\tprivate void pathChanged() {\n\t\tif (isFinishing()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// See if the track is active.\n\t\t// If not, we'll calculate initial track bounds\n\t\t// while retrieving from the database.\n\t\t// (the first point will overwrite these lat/lon bounds.)\n\t\tboolean doInitialBoundsCalc = false;\n\t\tdouble minLat = 91.0, minLon = 181.0;\n\t\tdouble maxLat = -91.0, maxLon = -181.0;\n\t\tif ((!zoomedToTrackAlready) && (lastTrackPointIdProcessed == null)) {\n\t\t\tfinal String[] proj_active = {TrackContentProvider.Schema.COL_ACTIVE};\n\t\t\tCursor cursor = getContentResolver().query(\n\t\t\t\t\tContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, currentTrackId),\n\t\t\t\t\tproj_active, null, null, null);\n\t\t\tif (cursor != null && cursor.moveToFirst()) {\n\t\t\t\tint colIndex = cursor.getColumnIndex(TrackContentProvider.Schema.COL_ACTIVE);\n\t\t\t\tif (colIndex != -1) {\n\t\t\t\t\tdoInitialBoundsCalc =\n\t\t\t\t\t\t\t(cursor.getInt(colIndex) == TrackContentProvider.Schema.VAL_TRACK_INACTIVE);\n\t\t\t\t}\n\t\t\t\tcursor.close();\n\t\t\t}\n\t\t}\n\n\t\t// Projection: The columns to retrieve. Here, we want the latitude, \n\t\t// longitude and primary key only\n\t\tString[] projection = {TrackContentProvider.Schema.COL_LATITUDE, TrackContentProvider.Schema.COL_LONGITUDE, TrackContentProvider.Schema.COL_ID};\n\t\t// Selection: The where clause to use\n\t\tString selection = null;\n\t\t// SelectionArgs: The parameter replacements to use for the '?' in the selection\t\t\n\t\tString[] selectionArgs = null;\n\n\t\t// Only request the track points that we have not seen yet\n\t\t// If we have processed any track points in this session then\n\t\t// lastTrackPointIdProcessed will not be null. We only want \n\t\t// to see data from rows with a primary key greater than lastTrackPointIdProcessed  \n\t\tif (lastTrackPointIdProcessed != null) {\n\t\t\tselection = TrackContentProvider.Schema.COL_ID + \" > ?\";\n\t\t\tList<String> selectionArgsList = new ArrayList<>();\n\t\t\tselectionArgsList.add(lastTrackPointIdProcessed.toString());\n\t\t\tselectionArgs = selectionArgsList.toArray(new String[1]);\n\t\t}\n\n\t\t// Retrieve any points we have not yet seen\n\t\tCursor c = getContentResolver().query(\n\t\t\t\tTrackContentProvider.trackPointsUri(currentTrackId),\n\t\t\t\tprojection, selection, selectionArgs, TrackContentProvider.Schema.COL_ID + \" asc\");\n\n\t\tif (c != null) {\n\t\t\tint numberOfPointsRetrieved = c.getCount();\n\t\t\tif (numberOfPointsRetrieved > 0) {\n\t\t\t\tc.moveToFirst();\n\t\t\t\tdouble lastLat = 0;\n\t\t\t\tdouble lastLon = 0;\n\t\t\t\tint primaryKeyColumnIndex = c.getColumnIndex(TrackContentProvider.Schema.COL_ID);\n\t\t\t\tint latitudeColumnIndex = c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE);\n\t\t\t\tint longitudeColumnIndex = c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE);\n\n\t\t\t\t// Add each new point to the track\n\t\t\t\twhile (!c.isAfterLast()) {\n\t\t\t\t\tlastLat = c.getDouble(latitudeColumnIndex);\n\t\t\t\t\tlastLon = c.getDouble(longitudeColumnIndex);\n\t\t\t\t\tlastTrackPointIdProcessed = c.getInt(primaryKeyColumnIndex);\n\t\t\t\t\tpolyline.addPoint(new GeoPoint(lastLat, lastLon));\n\t\t\t\t\tif (doInitialBoundsCalc) {\n\t\t\t\t\t\tif (lastLat < minLat) minLat = lastLat;\n\t\t\t\t\t\tif (lastLon < minLon) minLon = lastLon;\n\t\t\t\t\t\tif (lastLat > maxLat) maxLat = lastLat;\n\t\t\t\t\t\tif (lastLon > maxLon) maxLon = lastLon;\n\t\t\t\t\t}\n\t\t\t\t\tc.moveToNext();\n\t\t\t\t}\n\n\t\t\t\t// Last point is current position.\n\t\t\t\tcurrentPosition = new GeoPoint(lastLat, lastLon);\n\t\t\t\tmyLocationOverlay.setLocation(currentPosition);\n\t\t\t\tif (centerToGpsPos) {\n\t\t\t\t\tosmViewController.setCenter(currentPosition);\n\t\t\t\t}\n\n\t\t\t\t// Repaint\n\t\t\t\tosmView.invalidate();\n\t\t\t\tif (doInitialBoundsCalc && (numberOfPointsRetrieved > 1)) {\n\t\t\t\t\t// osmdroid-3.0.8 hangs if we directly call zoomToSpan during initial onResume,\n\t\t\t\t\t// so post a Runnable instead for after it's done initializing.\n\t\t\t\t\tfinal double north = maxLat, east = maxLon, south = minLat, west = minLon;\n\t\t\t\t\tosmView.post(() -> {\n\t\t\t\t\t\tosmViewController.zoomToSpan((int) (north - south), (int) (east - west));\n\t\t\t\t\t\tosmViewController.setCenter(new GeoPoint((north + south) / 2, (east + west) / 2));\n\t\t\t\t\t\tzoomedToTrackAlready = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.close();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/GitHubConfig.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.Toast;\n\nimport net.osmtracker.GitHubUser;\nimport net.osmtracker.R;\nimport static net.osmtracker.github.GitHubConstants.GITHUB_TOKENS_URL;\n\npublic class GitHubConfig extends Activity {\n    EditText editTextUserName, editTextUserToken;\n    private GitHubUser gitHubUser;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.github_configuration_token);\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n\n        editTextUserName = findViewById(R.id.git_configuration_user_name);\n        editTextUserToken = findViewById(R.id.git_configuration_user_token);\n        gitHubUser = new GitHubUser(this);\n\n        final Button btnGitHub = (Button) findViewById(R.id.git_link_create_token_btn_ok);\n        btnGitHub.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                Intent intent = new Intent(Intent.ACTION_VIEW);\n                intent.setData(Uri.parse(GITHUB_TOKENS_URL));\n                startActivity(intent);\n            }\n        });\n\n        final Button btnSave = (Button) findViewById(R.id.git_save_credentials_btn_ok);\n        btnSave.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                String username = editTextUserName.getText().toString().trim();\n                String ghToken = editTextUserToken.getText().toString().trim();\n\n                // Empty is enabled to allow saving without credentials to erase the existing ones\n                /*\n                if (username.isEmpty()) {\n                    editTextUserName.setError(\"Username required\");\n                    return;\n                }\n                */\n                if (ghToken.length() != 40 && !ghToken.isEmpty()) {\n                    editTextUserToken.setError(getString(R.string.error_gh_token_lenght));\n                    return;\n                }\n\n                gitHubUser.saveCredentials(username, ghToken);\n                Toast.makeText(GitHubConfig.this, R.string.successfully_saved, Toast.LENGTH_SHORT).show();\n\n                Intent intent = new Intent(GitHubConfig.this, TrackManager.class);\n                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);\n                intent.setPackage(this.getClass().getPackage().getName());\n                startActivity(intent);\n                finish();\n            }\n        });\n\n        final Button btnCancel = (Button) findViewById(R.id.git_back_credentials_btn_cancel);\n        btnCancel.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n\n                finish();\n            }\n        });\n\n        // Do not show soft keyboard by default\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/GitHubNewFork.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.Toast;\n\nimport androidx.annotation.Nullable;\n\nimport com.android.volley.AuthFailureError;\nimport com.android.volley.Request;\nimport com.android.volley.Response;\nimport com.android.volley.VolleyError;\nimport com.android.volley.toolbox.JsonObjectRequest;\nimport com.android.volley.toolbox.Volley;\n\nimport net.osmtracker.GitHubUser;\nimport net.osmtracker.R;\nimport static net.osmtracker.github.GitHubConstants.getRepoForksUrl;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class GitHubNewFork extends Activity {\n    EditText editTextRootUsername, editTextRootRepo;\n    private GitHubUser gitHubUser;\n    private String newForkFullName;\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.git_create_fork);\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n\n        gitHubUser = new GitHubUser(this);\n\n        editTextRootUsername = findViewById(R.id.git_username_to_fork_editText_user);\n        editTextRootRepo = findViewById(R.id.git_repo_to_fork_editText_name);\n\n        editTextRootUsername.setHint(R.string.upload_to_github_forked_repo_owner);\n        editTextRootRepo.setHint(R.string.upload_to_github_forked_repo_name);\n\n        final Button btnCreate = (Button) findViewById(R.id.git_create_newfork_btn_ok);\n        btnCreate.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                String username = editTextRootUsername.getText().toString().trim();\n                String repo = editTextRootRepo.getText().toString().trim();\n                if (username.isEmpty()) {\n                    editTextRootUsername.setError(getString(R.string.error_field_required));\n                    editTextRootUsername.requestFocus();\n                    return;\n                }\n                if (repo.isEmpty()) {\n                    editTextRootRepo.setError(getString(R.string.error_field_required));\n                    editTextRootRepo.requestFocus();\n                    return;\n                }\n\n                createNewFork(username, repo);\n                //Toast.makeText(GitHubNewFork.this, R.string.successfully_created, Toast.LENGTH_SHORT).show();\n                //finish();\n            }\n        });\n\n\n        final Button btnCancel = (Button) findViewById(R.id.git_back_newfork_btn_cancel);\n        btnCancel.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                finish();\n            }\n        });\n\n        // Do not show soft keyboard by default\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n    }\n\n    private void createNewFork(String username, String repo) {\n        String fullURL = getRepoForksUrl(username, repo);\n\n        JsonObjectRequest  postResquest= new JsonObjectRequest(\n                Request.Method.POST,\n                fullURL,\n                null,\n                new Response.Listener<JSONObject>() {\n                    @Override\n                    public void onResponse(JSONObject response) {\n                        try {\n                            setNewForkFullName(response.getString(\"full_name\"));\n                            Toast.makeText(GitHubNewFork.this, R.string.successfully_created, Toast.LENGTH_SHORT).show();\n                            finish();\n                        } catch (JSONException e) {\n                            Toast.makeText(GitHubNewFork.this, R.string.error_creating, Toast.LENGTH_SHORT).show();\n                            e.printStackTrace();\n                        }\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n                Toast.makeText(GitHubNewFork.this, R.string.error_creating, Toast.LENGTH_SHORT).show();\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError\n            {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                return headers;\n            }\n        };\n        Volley.newRequestQueue(this).add(postResquest);\n    }\n\n    public void setNewForkFullName(String newForkFullName) {\n        this.newForkFullName = newForkFullName;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/GitHubNewRepo.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.app.ProgressDialog;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.Switch;\nimport android.widget.Toast;\n\nimport com.android.volley.AuthFailureError;\nimport com.android.volley.Request;\nimport com.android.volley.Response;\nimport com.android.volley.VolleyError;\nimport com.android.volley.VolleyLog;\nimport com.android.volley.toolbox.JsonObjectRequest;\nimport com.android.volley.toolbox.Volley;\n\nimport net.osmtracker.GitHubUser;\nimport net.osmtracker.R;\nimport static net.osmtracker.github.GitHubConstants.GITHUB_API_USER_REPOS_URL;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class GitHubNewRepo extends Activity {\n\n    EditText editTextNewRepo;\n    private GitHubUser gitHubUser;\n    private String newRepoFullName;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.git_newrepo);\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        editTextNewRepo = findViewById(R.id.git_newrepo_name);\n\n        gitHubUser = new GitHubUser(this);\n\n        final Button btnCreate = (Button) findViewById(R.id.git_create_newrepo_btn_ok);\n        btnCreate.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                String repoName = editTextNewRepo.getText().toString().trim();\n                boolean isPrivate = ((Switch) findViewById(R.id.git_newrepo_privacy)).isChecked();\n                if (repoName.length() == 0) {\n                    editTextNewRepo.setError(getString(R.string.error_field_required));\n                    editTextNewRepo.requestFocus();\n                    return;\n                }\n                else {\n                    createNewRepo(repoName, isPrivate);\n                    finish();\n                }\n            }\n        });\n\n        final Button btnCancel = (Button) findViewById(R.id.git_back_newrepo_btn_cancel);\n        btnCancel.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n\n                finish();\n            }\n        });\n        // Do not show soft keyboard by default\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n    }\n\n    private void createNewRepo(String repoName, boolean isPrivate) {\n        String fullURL = GITHUB_API_USER_REPOS_URL;\n\n        ProgressDialog progressDialog = new ProgressDialog(this);\n        progressDialog.setMessage(this.getResources().getString(R.string.github_creating_repository));\n        progressDialog.setCancelable(true);\n        progressDialog.show();\n\n        JsonObjectRequest postResquest= new JsonObjectRequest(\n                Request.Method.POST,\n                fullURL,\n                null,\n                new Response.Listener<JSONObject>() {\n                    @Override\n                    public void onResponse(JSONObject response) {\n                        try {\n                            setNewRepoFullName(response.getString(\"full_name\"));\n                            Toast.makeText(GitHubNewRepo.this, R.string.successfully_created, Toast.LENGTH_SHORT).show();\n                        } catch (JSONException e) {\n                            Toast.makeText(GitHubNewRepo.this, R.string.error_creating, Toast.LENGTH_SHORT).show();\n                            e.printStackTrace();\n                        }\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n                Toast.makeText(GitHubNewRepo.this, R.string.error_creating, Toast.LENGTH_SHORT).show();\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError\n            {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                return headers;\n            }\n\n            @Override\n            public String getBodyContentType() {\n                return \"application/json; charset=utf-8\";\n            }\n\n            @Override\n            public byte[] getBody() {\n                JSONObject jsonBody = new JSONObject();\n                try {\n                    jsonBody.put(\"name\", repoName);\n                    jsonBody.put(\"auto_init\", true);\n                    jsonBody.put(\"private\", isPrivate);\n                } catch (JSONException e) {\n                    e.printStackTrace();\n                }\n                final String requestBody = jsonBody.toString();\n                try {\n                    return requestBody == null ? null : requestBody.getBytes(\"utf-8\");\n                } catch (UnsupportedEncodingException uee) {\n                    VolleyLog.wtf(\"Unsupported Encoding while trying to get the bytes of %s using %s\", requestBody, \"utf-8\");\n                    return null;\n                }\n            }\n        };\n        Volley.newRequestQueue(this).add(postResquest);\n    }\n\n    public void setNewRepoFullName(String newRepoFullName) {\n        this.newRepoFullName = newRepoFullName;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/GitHubPullRequest.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.Toast;\n\nimport com.android.volley.AuthFailureError;\nimport com.android.volley.Request;\nimport com.android.volley.Response;\nimport com.android.volley.VolleyError;\nimport com.android.volley.VolleyLog;\nimport com.android.volley.toolbox.JsonObjectRequest;\nimport com.android.volley.toolbox.Volley;\n\nimport net.osmtracker.GitHubUser;\nimport net.osmtracker.R;\nimport static net.osmtracker.github.GitHubConstants.getRepoPullsUrl;\nimport static net.osmtracker.github.GitHubConstants.getRepoUrl;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.UnsupportedEncodingException;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class GitHubPullRequest extends Activity {\n\n    EditText editTextTitle, editTextBody;\n    private String repoOrigen;\n    private String defaultBranch;\n    private GitHubUser gitHubUser;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.git_create_pullrequest);\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        editTextTitle = findViewById(R.id.git_title_pullrequest_editText);\n        editTextBody = findViewById(R.id.git_body_pullrequest_editText);\n\n        gitHubUser = new GitHubUser(this);\n\n        Bundle bundle = GitHubPullRequest.this.getIntent().getExtras();\n        if (bundle != null){\n            getInfoRepo(bundle.getString(\"myFullRepoName\"));\n        }\n\n        final Button btnCreate = (Button) findViewById(R.id.git_create_pullrequest_btn_ok);\n        btnCreate.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                if (editTextTitle.getText().toString().trim().isEmpty()) {\n                    editTextTitle.setError(getString(R.string.error_field_required));\n                    editTextTitle.requestFocus();\n                    return;\n                }\n                if (editTextBody.getText().toString().trim().isEmpty()) {\n                    editTextBody.setError(getString(R.string.error_field_required));\n                    editTextBody.requestFocus();\n                    return;\n                }\n\n                createPullRequest();\n                finish();\n            }\n        });\n\n        final Button btnCancel = (Button) findViewById(R.id.git_back_pullrequest_btn_cancel);\n        btnCancel.setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                finish();\n            }\n        });\n        // Do not show soft keyboard by default\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n    }\n\n    private void createPullRequest() {\n        String fullURL = getRepoPullsUrl(this.repoOrigen);\n\n        JsonObjectRequest postResquest= new JsonObjectRequest(\n                Request.Method.POST,\n                fullURL,\n                null,\n                new Response.Listener<JSONObject>() {\n                    @Override\n                    public void onResponse(JSONObject response) {\n                        try {\n                            Toast.makeText(GitHubPullRequest.this, getString(R.string.pr_status) + \" \" + response.getString(\"state\"), Toast.LENGTH_SHORT).show();\n                        } catch (JSONException e) {\n                            Toast.makeText(GitHubPullRequest.this, R.string.error_creating, Toast.LENGTH_SHORT).show();\n                            e.printStackTrace();\n                        }\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n                String errorMsg = \"\";\n                if (error.networkResponse != null && error.networkResponse.data != null) {\n                    try {\n                        String responseBody = new String(error.networkResponse.data, \"utf-8\");\n                        Log.e(\"PR_ERROR\", responseBody);\n                        JSONObject github_response = new JSONObject(responseBody);\n                        JSONArray github_errors = github_response.getJSONArray(\"errors\");\n                        for (int i = 0; i < github_errors.length(); i++) {\n                            JSONObject github_error = github_errors.getJSONObject(i);\n                            errorMsg += github_error.getString(\"message\") + \"\\n\";\n                        }\n                    } catch (UnsupportedEncodingException e) {\n                        e.printStackTrace();\n                    } catch (JSONException e) {\n                        e.printStackTrace();\n                    } finally {\n                        errorMsg += getString(R.string.error_gh_pr_creation);\n                    }\n                }\n                Toast.makeText(GitHubPullRequest.this, errorMsg, Toast.LENGTH_LONG).show();\n                error.printStackTrace();\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError\n            {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                return headers;\n            }\n\n            @Override\n            public String getBodyContentType() {\n                return \"application/json; charset=utf-8\";\n            }\n\n            @Override\n            public byte[] getBody() {\n                JSONObject jsonBody = new JSONObject();\n                try {\n                    jsonBody.put(\"title\", editTextTitle.getText().toString().trim());\n                    jsonBody.put(\"body\", editTextBody.getText().toString().trim());\n                    jsonBody.put(\"head\", gitHubUser.getUsername()+\":\"+getDefaultBranch());\n                    jsonBody.put(\"base\", getDefaultBranch());\n                } catch (JSONException e) {\n                    e.printStackTrace();\n                }\n                final String requestBody = jsonBody.toString();\n                try {\n                    return requestBody == null ? null : requestBody.getBytes(\"utf-8\");\n                } catch (UnsupportedEncodingException uee) {\n                    VolleyLog.wtf(\"Unsupported Encoding while trying to get the bytes of %s using %s\", requestBody, \"utf-8\");\n                    return null;\n                }\n            }\n        };\n        Volley.newRequestQueue(this).add(postResquest);\n    }\n\n    private void getInfoRepo(String repoFullName) {\n        String fullURL = getRepoUrl(repoFullName);\n\n        JsonObjectRequest postResquest= new JsonObjectRequest(\n                Request.Method.GET,\n                fullURL,\n                null,\n                new Response.Listener<JSONObject>() {\n                    @Override\n                    public void onResponse(JSONObject response) {\n                        try {\n                            setRepoOrigen(response.getJSONObject(\"parent\").getString(\"full_name\")); //org.json.JSONException: No value for parent\n                            //setRepoOrigen(response.getString(\"full_name\"));\n                            setDefaultBranch(response.getString(\"default_branch\"));\n                        } catch (JSONException e) {\n                            e.printStackTrace();\n                        }\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n                Toast.makeText(GitHubPullRequest.this, R.string.repository_information_error, Toast.LENGTH_SHORT).show();\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                return headers;\n            }\n        };\n        Volley.newRequestQueue(this).add(postResquest);\n    }\n\n\n    public void setRepoOrigen(String repoOrigen) {\n        this.repoOrigen = repoOrigen;\n    }\n\n    public String getDefaultBranch() {\n        return defaultBranch;\n    }\n\n    public void setDefaultBranch(String defaultBranch) {\n        this.defaultBranch = defaultBranch;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/GitHubUpload.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.app.ProgressDialog;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.WindowManager;\nimport android.widget.AdapterView;\nimport android.widget.ArrayAdapter;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.Spinner;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\n\nimport com.android.volley.AuthFailureError;\nimport com.android.volley.DefaultRetryPolicy;\nimport com.android.volley.Request;\nimport com.android.volley.RequestQueue;\nimport com.android.volley.Response;\nimport com.android.volley.VolleyError;\nimport com.android.volley.VolleyLog;\nimport com.android.volley.toolbox.JsonArrayRequest;\nimport com.android.volley.toolbox.JsonObjectRequest;\nimport com.android.volley.toolbox.Volley;\n\nimport net.osmtracker.GitHubUser;\nimport net.osmtracker.R;\nimport net.osmtracker.util.Callback;\nimport net.osmtracker.util.DialogUtils;\nimport net.osmtracker.util.GitHubUtils;\nimport static net.osmtracker.github.GitHubConstants.getRepoFileContentUrl;\nimport static net.osmtracker.github.GitHubConstants.getUserReposUrl;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.FileReader;\nimport java.io.IOException;\nimport java.io.UnsupportedEncodingException;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Map;\n\n\npublic class GitHubUpload extends Activity {\n    private ArrayList<String> ArrayListRepos;\n    private GitHubUser gitHubUser;\n    private String  RepoName = \"\";\n    EditText editTextCommitMsj;\n    private static int TIME_OUT_MINS = 15;\n    private static int MAX_RETRIES = 3;\n    private static float BACKOFF_MULT = 1.5f;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.upload_github_menu);\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        editTextCommitMsj = findViewById(R.id.git_trackdetail_item_description);\n\n        ArrayListRepos = new ArrayList<>();\n        ArrayListRepos.add(getString(R.string.upload_to_github_select_repo));\n\n        gitHubUser = new GitHubUser(this);\n\n        listRepos();\n        openActivityOnClick(R.id.git_create_fork_btn_ok, GitHubNewFork.class, null);\n        openActivityOnClick(R.id.git_create_repo_btn_ok, GitHubNewRepo.class, null);\n\n        final Button btnCancel = (Button) findViewById(R.id.git_upload_btn_cancel);\n        btnCancel.setOnClickListener( v -> finish());\n\n        Spinner spinner = findViewById(R.id.item_git_spinner_repos);\n        createSpinnerListRepos(spinner);\n        // Do not show soft keyboard by default\n        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n    }\n\n    private void uploadCommit() {\n        Bundle bundle = GitHubUpload.this.getIntent().getExtras();\n        String commitMsj = editTextCommitMsj.getText().toString().trim();\n        if (commitMsj.isEmpty()) {\n            editTextCommitMsj.setError(getString(R.string.error_field_required));\n            editTextCommitMsj.requestFocus();\n            return;\n        }\n        if (bundle != null){\n            String filePath = getIntent().getStringExtra(\"filePath\");\n            if (filePath != null) {\n                try {\n                    File file = new File(filePath);\n                    StringBuilder encondedFile = new StringBuilder();\n                    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\n                        String line;\n                        while ((line = reader.readLine()) != null) {\n                            encondedFile.append(line);\n                        }\n                    }\n\n                    String repoOwner = getRepoName().substring(0, getRepoName().indexOf(\"/\")).replace(\".base64\", \"\");\n                    String repoName = getRepoName().substring(getRepoName().indexOf(\"/\") + 1);\n                    String repoFilePath = file.getName().replace(\".base64\", \"\");\n                    GitHubUtils.getGHFilenameAsync(repoOwner, repoName, repoFilePath, gitHubUser.getToken(),\n                            new Callback() {\n                                @Override\n                                public String onResult(String result) {\n                                    if (result != null) {\n                                        System.out.println(\"uploading to GitHub: \" + result);\n                                        startUploadGitHub(encondedFile.toString(), result, commitMsj);\n                                    } else {\n                                        System.out.println(\"Error while getting filename.\");\n                                    }\n                                    return result;\n                                }\n                            });\n                } catch (IOException e) {\n                    Toast.makeText(GitHubUpload.this, R.string.gpx_file_read_error, Toast.LENGTH_SHORT).show();\n                    e.printStackTrace();\n                }\n            } else {\n                Toast.makeText(GitHubUpload.this, R.string.gpx_file_not_found, Toast.LENGTH_SHORT).show();\n            }\n        }\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.githubupload_settings_menu, menu);\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(@NonNull MenuItem item) {\n        switch (item.getItemId()){\n            case R.id.git_configuration_credentials_btn:\n                Intent i = new Intent(this, GitHubConfig.class);\n                i.setPackage(this.getPackageName());\n                startActivity(i);\n                break;\n        }\n        return super.onOptionsItemSelected(item);\n    }\n\n    private void openActivityOnClick(int btnId, Class<? extends Activity> destination, Bundle bundle) {\n        final Button btn = (Button) findViewById(btnId);\n        btn.setOnClickListener( v -> {\n            Intent i = new Intent(GitHubUpload.this, destination);\n            i.setPackage(getPackageName());\n            if (bundle != null) {\n                i.putExtras(bundle);\n            }\n            startActivity(i);\n        });\n    }\n\n    /**\n     * Either starts uploading directly if we are authenticated against GitHub\n     */\n    private void startUploadGitHub(final String fileInBase64, String filename, String commitMsj){\n        String fullURL = getRepoFileContentUrl(getRepoName(), filename);\n\n        ProgressDialog progressDialog = new ProgressDialog(this);\n        progressDialog.setMessage(this.getResources().getString(R.string.uploading_file) + filename);\n        progressDialog.setCancelable(true);\n        progressDialog.show();\n\n        JsonObjectRequest postResquest= new JsonObjectRequest(\n                Request.Method.PUT,\n                fullURL,\n                null,\n                new Response.Listener<JSONObject>() {\n                    @Override\n                    public void onResponse(JSONObject response) {\n                        progressDialog.dismiss();\n                        DialogUtils.showSuccessDialog(GitHubUpload.this, R.string.successfully_uploaded);\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n                progressDialog.dismiss();\n                DialogUtils.showErrorDialog(GitHubUpload.this,\n                        GitHubUpload.this.getResources().getString(R.string.error_uploading));\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError\n            {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                headers.put(\"Accept\", \"*/*\");\n                headers.put(\"Accept-Encoding\", \"gzip, deflate, br\");\n                headers.put(\"Connection\", \"keep-alive\");\n                return headers;\n            }\n\n            @Override\n            public String getBodyContentType() {\n                return \"application/json; charset=utf-8\";\n            }\n\n            @Override\n            public byte[] getBody() {\n                JSONObject jsonBody = new JSONObject();\n                try {\n                    jsonBody.put(\"message\", commitMsj);\n                    jsonBody.put(\"content\", fileInBase64);\n                } catch (JSONException e) {\n                    e.printStackTrace();\n                }\n                final String requestBody = jsonBody.toString();\n                try {\n                    return requestBody == null ? null : requestBody.getBytes(\"utf-8\");\n                } catch (UnsupportedEncodingException uee) {\n                    VolleyLog.wtf(\"Unsupported Encoding while trying to get the bytes of %s using %s\", requestBody, \"utf-8\");\n                    return null;\n                }\n            }\n        };\n\n        postResquest.setRetryPolicy(new DefaultRetryPolicy(\n                TIME_OUT_MINS * 60 * 100, // 60: seconds in a min, 100: ms in a second\n                MAX_RETRIES,\n                BACKOFF_MULT\n        ));\n        Volley.newRequestQueue(this).add(postResquest);\n        //finish();\n    }\n\n    private void createSpinnerListRepos(Spinner spinner){\n        ArrayAdapter<String> adapter = new ArrayAdapter<>( this,\n                android.R.layout.simple_spinner_item, ArrayListRepos);\n        spinner.setAdapter(adapter);\n\n        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\n            @Override\n            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\n                setRepoName(adapterView.getItemAtPosition(i).toString());\n                if (i != 0) {\n                    Bundle bundleForPullRequest = new Bundle();\n                    bundleForPullRequest.putString(\"myFullRepoName\", getRepoName());\n                    openActivityOnClick(R.id.git_open_pull_request, GitHubPullRequest.class, bundleForPullRequest);\n                    ((Button) findViewById(R.id.git_upload_btn_ok)).setOnClickListener( v -> uploadCommit());\n                    Toast.makeText(GitHubUpload.this, getString(R.string.item_selected) + \" \" + getRepoName(), Toast.LENGTH_SHORT).show();\n                }\n                else {\n                    Button prBtn = (Button) findViewById(R.id.git_open_pull_request);\n                    Button commitBtn = (Button) findViewById(R.id.git_upload_btn_ok);\n                    prBtn.setOnClickListener( v -> {\n                        Toast.makeText(GitHubUpload.this, R.string.upload_to_github_select_repo, Toast.LENGTH_SHORT).show();\n                    });\n                    commitBtn.setOnClickListener( v -> {\n                        Toast.makeText(GitHubUpload.this, R.string.upload_to_github_select_repo, Toast.LENGTH_SHORT).show();\n                    });\n                }\n            }\n            @Override\n            public void onNothingSelected(AdapterView<?> adapterView) {\n                Toast.makeText(GitHubUpload.this, \"R.string.upload_to_github_select_repo\", Toast.LENGTH_SHORT).show();\n            }\n        });\n    }\n\n    private void listRepos() {\n        ProgressDialog progressDialog = new ProgressDialog(this);\n        progressDialog.setMessage(getString(R.string.retrieving_repositories));\n        progressDialog.setCancelable(true);\n        progressDialog.show();\n\n        RequestQueue queue = Volley.newRequestQueue(this);\n        String fullURL = getUserReposUrl();\n\n        JsonArrayRequest getResquest = new JsonArrayRequest(\n                Request.Method.GET,\n                fullURL,\n                null,\n                new Response.Listener<JSONArray>() {\n                    @Override\n                    public void onResponse(JSONArray response) {\n                        listRepoResponseAction(response, progressDialog);\n                    }\n                }, new Response.ErrorListener() {\n            @Override\n            public void onErrorResponse(VolleyError error) {\n\n            }\n        }){\n            @Override\n            public Map getHeaders() throws AuthFailureError\n            {\n                HashMap headers = new HashMap();\n                headers.put(\"Authorization\", \"Bearer \" + gitHubUser.getToken());\n                //headers.put(\"Accept\", \"*/*\");\n                //headers.put(\"Accept-Encoding\", \"gzip, deflate, br\");\n                //headers.put(\"Connection\", \"keep-alive\");\n                return headers;\n            }\n\n        };\n        getResquest.setShouldCache(false);\n        queue.getCache().remove(fullURL);\n        queue.getCache().clear();\n\n        queue.add(getResquest);\n    }\n\n    /**\n     * This method is called when the list of repositories is retrieved\n     * from the server.\n     *\n     * @param response JSONArray with the repositories\n     * @param progressDialog ProgressDialog\n     */\n    private void listRepoResponseAction(JSONArray response, ProgressDialog progressDialog) {\n        boolean errorOcurred = false;\n        for (int i = 0; i < response.length(); i++) {\n            // creating a new json object and\n            // getting each object from our json array.\n            try {\n                JSONObject responseObj = response.getJSONObject(i);\n                ArrayListRepos.add(responseObj.getString(\"full_name\"));\n            } catch (JSONException e) {\n                progressDialog.dismiss();\n                Toast.makeText(GitHubUpload.this, R.string.error_retrieving_repositories, Toast.LENGTH_SHORT).show();\n                e.printStackTrace();\n                errorOcurred = true;\n                break;\n            }\n        }\n        if (!errorOcurred) {\n            Toast.makeText(GitHubUpload.this, R.string.successfully_retrieved_repositories, Toast.LENGTH_SHORT).show();\n            progressDialog.dismiss();\n        }\n    }\n\n    public String getRepoName() {\n        return RepoName;\n    }\n\n    public void setRepoName(String repoName) {\n        RepoName = repoName;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/Intro.kt",
    "content": "package net.osmtracker.activity\n\nimport android.os.Bundle\nimport androidx.activity.enableEdgeToEdge\nimport androidx.core.content.ContextCompat\nimport androidx.fragment.app.Fragment\nimport androidx.preference.PreferenceManager\nimport com.github.appintro.AppIntro\nimport com.github.appintro.AppIntroFragment\nimport net.osmtracker.OSMTracker\nimport net.osmtracker.R\nimport androidx.core.content.edit\n\nclass Intro : AppIntro() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        // Enable Edge-to-Edge support. Must be called before super.onCreate()\n        enableEdgeToEdge()\n        super.onCreate(savedInstanceState)\n        // Make sure you don't call setContentView!\n\n        // Set the colors for the bottom bar elements\n        val activeColor = ContextCompat.getColor(this, R.color.colorAccent)\n        val inactiveColor = ContextCompat.getColor(this, R.color.colorPrimary)\n\n        setIndicatorColor(\n            selectedIndicatorColor = activeColor,\n            unselectedIndicatorColor = inactiveColor\n        )\n\n        setColorDoneText(activeColor)\n        setColorSkipButton(activeColor)\n        setNextArrowColor(activeColor)\n\n        // Call addSlide passing your Fragments.\n        // You can use AppIntroFragment to use a pre-built fragment\n        addSlide(AppIntroFragment.createInstance(\n                title = getString(R.string.app_intro_slide1_title),\n                imageDrawable = R.drawable.icon_100x100,\n                backgroundColorRes = R.color.appintro_background_color,\n                description = getString(R.string.app_intro_slide1_description)\n        ))\n\n        // Whats new Fragment\n        addSlide(AppIntroFragment.createInstance(\n            title = getString(R.string.app_intro_slide_whats_new_title),\n            imageDrawable = R.drawable.icon_100x100,\n            backgroundColorRes = R.color.appintro_background_color,\n            description = getString(R.string.app_intro_slide_whats_new_description)\n        ))\n\n        //TODO: change the image of slide number 2.\n        addSlide(AppIntroFragment.createInstance(\n                title = getString(R.string.app_intro_slide2_title),\n                imageDrawable = R.drawable.icon_100x100,\n                backgroundColorRes = R.color.appintro_background_color,\n                description = getString(R.string.app_intro_slide2_description)\n        ))\n    }\n\n    override fun onSkipPressed(currentFragment: Fragment?) {\n        super.onSkipPressed(currentFragment)\n        // Decide what to do when the user clicks on \"Skip\"\n        finish()\n    }\n\n    override fun onDonePressed(currentFragment: Fragment?) {\n        super.onDonePressed(currentFragment)\n        // Use the KTX extension for cleaner SharedPreferences editing\n        PreferenceManager.getDefaultSharedPreferences(this).edit {\n            putBoolean(\n                OSMTracker.Preferences.KEY_DISPLAY_APP_INTRO,\n                false\n            )\n        }\n        finish()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/NoteList.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.Intent;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.EditText;\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport net.osmtracker.R;\nimport net.osmtracker.adapter.NoteAdapter;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport java.util.Objects;\n\npublic class NoteList extends AppCompatActivity implements NoteAdapter.OnNoteClickListener {\n\n\tprivate static final String TAG = NoteList.class.getSimpleName();\n\n\tprivate NoteAdapter adapter;\n\tprivate long trackId;\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\tsetContentView(R.layout.notelist);\n\n\t\ttrackId = Objects.requireNonNull(getIntent().getExtras())\n\t\t\t\t.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\n\t\tRecyclerView recyclerView = findViewById(R.id.notelist_rv);\n\t\trecyclerView.setLayoutManager(new LinearLayoutManager(this));\n\n\t\tadapter = new NoteAdapter(this);\n\t\trecyclerView.setAdapter(adapter);\n\t}\n\n\t@Override\n\tprotected void onResume() {\n\t\tsuper.onResume();\n\t\trefreshData();\n\t}\n\n\tprivate void refreshData() {\n\n\t\tCursor cursor = getContentResolver().query(\n\t\t\t\tTrackContentProvider.notesUri(trackId),null, null, null,\n\t\t\t\tTrackContentProvider.Schema.COL_TIMESTAMP + \" desc\"\n\t\t);\n\t\tadapter.swapCursor(cursor);\n\t}\n\n\n\t@Override\n\tpublic void onNoteClick(long trackId, long noteId, String uuid, String name) {\n\t\tfinal DataHelper dataHelper = new DataHelper(this);\n\t\tLayoutInflater inflater = getLayoutInflater();\n\n\t\t// Inflate the note edit dialog layout\n\t\tfinal View editNoteDialog = inflater.inflate(R.layout.edit_note_dialog, null);\n\t\tfinal EditText editNoteName = editNoteDialog.findViewById(R.id.edit_note_et_name);\n\n\t\tButton buttonUpdate = editNoteDialog.findViewById(R.id.edit_note_button_update);\n\t\tButton buttonDelete = editNoteDialog.findViewById(R.id.edit_note_button_delete);\n\t\tButton buttonOSMUpload = editNoteDialog.findViewById(R.id.edit_note_button_osm_upload);\n\t\tButton buttonCancel = editNoteDialog.findViewById(R.id.edit_note_button_cancel);\n\n\t\t// Set existing note name\n\t\teditNoteName.setText(name);\n\t\teditNoteName.setSelection(name.length());\n\n\t\tAlertDialog.Builder builder = new AlertDialog.Builder(this);\n\t\tbuilder.setCancelable(true);\n\t\tfinal AlertDialog alert = builder.create();\n\n\t\t// Update note text\n\t\tbuttonUpdate.setOnClickListener(v -> {\n\t\t\tString newName = editNoteName.getText().toString();\n\t\t\tdataHelper.updateNote(trackId, uuid, newName);\n\t\t\trefreshData();\n\t\t\talert.dismiss();\n\t\t});\n\n\t\t// Delete note\n\t\tbuttonDelete.setOnClickListener(v -> new AlertDialog.Builder(this)\n\t\t\t\t.setTitle(R.string.delete_note_confirm_dialog_title)\n\t\t\t\t.setMessage(R.string.delete_note_confirm_dialog_msg)\n\t\t\t\t.setPositiveButton(R.string.delete_note_confirm_bt_ok, (dialog, which) -> {\n\t\t\t\t\tdataHelper.deleteNote(uuid);\n\t\t\t\t\trefreshData();\n\t\t\t\t\talert.dismiss();\n\t\t\t\t})\n\t\t\t\t.setNegativeButton(R.string.delete_note_confirm_bt_cancel,\n\t\t\t\t\t\t(dialog, which) -> dialog.dismiss())\n\t\t\t\t.show());\n\n\t\t// Upload note text to OpenStreetMap\n\t\tbuttonOSMUpload.setOnClickListener(v -> {\n\t\t\tuploadNoteToOSM(noteId);\n\t\t\talert.dismiss();\n\t\t});\n\n\t\t// Cancel button\n\t\tbuttonCancel.setOnClickListener(v -> alert.dismiss());\n\n\t\talert.setView(editNoteDialog);\n\t\talert.show();\n\t}\n\n\t/**\n\t * Extracts note data from DB and launches the OSM Note Upload activity.\n\t */\n\tprivate void uploadNoteToOSM(long noteId) {\n\t\t// Query the specific note to get latest Lat/Lon\n\t\tCursor cursor = getContentResolver().query(\n\t\t\t\tTrackContentProvider.noteUri(noteId),\n\t\t\t\tnull,null,null,null);\n\n\t\tif (cursor != null && cursor.moveToFirst()) {\n\t\t\tString noteText = cursor.getString(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_NAME));\n\t\t\tdouble lat = cursor.getDouble(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_LATITUDE));\n\t\t\tdouble lon = cursor.getDouble(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_LONGITUDE));\n\n\t\t\tIntent intent = new Intent(this, OpenStreetMapNotesUpload.class);\n\t\t\tintent.putExtra(\"noteId\", noteId);\n\t\t\tintent.putExtra(\"noteContent\", noteText);\n\t\t\tintent.putExtra(\"appName\", getString(R.string.app_name));\n\t\t\tintent.putExtra(\"latitude\", lat);\n\t\t\tintent.putExtra(\"longitude\", lon);\n\n\t\t\t// Retrieve app version number\n\t\t\ttry {\n\t\t\t\tPackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0);\n\t\t\t\tintent.putExtra(\"version\", pi.versionName);\n\t\t\t} catch (PackageManager.NameNotFoundException e) {\n\t\t\t\t// Ignore\n\t\t\t\tLog.d(TAG, \"Package name not found\", e);\n\t\t\t}\n\n\t\t\tcursor.close();\n\t\t\tstartActivity(intent);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/OpenStreetMapNotesUpload.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.widget.Button;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.preference.PreferenceManager;\n\nimport net.openid.appauth.AuthorizationException;\nimport net.openid.appauth.AuthorizationRequest;\nimport net.openid.appauth.AuthorizationResponse;\nimport net.openid.appauth.AuthorizationService;\nimport net.openid.appauth.AuthorizationServiceConfiguration;\nimport net.openid.appauth.ResponseTypeValues;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.osm.OpenStreetMapConstants;\nimport net.osmtracker.osm.UploadToOpenStreetMapNotesTask;\n\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\n\n/**\n * <p>Uploads a note on OSM using the API and OAuth authentication.</p>\n *\n * <p>This activity may be called twice during a single\n * upload cycle: First to start the upload, then a second\n * time when the user has authenticated using the browser.</p>\n *\n * @author Most of the code was made by Nicolas Guillaumin, adapted by Jose Andrés Vargas Serrano\n */\npublic class OpenStreetMapNotesUpload extends AppCompatActivity {\n\n    private static final String TAG = OpenStreetMapNotesUpload.class.getSimpleName();\n\n\tprivate long noteId;\n\n    private double latitude;\n    private double longitude;\n\n    private TextView noteContentView;\n    private TextView noteFooterView;\n\n    /** URL that the browser will call once the user is authenticated */\n    public final static String OAUTH2_CALLBACK_URL = \"osmtracker://osm-upload/oath2-completed/\";\n    private AuthorizationService authService;\n\tprivate ActivityResultLauncher<Intent> authLauncher;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\n\t\t// Register the launcher\n\t\tauthLauncher = registerForActivityResult(\n\t\t\t\tnew ActivityResultContracts.StartActivityForResult(),\n\t\t\t\tresult -> {\n\t\t\t\t\t// This replaces the logic previously in onActivityResult\n\t\t\t\t\tIntent data = result.getData();\n\t\t\t\t\t// RC_AUTH logic\n\t\t\t\t\tif (data != null) {\n\t\t\t\t\t\tAuthorizationResponse resp = AuthorizationResponse.fromIntent(data);\n\t\t\t\t\t\tAuthorizationException ex = AuthorizationException.fromIntent(data);\n\n\t\t\t\t\t\tif (resp != null) {\n\t\t\t\t\t\t\texchangeAuthorizationCode(resp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tLog.e(TAG, \"Authorization failed: \" + (ex != null ? ex.getMessage() : \"Unknown error\"));\n\t\t\t\t\t\t\tToast.makeText(this, R.string.osm_upload_oauth_failed, Toast.LENGTH_SHORT).show();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t);\n\n\n\t\tsetContentView(R.layout.osm_note_upload);\n\t\tsetTitle(R.string.osm_note_upload);\n\t\tnoteContentView = findViewById(R.id.wplist_item_name);\n\t\tnoteFooterView = findViewById(R.id.osm_note_footer);\n\n        // Read and cache extras\n        Bundle extras = getIntent().getExtras();\n        if (extras == null) {\n            Log.e(TAG, \"Missing extras for note upload.\");\n            finish();\n            return;\n        }\n\n        String initialNoteText = extras.getString(\"noteContent\", \"\");\n        String appName = extras.getString(\"appName\", getString(R.string.app_name));\n        String version = extras.getString(\"version\", \"\");\n\n\t\tif (extras.containsKey(\"noteId\")) noteId = extras.getLong(\"noteId\");\n        if (extras.containsKey(\"latitude\")) latitude = extras.getDouble(\"latitude\");\n        if (extras.containsKey(\"longitude\")) longitude = extras.getDouble(\"longitude\");\n\n        // fill UI with note content and note footer\n        noteContentView.setText(initialNoteText);\n        noteFooterView.setText(getString(R.string.osm_note_footer, appName, version));\n\n        final Button btnOk = findViewById(R.id.osm_note_upload_button_ok);\n        btnOk.setOnClickListener(v -> startUpload(noteId));\n        final Button btnCancel = findViewById(R.id.osm_note_upload_button_cancel);\n        btnCancel.setOnClickListener(v -> finish());\n\n    }\n\n\n    /**\n     * Either starts uploading directly if we are authenticated against OpenStreetMap,\n     * or ask the user to authenticate via the browser.\n     */\n    private void startUpload(long noteId) {\n        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\n\t\tString accessToken = prefs.getString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN, null);\n\n\t\tif (accessToken != null && !accessToken.isEmpty()) {\n\t\t\t// STATE: AUTHORIZED. Re-use saved token\n\t\t\tLog.d(TAG, \"Token found, proceeding to upload note to OSM.\");\n\t\t\tuploadToOsm(accessToken, noteId);\n\t\t} else {\n\t\t\t// STATE: UNAUTHORIZED. Open browser and request token\n\t\t\tLog.d(TAG, \"No token found, requesting authorization.\");\n            requestOsmAuth();\n        }\n    }\n    /*\n     * Init Authorization request workflow. Launches browser to request authorization.\n     */\n    public void requestOsmAuth() {\n        // Authorization service configuration\n        AuthorizationServiceConfiguration serviceConfig = new AuthorizationServiceConfiguration(\n                Uri.parse(OpenStreetMapConstants.OAuth2.Urls.AUTHORIZATION_ENDPOINT),\n                Uri.parse(OpenStreetMapConstants.OAuth2.Urls.TOKEN_ENDPOINT));\n\n\t\t// Obtaining an authorization code\n\t\tAuthorizationRequest authRequest = new AuthorizationRequest.Builder(\n\t\t\t\tserviceConfig,\n\t\t\t\tOpenStreetMapConstants.OAuth2.CLIENT_ID,\n\t\t\t\tResponseTypeValues.CODE,\n\t\t\t\tUri.parse(OAUTH2_CALLBACK_URL))\n\t\t\t\t.setScope(OpenStreetMapConstants.OAuth2.SCOPE)\n\t\t\t\t.build();\n\n\t\t// Start activity.\n        authService = new AuthorizationService(this);\n        Intent authIntent = authService.getAuthorizationRequestIntent(authRequest);\n\t\t//when done onActivityResult will be called.\n\t\t// Use the launcher instead of startActivityForResult\n\t\tauthLauncher.launch(authIntent);\n    }\n\n\tprivate void exchangeAuthorizationCode(AuthorizationResponse resp) {\n\t\tauthService.performTokenRequest(resp.createTokenExchangeRequest(), (tokenResp, tokenEx) -> {\n\t\t\tif (tokenResp != null && tokenResp.accessToken != null) {\n\t\t\t\t// STATE: TRANSITION TO AUTHORIZED\n\t\t\t\tpersistToken(tokenResp.accessToken);\n\t\t\t\tuploadToOsm(tokenResp.accessToken, noteId);\n\t\t\t} else {\n\t\t\t\tLog.e(TAG, \"Token exchange failed\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate void persistToken(String token) {\n\t\tPreferenceManager.getDefaultSharedPreferences(this).edit()\n\t\t\t\t.putString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN, token)\n\t\t\t\t.apply();\n\t}\n\n    /**\n     * Uploads notes to OSM.\n     */\n    public void uploadToOsm(String accessToken, long noteId) {\n\t\tString noteText = noteContentView.getText().toString();\n\t\tString footer = noteFooterView.getText().toString();\n\t\tif (!footer.isEmpty()) {\n\t\t\tnoteText = noteText + \"\\n\\n\" + footer;\n\t\t}\n\n\t\t// Final variables for the background thread\n\t\tfinal String finalNoteText = noteText;\n\n\t\t// This replaces the deprecated AsyncTask.execute()\n\t\tExecutorService executor = Executors.newSingleThreadExecutor();\n\t\texecutor.execute(() -> {\n\t\t\ttry {\n\t\t\t\tnew UploadToOpenStreetMapNotesTask(\n\t\t\t\t\t\tOpenStreetMapNotesUpload.this,\n\t\t\t\t\t\taccessToken,\n\t\t\t\t\t\tnoteId,\n\t\t\t\t\t\tfinalNoteText,\n\t\t\t\t\t\tlatitude,\n\t\t\t\t\t\tlongitude\n\t\t\t\t).run();\n\t\t\t} catch (Exception e) {\n\t\t\t\tLog.e(TAG, \"Error during OSM Note upload\", e);\n\t\t\t\trunOnUiThread(() ->\n\t\t\t\t\t\tToast.makeText(this, R.string.osm_upload_error, Toast.LENGTH_SHORT).show()\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\texecutor.shutdown();\n\t\t\t}\n\t\t});\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/OpenStreetMapUpload.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.ContentUris;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.WindowManager;\nimport android.widget.Button;\nimport android.widget.Toast;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.openid.appauth.AuthorizationException;\nimport net.openid.appauth.AuthorizationRequest;\nimport net.openid.appauth.AuthorizationResponse;\nimport net.openid.appauth.AuthorizationService;\nimport net.openid.appauth.AuthorizationServiceConfiguration;\nimport net.openid.appauth.ResponseTypeValues;\nimport net.openid.appauth.TokenResponse;\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.gpx.ExportToTempFileTask;\nimport net.osmtracker.osm.OpenStreetMapConstants;\nimport net.osmtracker.osm.UploadToOpenStreetMapTask;\n\n/**\n * <p>Uploads a track on OSM using the API and\n * OAuth authentication.</p>\n * \n * <p>This activity may be called twice during a single\n * upload cycle: First to start the upload, then a second\n * time when the user has authenticated using the browser.</p>\n *\n * @author Nicolas Guillaumin\n */\npublic class OpenStreetMapUpload extends TrackDetailEditor {\n\n\tprivate static final String TAG = OpenStreetMapUpload.class.getSimpleName();\n\n\t/** URL that the browser will call once the user is authenticated */\n\tpublic final static String OAUTH2_CALLBACK_URL = \"osmtracker://osm-upload/oath2-completed/?\"+ TrackContentProvider.Schema.COL_TRACK_ID+\"=\";\n\tpublic final static int RC_AUTH = 7;\n\n\tprivate AuthorizationService authService;\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\t\n\t\tsuper.onCreate(savedInstanceState, R.layout.osm_upload, getTrackId());\n\t\tfieldsMandatory = true;\n\n\t\tfinal Button btnOk = (Button) findViewById(R.id.osm_upload_btn_ok);\n\t\tbtnOk.setOnClickListener(new OnClickListener() {\n\t\t\t@Override\n\t\t\tpublic void onClick(View v) {\n\t\t\t\tif (save()) {\n\t\t\t\t\tstartUpload();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfinal Button btnCancel = (Button) findViewById(R.id.osm_upload_btn_cancel);\n\t\tbtnCancel.setOnClickListener(new OnClickListener() {\n\t\t\t@Override\n\t\t\tpublic void onClick(View v) {\n\t\t\t\tfinish();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Do not show soft keyboard by default\n\t\tgetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n\t}\n\t\n\t/**\n\t * Gets the track ID we were called with, either from the\n\t * intent extras if we were started by OSMTracker, or in the\n\t * URI if we are returning from the browser.\n\t * @return\n\t */\n\tprivate long getTrackId() {\n\t\tif (getIntent().getExtras() != null && getIntent().getExtras().containsKey(TrackContentProvider.Schema.COL_TRACK_ID)) {\n\t\t\treturn getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t} else if (getIntent().getData().toString().startsWith(OAUTH2_CALLBACK_URL)) {\n\t\t\treturn Long.parseLong(getIntent().getData().getQueryParameter(TrackContentProvider.Schema.COL_TRACK_ID));\n\t\t} else {\n\t\t\tthrow new IllegalArgumentException(\"Missing Track ID\");\n\t\t}\n\t}\n\t\n\t/**\n\t * Will be called as well when we come back from the browser\n\t * after user authentication.\n\t */\n\t@Override\n\tprotected void onResume() {\n\t\tsuper.onResume();\n\t\t\n\t\tCursor cursor = managedQuery(\n\t\t\t\tContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId),\n\t\t\t\tnull, null, null, null);\n\n\t\tif (! cursor.moveToFirst())\t{\n\t\t\t// This shouldn't occur, it's here just in case.\n\t\t\t// So, don't make each language translate/localize it.\n\t\t\tToast.makeText(this, \"Track ID not found.\", Toast.LENGTH_SHORT).show();\n\t\t\tfinish();\n\t\t\treturn;  // <--- Early return ---\n\t\t}\n\n\t\tbindTrack(Track.build(trackId, cursor, getContentResolver(), false));\n\t}\n\n\t/**\n\t * Either starts uploading directly if we are authenticated against OpenStreetMap,\n\t * or ask the user to authenticate via the browser.\n\t */\n\tprivate void startUpload() {\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\n\t\tif ( prefs.contains(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN) ) {\n\t\t\t// Re-use saved token\n\t\t\tuploadToOsm(prefs.getString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN, \"\"));\n\t\t} else {\n\t\t\t// Open browser and request token\n\t\t\trequestOsmAuth();\n\t\t}\n\t}\n\t/*\n\t * Init Authorization request workflow.\n\t */\n\tpublic void requestOsmAuth() {\n\t\t// Authorization service configuration\n\t\tAuthorizationServiceConfiguration serviceConfig =\n\t\t\t\tnew AuthorizationServiceConfiguration(\n\t\t\t\t\t\tUri.parse(OpenStreetMapConstants.OAuth2.Urls.AUTHORIZATION_ENDPOINT),\n\t\t\t\t\t\tUri.parse(OpenStreetMapConstants.OAuth2.Urls.TOKEN_ENDPOINT));\n\n\t\t// Obtaining an authorization code\n\t\tUri redirectURI = Uri.parse(OAUTH2_CALLBACK_URL+trackId);\n\t\tAuthorizationRequest.Builder authRequestBuilder =\n\t\t\t\tnew AuthorizationRequest.Builder(\n\t\t\t\t\t\tserviceConfig, OpenStreetMapConstants.OAuth2.CLIENT_ID,\n\t\t\t\t\t\tResponseTypeValues.CODE, redirectURI);\n\t\tAuthorizationRequest authRequest = authRequestBuilder\n\t\t\t\t.setScope(OpenStreetMapConstants.OAuth2.SCOPE)\n\t\t\t\t.build();\n\n\t\t// Start activity.\n\t\tauthService = new AuthorizationService(this);\n\t\tIntent authIntent = authService.getAuthorizationRequestIntent(authRequest);\n\t\tstartActivityForResult(authIntent, RC_AUTH); //when done onActivityResult will be called.\n\t}\n\n\n\tprotected void onActivityResult(int requestCode, int resultCode, Intent data) {\n\t\tsuper.onActivityResult(requestCode, resultCode, data);\n\t\t// User is returning from authentication\n\t\tif (requestCode == RC_AUTH) {\n\t\t\t// Handling the authorization response\n\t\t\tAuthorizationResponse resp = AuthorizationResponse.fromIntent(data);\n\t\t\tAuthorizationException ex = AuthorizationException.fromIntent(data);\n\t\t\t// ... process the response or exception ...\n\t\t\tif (ex != null) {\n\t\t\t\tLog.e(TAG, \"Authorization Error. Exception received from server.\");\n\t\t\t\tLog.e(TAG, ex.getMessage());\n\t\t\t} else if (resp == null) {\n\t\t\t\tLog.e(TAG, \"Authorization Error. Null response from server.\");\n\t\t\t} else {\n\t\t\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\n\n\t\t\t\t//Exchanging the authorization code\n\t\t\t\tauthService.performTokenRequest(\n\t\t\t\t\t\tresp.createTokenExchangeRequest(),\n\t\t\t\t\t\tnew AuthorizationService.TokenResponseCallback() {\n\t\t\t\t\t\t\t@Override public void onTokenRequestCompleted(\n\t\t\t\t\t\t\t\t\tTokenResponse resp, AuthorizationException ex) {\n\t\t\t\t\t\t\t\tif (resp != null) {\n\t\t\t\t\t\t\t\t\t// exchange succeeded\n\t\t\t\t\t\t\t\t\tSharedPreferences.Editor editor = prefs.edit();\n\t\t\t\t\t\t\t\t\teditor.putString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN, resp.accessToken);\n\t\t\t\t\t\t\t\t\teditor.apply();\n\t\t\t\t\t\t\t\t\t//continue with the track Upload.\n\t\t\t\t\t\t\t\t\tuploadToOsm(resp.accessToken);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// authorization failed, check ex for more details\n\t\t\t\t\t\t\t\t\tLog.e(TAG, \"OAuth failed.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tLog.e(TAG, \"Unexpected requestCode:\" + requestCode + \".\");\n\t\t}\n\t}\n\n\t/**\n\t * Exports track on disk then upload to OSM.\n\t */\n\tpublic void uploadToOsm(String accessToken) {\n\t\tnew ExportToTempFileTask(this, trackId) {\n\t\t\t@Override\n\t\t\tprotected void executionCompleted() {\n\t\t\t\tnew UploadToOpenStreetMapTask(OpenStreetMapUpload.this, accessToken,\n\t\t\t\t\t\ttrackId, this.getTmpFile(),\tthis.getFilename(),\n\t\t\t\t\t\tetDescription.getText().toString(), etTags.getText().toString(),\n\t\t\t\t\t\tTrack.OSMVisibility.fromPosition(\n\t\t\t\t\t\t\t\tOpenStreetMapUpload.this.spVisibility.getSelectedItemPosition())\n\t\t\t\t).execute();\n\t\t\t}\n\t\t}.execute();\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/Preferences.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.widget.Button;\nimport android.widget.Toast;\n\nimport androidx.appcompat.app.ActionBar;\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.fragment.app.FragmentManager;\nimport androidx.preference.EditTextPreference;\nimport androidx.preference.EditTextPreferenceDialogFragmentCompat;\nimport androidx.preference.ListPreference;\nimport androidx.preference.Preference;\nimport androidx.preference.PreferenceFragmentCompat;\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport java.io.File;\nimport java.util.Objects;\n\n/**\n * Manages preferences screen\n */\npublic class Preferences extends AppCompatActivity {\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\tsetContentView(R.layout.settings_activity);\n\t\tif (savedInstanceState == null) {\n\t\t\tgetSupportFragmentManager()\n\t\t\t\t\t.beginTransaction()\n\t\t\t\t\t.replace(R.id.settings, new SettingsFragment())\n\t\t\t\t\t.commit();\n\t\t}\n\t\tActionBar actionBar = getSupportActionBar();\n\t\tif (actionBar != null) {\n\t\t\tactionBar.setDisplayHomeAsUpEnabled(true);\n\t\t}\n\t}\n\n\tpublic static class SettingsFragment extends PreferenceFragmentCompat {\n\n\t\tprivate static final String EXTRA_DEFAULT_VALUE = \"DEFAULT_VALUE\";\n\n\t\t@Override\n\t\tpublic void onCreatePreferences(Bundle savedInstanceState, String rootKey) {\n\t\t\tsetPreferencesFromResource(R.xml.preferences, rootKey);\n\t\t\tSharedPreferences prefs =\n\t\t\t\t\tPreferenceManager.getDefaultSharedPreferences(requireContext());\n\n\t\t\t// General settings\n\t\t\tsetupVoiceRecDuration();\n\t\t\t// Notes\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_USE_NOTES,\n\t\t\t\t\tgetString(R.string.prefs_notes_summary)\n\t\t\t);\n\t\t\t// OSM track visibility\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_OSM_TRACK_VISIBILITY,\n\t\t\t\t\tgetString(R.string.prefs_osm_visibility_summary)\n\t\t\t);\n\t\t\tsetupOSMAuthClearData(prefs);\n\n\t\t\t// GPS Settings\n\t\t\t//Open Android GPS Settings screen\n\t\t\tsetupPreferenceNavigation(\n\t\t\t\t\tOSMTracker.Preferences.KEY_GPS_OSSETTINGS,\n\t\t\t\t\tnew Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));\n\t\t\t//GPSLogging Interval\n\t\t\tsetupEditTextNum(\n\t\t\t\t\tOSMTracker.Preferences.KEY_GPS_LOGGING_INTERVAL,\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_interval_seconds),\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_interval_summary),\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_interval_empty),\n\t\t\t\t\tOSMTracker.Preferences.VAL_GPS_LOGGING_INTERVAL\n\t\t\t);\n\t\t\t//GPS Logging Min Distance\n\t\t\tsetupEditTextNum(\n\t\t\t\t\tOSMTracker.Preferences.KEY_GPS_LOGGING_MIN_DISTANCE,\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_min_distance_meters),\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_min_distance_summary),\n\t\t\t\t\tgetString(R.string.prefs_gps_logging_min_distance_empty),\n\t\t\t\t\tOSMTracker.Preferences.VAL_GPS_LOGGING_MIN_DISTANCE\n\t\t\t);\n\n\n\t\t\t// GPX Settings\n\t\t\tsetupStorageDirectory();\n\t\t\t//Filename\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_FILENAME,\n\t\t\t\t\tgetString(R.string.prefs_output_filename_summary)\n\t\t\t);\n\t\t\t//Accuracy\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_ACCURACY,\n\t\t\t\t\tgetString(R.string.prefs_output_accuracy_summary)\n\t\t\t);\n\t\t\t//Compas Heading\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_COMPASS,\n\t\t\t\t\tgetString(R.string.prefs_compass_heading_summary)\n\t\t\t);\n\n\t\t\t// User Interface Settings\n\t\t\t// Camera\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_PICTURE_SOURCE,\n\t\t\t\t\tgetString(R.string.prefs_ui_picture_source_summary)\n\t\t\t);\n\t\t\t// App Theme\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_THEME,\n\t\t\t\t\tgetString(R.string.prefs_theme_summary)\n\t\t\t);\n\t\t\t//Explicit execution of buttons presets window\n\t\t\tsetupPreferenceNavigation(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT,\n\t\t\t\t\tnew Intent(requireContext(), ButtonsPresets.class));\n\t\t\t//Map tile provider\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_MAP_TILE,\n\t\t\t\t\tgetString(R.string.prefs_map_tile_summary)\n\t\t\t);\n\t\t\t// Screen Orientation\n\t\t\tsetupListPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_ORIENTATION,\n\t\t\t\t\tgetString(R.string.prefs_ui_orientation_summary)\n\t\t\t);\n\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t */\n\t\tprivate void setupStorageDirectory() {\n\t\t\t// External storage directory\n\t\t\tEditTextPreference storageDirPref = findPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_STORAGE_DIR);\n\n\t\t\tif (storageDirPref == null) return;\n\n\t\t\t// Set summary provider\n\t\t\tstorageDirPref.setSummaryProvider(preference -> {\n\t\t\t\tString val = storageDirPref.getText();\n\t\t\t\tif (TextUtils.isEmpty(val)) {\n\t\t\t\t\treturn OSMTracker.Preferences.VAL_STORAGE_DIR;\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t});\n\n\t\t\t// Enforce the leading slash\n\t\t\tstorageDirPref.setOnPreferenceChangeListener((preference, newValue) -> {\n\t\t\t\tString val = newValue.toString().trim();\n\t\t\t\t// Empty\n\t\t\t\tif (TextUtils.isEmpty(val)) {\n\t\t\t\t\tToast.makeText(requireContext(),\n\t\t\t\t\t\t\tR.string.prefs_storage_dir_empty,\n\t\t\t\t\t\t\tToast.LENGTH_SHORT).show();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Ensure there is always a leading slash\n\t\t\t\tif (!val.startsWith(File.separator)) {\n\t\t\t\t\tString fixedVal = File.separator + val;\n\t\t\t\t\t((EditTextPreference) preference).setText(fixedVal);\n\t\t\t\t\treturn false; //ignores the user input\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Voice record duration: set a custom SummaryProvider\n\t\t */\n\t\tprivate void setupVoiceRecDuration() {\n\t\t\tPreference voiceRec = findPreference(OSMTracker.Preferences.KEY_VOICEREC_DURATION);\n\n\t\t\tif (voiceRec == null) return;\n\n\t\t\tvoiceRec.setSummaryProvider(\n\t\t\t\t\t(Preference.SummaryProvider<ListPreference>) preference -> {\n\t\t\t\t\t\t// Return your combined string\n\t\t\t\t\t\treturn preference.getEntry() + \" \"\n\t\t\t\t\t\t\t\t+ getString(R.string.prefs_voicerec_duration_seconds);\n\t\t\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Clear OSM data: Disable if there's no OSM data stored\n\t\t *\n\t\t * @param prefs SharedPreferences\n\t\t */\n\t\tprivate void setupOSMAuthClearData(SharedPreferences prefs) {\n\n\t\t\tPreference OSMAuthClearData = findPreference(\n\t\t\t\t\tOSMTracker.Preferences.KEY_OSM_OAUTH_CLEAR_DATA);\n\n\t\t\tif (OSMAuthClearData == null) return;\n\n\t\t\tString tokenKey = OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN;\n\t\t\tOSMAuthClearData.setEnabled(prefs.contains(tokenKey));\n\t\t\t// Set a Click Listener to show the confirmation dialog\n\t\t\tOSMAuthClearData.setOnPreferenceClickListener(preference -> {\n\t\t\t\tnew androidx.appcompat.app.AlertDialog.Builder(requireContext())\n\t\t\t\t\t\t.setTitle(preference.getTitle())\n\t\t\t\t\t\t.setMessage(R.string.prefs_osm_clear_oauth_data_dialog)\n\t\t\t\t\t\t.setIcon(preference.getIcon())\n\t\t\t\t\t\t.setPositiveButton(android.R.string.ok, (dialog, which) -> {\n\t\t\t\t\t\t\t// User clicked OK: Clear the data\n\t\t\t\t\t\t\tprefs.edit().remove(tokenKey).apply();\n\t\t\t\t\t\t\t// Disable the button now that data is gone\n\t\t\t\t\t\t\tpreference.setEnabled(false);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.setNegativeButton(android.R.string.cancel, null)\n\t\t\t\t\t\t.show();\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t}\n\n\t\t/**\n\t\t * Setup a preference that launches an activity via Intent\n\t\t * @param preferenceKey The preference key\n\t\t * @param intent The intent to launch\n\t\t */\n\t\tprivate void setupPreferenceNavigation(String preferenceKey, Intent intent) {\n\t\t\tPreference preference = findPreference(preferenceKey);\n\n\t\t\tif (preference == null) return;\n\n\t\t\tpreference.setOnPreferenceClickListener(p -> {\n\t\t\t\tstartActivity(intent);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param preferenceKey   from OSMTracker.Preferences\n\t\t * @param valueSuffix     appended to the end of the value, shown in the summary\n\t\t * @param summary         static summary to be appended to the end of the summary\n\t\t * @param validationError in case of empty value\n\t\t * @param defaultValue\t  value to be used for the reset button\n\t\t */\n\t\tprivate void setupEditTextNum(String preferenceKey, String valueSuffix, String summary,\n\t\t\t\t\t\t\t\t\t  String validationError, String defaultValue) {\n\t\t\tEditTextPreference numInputPref = findPreference(preferenceKey);\n\t\t\tif (numInputPref == null) return;\n\n\t\t\t// Store default value in Extras so it can be retrieved by the Reset Dialog\n\t\t\tnumInputPref.getExtras().putString(EXTRA_DEFAULT_VALUE, defaultValue);\n\n\t\t\t// Set input type to number and move cursor to the end\n\t\t\tnumInputPref.setOnBindEditTextListener(editText -> {\n\t\t\t\teditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER);\n\t\t\t\teditText.setSelection(editText.getText().length());\n\t\t\t});\n\n\t\t\t// Set summary provider\n\t\t\tnumInputPref.setSummaryProvider(preference -> {\n\t\t\t\tEditTextPreference editTextPreference = (EditTextPreference) preference;\n\t\t\t\treturn editTextPreference.getText() + \" \" + valueSuffix + \". \" + summary;\n\t\t\t});\n\n\t\t\tnumInputPref.setOnPreferenceChangeListener((preference, newValue) -> {\n\t\t\t\tString val = (String) newValue;\n\t\t\t\tif (TextUtils.isEmpty(val)) {\n\t\t\t\t\tToast.makeText(requireContext(), validationError, Toast.LENGTH_SHORT).show();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\n\t\t@SuppressWarnings(\"deprecation\") // Required to link the dialog to the fragment\n\t\t@Override\n\t\tpublic void onDisplayPreferenceDialog(Preference preference) {\n\n\t\t\t// Retrieve the default value defined in extras.\n\t\t\t// If null, it means this preference doesn't support the reset feature.\n\t\t\t// Fallback to the default dialog behavior.\n\t\t\tString defaultValue = preference.getExtras().getString(EXTRA_DEFAULT_VALUE);\n\t\t\tif (defaultValue == null) {\n\t\t\t\tsuper.onDisplayPreferenceDialog(preference);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create the standard dialog fragment\n\t\t\tfinal EditTextPreferenceDialogFragmentCompat dialogFragment =\n\t\t\t\t\tEditTextPreferenceDialogFragmentCompat.newInstance(preference.getKey());\n\t\t\tdialogFragment.setTargetFragment(this, 0);\n\t\t\tdialogFragment.show(\n\t\t\t\t\tgetParentFragmentManager(),\n\t\t\t\t\t\"androidx.preference.PreferenceFragment.DIALOG\");\n\n\t\t\t// Inject the button after the dialog is shown\n\t\t\tgetParentFragmentManager().registerFragmentLifecycleCallbacks(\n\t\t\t\t\tnew FragmentManager.FragmentLifecycleCallbacks() {\n\t\t\t\t@Override\n\t\t\t\tpublic void onFragmentStarted(\n\t\t\t\t\t\t@androidx.annotation.NonNull FragmentManager fm,\n\t\t\t\t\t\t@androidx.annotation.NonNull androidx.fragment.app.Fragment f) {\n\t\t\t\t\tif (f == dialogFragment) {\n\t\t\t\t\t\tandroid.app.Dialog dialog = dialogFragment.getDialog();\n\t\t\t\t\t\tif (dialog instanceof androidx.appcompat.app.AlertDialog alertDialog) {\n\n\t\t\t\t\t\t\t// Configure the Neutral Button for reset default value\n\t\t\t\t\t\t\tButton btnReset = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);\n\t\t\t\t\t\t\tbtnReset.setText(R.string.prefs_reset_default_value);\n\t\t\t\t\t\t\tbtnReset.setVisibility(android.view.View.VISIBLE);\n\n\t\t\t\t\t\t\tbtnReset.setOnClickListener(v -> {\n\t\t\t\t\t\t\t\tif (preference instanceof EditTextPreference) {\n\t\t\t\t\t\t\t\t\t((EditTextPreference) preference).setText(defaultValue);\n\t\t\t\t\t\t\t\t\talertDialog.dismiss();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Cleanup\n\t\t\t\t\t\tgetParentFragmentManager().unregisterFragmentLifecycleCallbacks(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\n\t\t/**\n\t\t * Setup a ListPreference with a custom two lines summary, displays the selected entry\n\t\t *  on the first line, and the static summary on the second line.\n\t\t *\n\t\t * @param preferenceKey preference identifier\n\t\t * @param staticSummary text to show on the second line\n\t\t */\n\t\tprivate void setupListPreference(String preferenceKey, String staticSummary) {\n\t\t\tListPreference listPref = findPreference(preferenceKey);\n\n\t\t\tif (listPref == null) return;\n\n\t\t\tlistPref.setSummaryProvider(preference -> {\n\t\t\t\tListPreference lp = (ListPreference) preference;\n\t\t\t\tCharSequence entry = lp.getEntry();\n\n\t\t\t\t// Handle cases where no value has been selected yet. (backwards compatibility)\n\t\t\t\tString displayValue;\n\t\t\t\tif (entry == null || TextUtils.isEmpty(entry)) {\n\t\t\t\t\t// Fallback text if no value is set.\n\t\t\t\t\tdisplayValue = getString(R.string.prefs_not_set);\n\t\t\t\t} else {\n\t\t\t\t\tdisplayValue = entry.toString();\n\t\t\t\t}\n\t\t\t\treturn displayValue + \".\\n\" + staticSummary;\n\t\t\t});\n\t\t}\n\n\t}\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/TrackDetail.java",
    "content": "package net.osmtracker.activity;\n\nimport java.sql.Date;\nimport java.text.DateFormat;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.gpx.ExportToStorageTask;\nimport net.osmtracker.util.MercatorProjection;\n\nimport android.Manifest;\nimport android.app.AlertDialog;\nimport android.content.ContentResolver;\nimport android.content.ContentUris;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\nimport android.graphics.Paint;\nimport android.os.Build;\nimport android.os.Bundle;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.preference.PreferenceManager;\n\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup;\nimport android.view.WindowManager;\nimport android.widget.AdapterView;\nimport android.widget.Button;\nimport android.widget.ListView;\nimport android.widget.SimpleAdapter;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\n\n/**\n * Display details about one track.  Allow naming the track.\n * The track ID is passed into the Bundle via {@link TrackContentProvider.Schema#COL_TRACK_ID}.\n *\n * @author Jeremy D Monin <jdmonin@nand.net>\n *\n */\npublic class TrackDetail extends TrackDetailEditor implements AdapterView.OnItemClickListener {\n\n\t@SuppressWarnings(\"unused\")\n\tprivate static final String TAG = TrackDetail.class.getSimpleName();\n\n\tfinal private int RC_WRITE_PERMISSIONS = 1;\n\n\t/**\n\t * Key to bind the \"key\" of each item using SimpleListAdapter\n\t */\n\tprivate static final String ITEM_KEY = \"key\";\n\t\n\t/**\n\t * Key to bind the \"value\" of each item using SimpleListAdapter\n\t */\n\tprivate static final String ITEM_VALUE = \"value\";\n\t\n\t/**\n\t * Position of the waypoints counts in the list\n\t */\n\tprivate static final int WP_COUNT_INDEX = 0;\n\n\t/** Does this track have any waypoints?  If true, underline Waypoint count in the list. */\n\tprivate boolean trackHasWaypoints = false;\n\t// Does this track have any notes?  If true, underline Notes count in the list.\n\tprivate boolean trackHasNotes = false;\n\n\t/**\n\t * List with track info\n\t */\n\tprivate ListView lv;\n\t\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState, R.layout.trackdetail, getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID));\n\n\t\tlv = (ListView) findViewById(R.id.trackdetail_list);\n\n\t\tfinal Button btnOk = (Button) findViewById(R.id.trackdetail_btn_ok);\n\t\tbtnOk.setOnClickListener(new OnClickListener() {\n\t\t\t@Override\n\t\t\tpublic void onClick(View v) {\n\t\t\t\tsave();\n\t\t\t\tfinish();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\t\t\n\t\tfinal Button btnCancel = (Button) findViewById(R.id.trackdetail_btn_cancel);\n\t\tbtnCancel.setOnClickListener(new OnClickListener() {\n\t\t\t@Override\n\t\t\tpublic void onClick(View v) {\n\t\t\t\t// Just close the dialog\n\t\t\t\tfinish();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\t// Do not show soft keyboard by default\n\t\tgetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);\n\t\t\n\t\t// further work is done in onResume.\n\t}\n\n\t@Override\n\tprotected void onResume() {\n\t\tsuper.onResume();\n\t\t\n\t\t// Query the track values\n\t\tContentResolver cr = getContentResolver();\n\t\tCursor cursor = cr.query(\n\t\t\tContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId),\n\t\t\tnull, null, null, null);\n\t\t\n\t\tif (! cursor.moveToFirst())\t{\n\t\t\t// This shouldn't occur, it's here just in case.\n\t\t\t// So, don't make each language translate/localize it.\n\t\t\tToast.makeText(this, \"Track ID not found.\", Toast.LENGTH_SHORT).show();\n\t\t\tcursor.close();\n\t\t\tfinish();\n\t\t\treturn;  // <--- Early return ---\n\t\t}\n\n\t\t// Bind WP count, TP count, Note count, start date, etc.\n\t\t// Fill name-field only if empty (in case changed by user/restored by onRestoreInstanceState) \n\t\tTrack t = Track.build(trackId, cursor, cr, true);\n\n\t\tbindTrack(t);\t\t\n\t\t\n\t\tString from[] = new String[]{ITEM_KEY, ITEM_VALUE};\n\t\tint[] to = new int[] {R.id.trackdetail_item_key, R.id.trackdetail_item_value};\n\t\t\n\t\t// Waypoint count\n\t\tfinal int wpCount = t.getWpCount();\n\t\ttrackHasWaypoints = (wpCount > 0);\n\t\tList<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();\n\t\tHashMap<String, String> map = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackmgr_waypoints_count));\n\t\tmap.put(ITEM_VALUE, Integer.toString(wpCount));\n\t\tdata.add(WP_COUNT_INDEX, map);\n\t\t\n\t\t// Trackpoint count\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackmgr_trackpoints_count));\n\t\tmap.put(ITEM_VALUE, Integer.toString(t.getTpCount()));\n\t\tdata.add(map);\n\n\t\t// Notes count\n\t\tfinal int notesCount = t.getNoteCount();\n\t\ttrackHasNotes = (notesCount > 0);\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackmgr_notes_count));\n\t\tmap.put(ITEM_VALUE, Integer.toString(t.getNoteCount()));\n\t\tdata.add(map);\n\n\t\t// Start date\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_startdate));\n\t\tmap.put(ITEM_VALUE, t.getStartDateAsString());\n\t\tdata.add(map);\n\n\t\t// End date\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_enddate));\n\t\tmap.put(ITEM_VALUE, t.getEndDateAsString());\n\t\tdata.add(map);\n\n\t\t// Start point\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_startloc));\n\t\tmap.put(ITEM_VALUE, MercatorProjection.formatDegreesAsDMS(t.getStartLat(), true) + \"  \" + MercatorProjection.formatDegreesAsDMS(t.getStartLong(), false));\n\t\tdata.add(map);\n\n\t\t// End point\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_endloc));\n\t\tmap.put(ITEM_VALUE, MercatorProjection.formatDegreesAsDMS(t.getEndLat(), true) + \"  \" + MercatorProjection.formatDegreesAsDMS(t.getEndLong(), false));\n\t\tdata.add(map);\n\n\t\t// OSM Upload date\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_osm_upload_date));\n\t\tif (cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE))) {\n\t\t\tmap.put(ITEM_VALUE, getResources().getString(R.string.trackdetail_osm_upload_notyet));\n\t\t} else {\n\t\t\tmap.put(ITEM_VALUE, DateFormat.getDateTimeInstance().format(new Date(cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE)))));\n\t\t}\n\t\tdata.add(map);\n\t\t\n\t\t// Exported date. Should be the last item in order to be refreshed\n\t\t// if the user exports the track\n\t\tmap = new HashMap<String, String>();\n\t\tmap.put(ITEM_KEY, getResources().getString(R.string.trackdetail_exportdate));\n\t\tif (cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_EXPORT_DATE))) {\n\t\t\tmap.put(ITEM_VALUE, getResources().getString(R.string.trackdetail_export_notyet));\n\t\t} else {\n\t\t\tmap.put(ITEM_VALUE, (DateFormat.getDateTimeInstance().format(new Date(cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_EXPORT_DATE))))));\n\t\t}\n\t\tdata.add(map);\n\t\t\n\t\tcursor.close();\n\t\t\n\t\tTrackDetailSimpleAdapter adapter = new TrackDetailSimpleAdapter(data, from, to);\n\t\tlv.setAdapter(adapter);\n\n\t\t// Click on Waypoint count to see the track's WaypointList\n\t\tlv.setOnItemClickListener(this);\n\t}\n\n\t@Override\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\n\t\tMenuInflater inflater = getMenuInflater();\n\t\tinflater.inflate(R.menu.trackdetail_menu, menu);\n\t\treturn true;\n\t}\n\t\n\t@Override\n\tpublic boolean onOptionsItemSelected(MenuItem item) {\n\t\tIntent i;\n\t\t\n\t\tswitch(item.getItemId()) {\n\t\tcase R.id.trackdetail_menu_save:\n\t\t\tsave();\n\t\t\tfinish();\t\n\t\t\tbreak;\n\t\tcase R.id.trackdetail_menu_cancel:\n\t\t\tfinish();\n\t\t\tbreak;\n\t\tcase R.id.trackdetail_menu_display:\n\t\t\t\n\t\t\tboolean useOpenStreetMapBackground = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_DISPLAYTRACK_OSM, OSMTracker.Preferences.VAL_UI_DISPLAYTRACK_OSM);\n\t\t\tif (useOpenStreetMapBackground) {\n\t\t\t\ti = new Intent(this, DisplayTrackMap.class);\n\t\t\t} else {\n\t\t\t\ti = new Intent(this, DisplayTrack.class);\n\t\t\t}\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\t\tstartActivity(i);\t\n\t\t\tbreak;\n\t\tcase R.id.trackdetail_menu_export:\n\t\t\tif (writeExternalStoragePermissionGranted()) {\n\t\t\t\texportTrack();\n\t\t\t}\n\t\t\tbreak;\n\t\tcase R.id.trackdetail_menu_osm_upload:\n\t\t\ti = new Intent(this, OpenStreetMapUpload.class);\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\t\tstartActivity(i);\n\t\t\tbreak;\n\t\t}\n\t\treturn super.onOptionsItemSelected(item);\n\t}\n\n\t/**\n\t * Checks if the external storage write permission is granted.\n\t * If not, it requests the permission and may display a rationale dialog explaining why it is needed.\n\t *\n\t * <p>For devices running Android R (API level 30) and above, this permission is not required,\n\t * so the method will return {@code true} immediately.</p>\n\t *\n\t * @return {@code true} if the write permission is already granted or not required (Android R+),\n\t *         {@code false} otherwise.\n\t */\n\tprivate boolean writeExternalStoragePermissionGranted() {\n\t\tif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (ContextCompat.checkSelfPermission(this,\n\t\t\t\t\t\tManifest.permission.WRITE_EXTERNAL_STORAGE)  != PackageManager.PERMISSION_GRANTED) {\n\t\t\t// Should we show an explanation?\n\t\t\tif (ActivityCompat.shouldShowRequestPermissionRationale(this,\n\t\t\t\t\t\t\tManifest.permission.WRITE_EXTERNAL_STORAGE)) {\n\t\t\t\t// Show an expanation to the user *asynchronously* -- don't block\n\t\t\t\t// this thread waiting for the user's response! After the user\n\t\t\t\t// sees the explanation, try again to request the permission.\n\t\t\t\tnew AlertDialog.Builder(this)\n\t\t\t\t\t\t\t\t.setTitle(R.string.permission_required)\n\t\t\t\t\t\t\t\t.setMessage(R.string.storage_permission_for_export_GPX)\n\t\t\t\t\t\t\t\t.setPositiveButton(R.string.acccept, (dialog, which) -> {\n\t\t\t\t\t\t\t\t\t// Request the permission again\n\t\t\t\t\t\t\t\t\tActivityCompat.requestPermissions(this,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\n\t\t\t\t\t\t\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.setNegativeButton(R.string.menu_cancel, (dialog, which) -> dialog.dismiss())\n\t\t\t\t\t\t\t\t.show();\n\t\t\t} else {\n\t\t\t\t// No explanation needed, we can request the permission.\n\t\t\t\tActivityCompat.requestPermissions(this,\n\t\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\n\t\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS);\n\t\t\t}\n\t\t}\n\n\t\treturn ContextCompat.checkSelfPermission(this,\n\t\t\t\t\t\tManifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;\n\t}\n\n\n\t/**\n\t * Invoke the export track task after external write permissions request.\n\t *\n\t */\n\tprivate void exportTrack(){\n\t\tnew ExportToStorageTask(this, trackId).execute();\n\t\t// Pick last list item (Exported date) and update it\n\t\tSimpleAdapter adapter = ((SimpleAdapter) lv.getAdapter());\n\t\t@SuppressWarnings(\"unchecked\")\n\t\tMap<String, String> data = (Map<String, String>) adapter.getItem(adapter.getCount() - 1);\n\t\tdata.put(ITEM_VALUE, DateFormat.getDateTimeInstance().format(new Date(System.currentTimeMillis())));\n\t\tadapter.notifyDataSetChanged();\n\t}\n\n\tpublic void onRequestPermissionsResult(int requestCode,\n\t\t\t\t\t\t\t\t\t\t   String permissions[], int[] grantResults) {\n\t\tswitch (requestCode) {\n\t\t\tcase RC_WRITE_PERMISSIONS: {\n\t\t\t\t// If request is cancelled, the result arrays are empty.\n\t\t\t\tif (grantResults.length > 0\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n\n\t\t\t\t\t// permission was granted, yay!\n\t\t\t\t\texportTrack();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// permission denied, boo! Disable the\n\t\t\t\t\t// functionality that depends on this permission.\n\t\t\t\t\t//TODO: add an informative message.\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Handle clicks on list items; for Waypoint count and note count, show this track's list of\n\t * waypoints ({@link WaypointList}) or notes ({@link NoteList}).\n\t * Ignore all other clicks.\n\t * @param position  Item number in the list; this method assumes Waypoint count is position 0 (first item).\n\t */\n\tpublic void onItemClick(AdapterView<?> parent, View view, final int position, final long rowid) {\n\t\t// Get the Map associated with the clicked row\n\t\tMap<String, String> clickedItem;\n\t\tclickedItem = (Map<String, String>) parent.getItemAtPosition(position);\n\n\t\tif (clickedItem != null) {\n\t\t\tString key = clickedItem.get(ITEM_KEY);\n\n\t\t\t// You can now logic based on the text if positions are dynamic\n\t\t\tif (getString(R.string.trackmgr_waypoints_count).equals(key)) {\n\t\t\t\tIntent i = new Intent(this, WaypointList.class);\n\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\t\t\tstartActivity(i);\n\t\t\t} else if (getString(R.string.trackmgr_notes_count).equals(key)) {\n\t\t\t\tIntent i = new Intent(this, NoteList.class);\n\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\t\t\tstartActivity(i);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Extend SimpleAdapter so we can underline the clickable Waypoint and Note count.\n\t * Always uses <tt>R.layout.trackdetail_item</tt> as its list item resource.\n\t */\n\tprivate class TrackDetailSimpleAdapter extends SimpleAdapter\n\t{\n\t\tpublic TrackDetailSimpleAdapter\n\t\t\t(List<? extends Map<String, ?>> data, String[] from, int[] to)\n\t\t{\n\t\t\tsuper(TrackDetail.this, data, R.layout.trackdetail_item, from, to);\n\t\t}\n\n\t\t/**\n\t\t * Get the layout for this list item. (<tt>trackdetail_item.xml</tt>)\n\t\t * @param position  Item number in the list\n\t\t */\n\t\tpublic View getView(final int position, View convertView, ViewGroup parent) {\n\t\t\tView v = super.getView(position, convertView, parent);\n\t\t\tif (! (v instanceof ViewGroup))\n\t\t\t\treturn v;  // should not happen; v is trackdetail_item, a LinearLayout\n\n\t\t\t// Get the data for the current row\n\t\t\tMap<String, String> item = (Map<String, String>) getItem(position);\n\t\t\tString key = item.get(ITEM_KEY);\n\t\t\tboolean wantsUnderline = false;\n\n\t\t\t// Check the key to decide if we should underline\n\t\t\tif (getString(R.string.trackmgr_waypoints_count).equals(key) && trackHasWaypoints) {\n\t\t\t\twantsUnderline = trackHasWaypoints;\n\t\t\t} else if (getString(R.string.trackmgr_notes_count).equals(key) && trackHasNotes) {\n\t\t\t\twantsUnderline = trackHasNotes;\n\t\t\t}\n\n\n\t\t\tView vi = ((ViewGroup) v).findViewById(R.id.trackdetail_item_key);\n\t\t\tif ((vi != null) && (vi instanceof TextView)) {\n\t\t\t\tTextView tv = (TextView) vi;\n\t\t\t\tfinal int flags = tv.getPaintFlags();\n\t\t\t\tif (wantsUnderline)\n\t\t\t\t\ttv.setPaintFlags(flags | Paint.UNDERLINE_TEXT_FLAG);\n\t\t\t\telse\n\t\t\t\t\ttv.setPaintFlags(flags & ~Paint.UNDERLINE_TEXT_FLAG);\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\n\t}  // inner class TrackDetailSimpleAdapter\n\n}  // public class TrackDetail\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/TrackDetailEditor.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.Activity;\nimport android.content.ContentUris;\nimport android.content.ContentValues;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.widget.ArrayAdapter;\nimport android.widget.EditText;\nimport android.widget.Spinner;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.db.model.Track;\n\nimport java.util.Date;\n\n/**\n * Base class for activities that edit track details.\n *\n */\npublic abstract class TrackDetailEditor extends Activity {\n\n\t/** Current track ID */\n\tprotected long trackId;\n\n\t/** Edit text for the track name */\n\tprotected EditText etName;\n\n\t/** Edit text for track description */\n\tprotected EditText etDescription;\n\n\t/** Edit text for track tags */\n\tprotected EditText etTags;\n\n\t/** Spinner for track visibility */\n\tprotected Spinner spVisibility;\n\t\n\t/** Whereas to verify if mandatory fields are filled or not */\n\tprotected boolean fieldsMandatory = false;\n\t\n\tprotected void onCreate(Bundle savedInstanceState, int viewResId, long trackId) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\t\n\t\tthis.trackId = trackId;\n\t\t\n\t\tsetContentView(viewResId);\n\t\tsetTitle(getTitle() + \": #\" + trackId);\n\t\t\n\t\tetName = (EditText) findViewById(R.id.trackdetail_item_name);\n\t\tetDescription = (EditText) findViewById(R.id.trackdetail_item_description);\n\t\tetTags = (EditText) findViewById(R.id.trackdetail_item_tags);\n\t\tspVisibility = (Spinner) findViewById(R.id.trackdetail_item_osm_visibility);\n\n\t\tArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,\n\t\t\t\tandroid.R.layout.simple_spinner_item);\n\t\tfor (Track.OSMVisibility v: Track.OSMVisibility.values()) {\n\t\t\tadapter.add(getResources().getString(v.resId));\n\t\t}\n\t\tadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n\t\tspVisibility.setAdapter(adapter);\n\n\t}\n\t\n\tprotected void bindTrack(Track t) {\n\t\tif (etName.length() == 0) {\n\t\t\tetName.setText(t.getDisplayName());\n\t\t}\n\n\t\tetDescription.setText(t.getDescription());\n\t\tetTags.setText(t.getCommaSeparatedTags());\n\t\tspVisibility.setSelection(t.getVisibility().position);\n\t}\n\n\t/**\n\t * Saves the new information in database\n\t * @return false if the save didn't take place, true otherwise.\n\t */\n\tprotected boolean save() {\n\t\t// Save changes to db (if any), then finish.\n\t\tetDescription.setError(null);\n\t\tif (fieldsMandatory) {\n\t\t\tif (etDescription.getText().length() < 1) {\n\t\t\t\tetDescription.setError(getResources().getString(R.string.trackdetail_description_mandatory));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tContentValues values = new ContentValues();\n\n\t\tCursor cursor = getContentResolver().query(trackUri, null, null,\n\t\t\t\tnull, null);\n\n\t\tlong startDateLong = 0;\n\t\tString tname = \"\";\n\t\tif (cursor != null && cursor.moveToFirst()) {\n\t\t\tstartDateLong = cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_START_DATE));\n\t\t\ttname = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\t\tcursor.close();\n\t\t}\n\n\t\t// Saved track startDate\n\t\tDate startDate = new Date(startDateLong);\n\n\t\t// Save name field, if changed, to db.\n\t\t// String class required for equals to work, and for trim().\n\t\tString nameToSave = etName.getText().toString().trim();\n\t\tif(nameToSave.length() == 0)\n\t\t\tnameToSave = DataHelper.FILENAME_FORMATTER.format(startDate); // Set default track name\n        values.put(TrackContentProvider.Schema.COL_NAME, nameToSave);\n\n\t\t// All other values updated even if empty\n\t\tvalues.put(TrackContentProvider.Schema.COL_DESCRIPTION, etDescription.getText().toString().trim());\n\t\tvalues.put(TrackContentProvider.Schema.COL_TAGS, etTags.getText().toString().trim());\n\t\tvalues.put(TrackContentProvider.Schema.COL_OSM_VISIBILITY, Track.OSMVisibility.fromPosition(spVisibility.getSelectedItemPosition()).toString());\n\t\t\n\t\tgetContentResolver().update(trackUri, values, null, null);\t\n\n\t\t// All done\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/TrackListRVAdapter.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.view.ContextMenu;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.TracklistAdapter;\n\npublic class TrackListRVAdapter extends RecyclerView.Adapter<TrackListRVAdapter.TrackItemVH> {\n\n    private static final String TAG = TrackListRVAdapter.class.getSimpleName();\n\n    private final TracklistAdapter cursorAdapter;\n    private final Context context;\n\n    private final TrackListRecyclerViewAdapterListener mHandler;\n\n    public TrackListRVAdapter(Context context, Cursor cursor,\n                              TrackListRecyclerViewAdapterListener handler) {\n        this.context = context;\n        this.cursorAdapter = new TracklistAdapter(context, cursor);\n        this.mHandler = handler;\n    }\n\n    public TracklistAdapter getCursorAdapter() {\n        return cursorAdapter;\n    }\n\n    public interface TrackListRecyclerViewAdapterListener {\n        void onClick(long trackId);\n\n        void onCreateContextMenu(ContextMenu contextMenu, View view,\n                                 ContextMenu.ContextMenuInfo contextMenuInfo, long trackId);\n    }\n\n    /**\n     * Provide a reference to the type of views\n     */\n    public class TrackItemVH extends RecyclerView.ViewHolder\n            implements View.OnClickListener, View.OnCreateContextMenuListener{\n\n        private final TextView vId;\n        private final TextView vNameOrStartDate;\n        private final TextView vWps;\n        private final TextView vTps;\n\t\tprivate final TextView vNotesCount;\n        private final ImageView vStatus;\n        private final ImageView vUploadStatus;\n\n        public TrackItemVH(View view) {\n            super(view);\n\n            vId = (TextView) view.findViewById(R.id.trackmgr_item_id);\n            vNameOrStartDate = (TextView) view.findViewById(R.id.trackmgr_item_nameordate);\n            vWps = (TextView) view.findViewById(R.id.trackmgr_item_wps);\n            vTps = (TextView) view.findViewById(R.id.trackmgr_item_tps);\n\t\t\tvNotesCount = view.findViewById(R.id.trackmgr_item_notes_count);\n            vStatus = (ImageView) view.findViewById(R.id.trackmgr_item_statusicon);\n            vUploadStatus = (ImageView) view.findViewById(R.id.trackmgr_item_upload_statusicon);\n\n            // listeners\n            view.setOnClickListener(this);\n            view.setOnCreateContextMenuListener(this);\n        }\n\n        public TextView getvId() {\n            return vId;\n        }\n\n        public TextView getvNameOrStartDate() {\n            return vNameOrStartDate;\n        }\n\n        public TextView getvWps() {\n            return vWps;\n        }\n\n        public TextView getvTps() {\n            return vTps;\n        }\n\n        public ImageView getvStatus() {\n            return vStatus;\n        }\n\n        public ImageView getvUploadStatus() {\n            return vUploadStatus;\n        }\n\n        /**\n         * This gets called by the child views during a click.\n         *\n         * @param v The View that was clicked\n         */\n        @Override\n        public void onClick(View v) {\n            long trackId = Long.parseLong(getvId().getText().toString());\n            mHandler.onClick(trackId);\n        }\n\n        @Override\n        public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {\n            long trackId = Long.parseLong(getvId().getText().toString());\n            mHandler.onCreateContextMenu(contextMenu, view, contextMenuInfo, trackId);\n        }\n    }\n\n\n    @NonNull\n    @Override\n    public TrackItemVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n        return new TrackItemVH(LayoutInflater.from(parent.getContext())\n                .inflate(R.layout.tracklist_item,\n                        parent, false));\n    }\n\n    // Create new views (invoked by the layout manager)\n    @Override\n    public void onBindViewHolder(@NonNull TrackItemVH holder, int position) {\n        // Get element from database at this position and replace the\n        // contents of the view with that element\n\n        // Passing the binding operation to cursor loader\n        cursorAdapter.getCursor().moveToPosition(position);\n        cursorAdapter.bindView(holder.itemView, context, cursorAdapter.getCursor());\n    }\n\n    @Override\n    public int getItemCount() {\n        return cursorAdapter.getCount();\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/TrackLogger.java",
    "content": "package net.osmtracker.activity;\n\nimport android.Manifest;\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.Dialog;\nimport android.content.ComponentName;\nimport android.content.ContentUris;\nimport android.content.ContentValues;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.content.ServiceConnection;\nimport android.content.SharedPreferences;\nimport android.content.pm.ActivityInfo;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\nimport android.location.LocationManager;\nimport android.media.AudioManager;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.StrictMode;\nimport android.provider.MediaStore;\nimport android.provider.Settings;\nimport android.util.Log;\nimport android.view.KeyEvent;\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Toast;\n\nimport androidx.annotation.NonNull;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.core.content.FileProvider;\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.layout.GpsStatusRecord;\nimport net.osmtracker.layout.UserDefinedLayout;\nimport net.osmtracker.listener.PressureListener;\nimport net.osmtracker.listener.SensorListener;\nimport net.osmtracker.receiver.MediaButtonReceiver;\nimport net.osmtracker.service.gps.GPSLogger;\nimport net.osmtracker.service.gps.GPSLoggerServiceConnection;\nimport net.osmtracker.util.CustomLayoutsUtils;\nimport net.osmtracker.util.FileSystemUtils;\nimport net.osmtracker.util.ThemeValidator;\nimport net.osmtracker.view.TextNoteDialog;\nimport net.osmtracker.view.VoiceRecDialog;\n\nimport java.io.File;\nimport java.util.Date;\nimport java.util.HashSet;\nimport java.util.UUID;\n\n\n/**\n * Main track logger activity. Communicate with the GPS service to display GPS\n * status, and allow user to record waypoints.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class TrackLogger extends Activity {\n\n\tprivate static final String TAG = TrackLogger.class.getSimpleName();\n\n\tfinal private int RC_STORAGE_AUDIO_PERMISSIONS = 1;\n\n\t/**\n\t * Request code for callback after the camera application had taken a\n\t * picture for us.\n\t */\n\tprivate static final int REQCODE_IMAGE_CAPTURE = 0;\n\t\n\t/**\n\t * Request code for callback after the gallery was chosen by the user.\n\t */\n\tprivate static final int REQCODE_GALLERY_CHOSEN = 1;\n\n\t/**\n\t * Bundle state key for tracking flag.\n\t */\n\tpublic static final String STATE_IS_TRACKING = \"isTracking\";\n\n    /**\n     * The character to separate the tags of a track\n     */\n\tpublic static final String TAG_SEPARATOR = \",\";\n\t\n\t/**\n\t * Bundle state key button state.\n\t */\n\tpublic static final String STATE_BUTTONS_ENABLED = \"buttonsEnabled\";\n\n\t/**\n\t * GPS Logger service, to receive events and be able to update UI.\n\t */\n\tprivate GPSLogger gpsLogger;\n\n\t/**\n\t * GPS Logger service intent, to be used in start/stopService();\n\t */\n\tprivate Intent gpsLoggerServiceIntent;\n\n\t/**\n\t * Main button layout\n\t */\n\tprivate UserDefinedLayout mainLayout;\n\n\t/**\n\t * Flag to check GPS status at startup. Is cleared after the first\n\t * displaying of GPS status dialog, to prevent the dialog to display if user\n\t * goes to settings/about/other screen.\n\t */\n\tprivate boolean checkGPSFlag = true;\n\n\t/**\n\t * Keeps track of the image file when taking a picture.\n\t */\n\tprivate File currentPhotoFile;\n\t\n\t/**\n\t * Keeps track of the current track id.\n\t */\n\tprivate long currentTrackId;\n\n\t/**\n\t * Handles the bind to the GPS Logger service\n\t */\n\tprivate ServiceConnection gpsLoggerConnection = new GPSLoggerServiceConnection(this);\n\t\n\t/**\n\t * Keeps the SharedPreferences\n\t */\n\tprivate SharedPreferences prefs = null;\n\t\n\t/**\n\t * keeps track of current button status\n\t */\n\tprivate boolean buttonsEnabled = false;\n\t\n\t/**\n\t * constant for text note dialog\n\t */\n\tpublic static final int DIALOG_TEXT_NOTE = 1;\n\t\n\t/**\n\t * constant for voice recording dialog\n\t */\n\tpublic static final int DIALOG_VOICE_RECORDING = 2;\n\t\n\t/**\n\t * sensor listener for the azimuth display\n\t */\n\tprivate SensorListener sensorListener;\n\n\t/**\n\t * sensor listener for atmospheric pressure\n\t */\n\tprivate PressureListener pressureListener;\n\n\tprivate AudioManager mAudioManager;\n\n\tprivate ComponentName mediaButtonReceiver;\n\n\n\t/*\n\t *  Avoid taking care of duplicated elements\n\t */\n\tprivate HashSet<String> layoutNameTags = new HashSet<String>();\n\n\tpublic boolean getButtonsEnabled() {\n\t\treturn buttonsEnabled;\n\t}\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\n\t\t// Get the track id to work with\n\t\tcurrentTrackId = getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\tLog.v(TAG, \"Starting for track id \" + currentTrackId);\n\n\t\t//save the initial layout file name in tags array\n\t\tString layoutName = CustomLayoutsUtils.getCurrentLayoutName(getApplicationContext());\n\t\tlayoutNameTags.add(layoutName);\n\n\t\tgpsLoggerServiceIntent = new Intent(this, GPSLogger.class);\n\t\tgpsLoggerServiceIntent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\n\t\t// Populate default preference values\n\t\tPreferenceManager.setDefaultValues(this, R.xml.preferences, false);\n\n\t\t// get shared preferences\n\t\tprefs = PreferenceManager.getDefaultSharedPreferences(this);\n\t\t\n\t\t// Set application theme according to user settings\n\t\tsetTheme(getResources().getIdentifier(ThemeValidator.getValidTheme(prefs, getResources()), null, null));\n\n\t\tsuper.onCreate(savedInstanceState);\n\t\t\n\t\tsetContentView(R.layout.tracklogger);\n\t\t\n\t\t// set trackLogger to keepScreenOn depending on the user's preference\n\t\tView trackLoggerView = findViewById(R.id.tracklogger_root);\n\t\ttrackLoggerView.setKeepScreenOn(prefs.getBoolean(OSMTracker.Preferences.KEY_UI_DISPLAY_KEEP_ON, OSMTracker.Preferences.VAL_UI_DISPLAY_KEEP_ON));\n\n\t\t// we'll restore previous button state, GPSStatusRecord will enable all buttons, as soon as there's a gps fix\n\t\tif(savedInstanceState != null){\n\t\t\tbuttonsEnabled = savedInstanceState.getBoolean(STATE_BUTTONS_ENABLED, false);\n\t\t}\n\t\t\n\t\t// create sensor listener\n\t\tsensorListener = new SensorListener();\n\n\t\t// create pressure listener\n\t\tpressureListener = new PressureListener();\n\t\t\n\t\tmAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);\n\t\tmediaButtonReceiver = new ComponentName(this, MediaButtonReceiver.class.getName());\n\t}\n\n\t/**\n\t * It takes the string array layoutNameTags and convert each position in the array, then, create a string with all the tags separated with a comma.\n\t * Also, the default layout is excluded and the 'osmtracker' tag is added by default.\n\t */\n\tprivate void saveTagsForTrack(){\n\t\t// Obtain the current track id and initialize the values variable\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, currentTrackId);\n\t\tContentValues values = new ContentValues();\n\n\t\t// A set with all tags to save\n\t\tHashSet<String> tagsToSave = new HashSet<>();\n\n\t\t// Get and add previously saved tags to the set\n\t\tCursor cursor = getContentResolver().query( trackUri, null, null, null, null);\n\t\tint tagsIndex = cursor.getColumnIndex(TrackContentProvider.Schema.COL_TAGS);\n\t\tString previouslySavedTags = null;\n\t\twhile (cursor.moveToNext()) {\n\t\t\tif(cursor.getString(tagsIndex) != null) {\n\t\t\t\tpreviouslySavedTags = cursor.getString(tagsIndex);\n\t\t\t}\n\t\t}\n\t\tif(previouslySavedTags != null){\n\t\t\tfor (String tag : previouslySavedTags.split(TAG_SEPARATOR)){\n\t\t\t\ttagsToSave.add(tag);\n\t\t\t}\n\t\t}\n\n\n\t\t// Add the names of the layouts that were used in the track to the set\n\t\tfor(String layoutFileName : layoutNameTags){\n\t\t\t//OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT -> 'default'\n\t\t\tif(! layoutFileName.equals(OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT)){\n\t\t\t\t// Covert the file name to simple layout name\n\t\t\t\ttagsToSave.add(CustomLayoutsUtils.convertFileName(layoutFileName));\n\t\t\t}\n\t\t}\n\n\t\t// Check if the osmtracker tag has already been added\n\t\tString trackerTag = \"osmtracker\";\n\t\ttagsToSave.add(trackerTag);\n\n\t\t// Create the string with all tags\n\t\tStringBuilder tagsString = new StringBuilder();\n\n\t\tfor(String tag : tagsToSave){\n\t\t\ttagsString.append(tag).append(TAG_SEPARATOR);\n\t\t}\n\t\tint lastIndex = tagsString.length()-1;\n\t\ttagsString.deleteCharAt(lastIndex);\n\n\t\t//set the values tag and update the table\n\t\tvalues.put(TrackContentProvider.Schema.COL_TAGS, tagsString.toString());\n\t\tgetContentResolver().update(trackUri, values, null, null);\n\t}\n\n\n\t@Override\n\tprotected void onResume() {\n\n\t\tsetTitle(getResources().getString(R.string.tracklogger) + \": #\" + currentTrackId);\n\t\t\n\t\t// set trackLogger to  keepScreenOn depending on the user's preference\n\t\tView trackLoggerView = findViewById(R.id.tracklogger_root);\n\t\ttrackLoggerView.setKeepScreenOn(prefs.getBoolean(OSMTracker.Preferences.KEY_UI_DISPLAY_KEEP_ON, OSMTracker.Preferences.VAL_UI_DISPLAY_KEEP_ON));\n\t\n\t\t// Fix to the user's preferred orientation (if any)  \n\t\tString preferredOrientation = prefs.getString(OSMTracker.Preferences.KEY_UI_ORIENTATION, \n\t\t\t\tOSMTracker.Preferences.VAL_UI_ORIENTATION);\n\t\tif (preferredOrientation.equals(OSMTracker.Preferences.VAL_UI_ORIENTATION_PORTRAIT)) {\n\t\t\tthis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n\t\t} else if (preferredOrientation.equals(OSMTracker.Preferences.VAL_UI_ORIENTATION_LANDSCAPE)) {\n\t\t\tthis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);\n\t\t} else {\n\t\t\tthis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);\n\t\t}\n\t\t\n\t\t// Try to inflate the buttons layout\n\t\ttry {\n\t\t\tString userLayout = prefs.getString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT, OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT);\n\t\t\tif (OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT.equals(userLayout)) {\n\t\t\t\t// Using default buttons layout\n\t\t\t\tmainLayout = new UserDefinedLayout(this, currentTrackId, null);\n\t\t\t} else {\n\t\t\t\t// Using user buttons layout\n\t\t\t\tFile layoutFile = new File(\n\t\t\t\t\t\tthis.getExternalFilesDir(null),\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_STORAGE_DIR\n\t\t\t\t\t\t+ File.separator + DataHelper.LAYOUTS_SUBDIR\n\t\t\t\t\t\t+ File.separator + userLayout);\n\t\t\t\tmainLayout = new UserDefinedLayout(this, currentTrackId, layoutFile);\n\t\t\t}\n\t\t\t\n\t\t\t((ViewGroup) findViewById(R.id.tracklogger_root)).removeAllViews();\n\t\t\t((ViewGroup) findViewById(R.id.tracklogger_root)).addView(mainLayout);\n\t\t\t\n\t\t} catch (Exception e) {\n\t\t\tLog.e(TAG, \"Error while inflating UserDefinedLayout\", e);\n\t\t\tToast.makeText(this, R.string.error_userlayout_parsing, Toast.LENGTH_SHORT).show();\n\t\t}\n\t\t\n\t\t// Check GPS status\n\t\tif (checkGPSFlag\n\t\t\t\t&& prefs.getBoolean(OSMTracker.Preferences.KEY_GPS_CHECKSTARTUP,\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_GPS_CHECKSTARTUP)) {\n\t\t\tcheckGPSProvider();\n\t\t}\n\n\t\t// Register GPS status update for upper controls\n\t\t((GpsStatusRecord) findViewById(R.id.gpsStatus)).requestLocationUpdates(true);\n\n\t\t// Start GPS Logger service\n\t\tstartService(gpsLoggerServiceIntent);\n\n\t\t// Bind to GPS service.\n\t\t// We can't use BIND_AUTO_CREATE here, because when we'll ubound\n\t\t// later, we want to keep the service alive in background\n\t\tbindService(gpsLoggerServiceIntent, gpsLoggerConnection, 0);\n\t\t\n\t\t// connect the sensor listener\n\t\tsensorListener.register(this);\n\n\t\t// connect the pressure listener\n\t\tpressureListener.register(this, prefs.getBoolean(OSMTracker.Preferences.KEY_USE_BAROMETER,OSMTracker.Preferences.VAL_USE_BAROMETER));\n\n\t\tsetEnabledActionButtons(buttonsEnabled);\n\t\tif(!buttonsEnabled){\n\t\t\tToast.makeText(this, R.string.tracklogger_waiting_gps, Toast.LENGTH_LONG).show();\n\t\t}\n\n\t\tmAudioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);\n\n\t\t//save the layout file name if it change, in tags array\n\t\tString layoutName = CustomLayoutsUtils.getCurrentLayoutName(getApplicationContext());\n\t\tlayoutNameTags.add(layoutName);\n\n\t\tsuper.onResume();\n\t}\n\n\tprivate void checkGPSProvider() {\n\t\tLocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);\n\t\tif (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {\n\t\t\t// GPS isn't enabled. Offer user to go enable it\n\t\t\tnew AlertDialog.Builder(this)\n\t\t\t\t\t.setTitle(R.string.tracklogger_gps_disabled)\n\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\n\t\t\t\t\t.setMessage(getResources().getString(R.string.tracklogger_gps_disabled_hint))\n\t\t\t\t\t.setCancelable(true).setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t@Override\n\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\tstartActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));\n\t\t\t\t\t\t}\n\t\t\t\t\t}).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t@Override\n\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\tdialog.cancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t}).create().show();\n\t\t\tcheckGPSFlag = false;\n\t\t}\n\t}\n\n\t@Override\n\tprotected void onPause() {\n\t\t\n\t\t// Un-register GPS status update for upper controls\n\t\t((GpsStatusRecord) findViewById(R.id.gpsStatus)).requestLocationUpdates(false);\n\n\t\tif (gpsLogger != null) {\n\t\t\tif (!gpsLogger.isTracking()) {\n\t\t\t\tLog.v(TAG, \"Service is not tracking, trying to stopService()\");\n\t\t\t\tunbindService(gpsLoggerConnection);\n\t\t\t\tstopService(gpsLoggerServiceIntent);\n\t\t\t} else {\n\t\t\t\tunbindService(gpsLoggerConnection);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (sensorListener!=null) {\n\t\t\tsensorListener.unregister();\n\t\t}\n\n\t\tif (pressureListener != null) {\n\t\t\tpressureListener.unregister();\n\t\t}\n\n\t\tmAudioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiver);\n\n\t\tsuper.onPause();\n\t}\n\n\t@Override\n\tprotected void onSaveInstanceState(Bundle outState) {\n\t\t// Save the fact that we are currently tracking or not\n\t\tif(gpsLogger != null){\n\t\t\toutState.putBoolean(STATE_IS_TRACKING, gpsLogger.isTracking());\n\t\t}\n\t\toutState.putBoolean(STATE_BUTTONS_ENABLED, buttonsEnabled);\n\n\t\tsuper.onSaveInstanceState(outState);\n\t}\n\n\t/**\n\t * Called when GPS is disabled\n\t */\n\tpublic void onGpsDisabled() {\n\t\t// GPS disabled. Grey all.\n\t\tsetEnabledActionButtons(false);\n\t}\n\n\t/**\n\t * Called when GPS is enabled\n\t */\n\tpublic void onGpsEnabled() {\n\t\t// Buttons can be enabled\n\t\tif (gpsLogger != null && gpsLogger.isTracking()) {\n\t\t\tsetEnabledActionButtons(true);\n\t\t}\n\t}\n\n\t/**\n\t * Enable buttons associated to tracking\n\t * \n\t * @param enabled true to enable, false to disable\n\t */\n\tpublic void setEnabledActionButtons(boolean enabled) {\n\t\tif (mainLayout != null) {\n\t\t\tbuttonsEnabled = enabled;\n\t\t\tmainLayout.setEnabled(enabled);\n\t\t}\n\t}\n\n\t// Create options menu\n\t@Override\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\n\t\tMenuInflater inflater = getMenuInflater();\n\t\tinflater.inflate(R.menu.tracklogger_menu, menu);\n\t\treturn true;\n\t}\n\n\t// Manage options menu selections\n\t@Override\n\tpublic boolean onOptionsItemSelected(MenuItem item) {\n\t\tIntent i;\n\t\tswitch (item.getItemId()) {\n\t\tcase R.id.tracklogger_menu_stoptracking:\n\t\t\t// Start / Stop tracking\t\n\t\t\tif (gpsLogger.isTracking()) {\n\t\t\t\tsaveTagsForTrack();\n\n\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_STOP_TRACKING);\n\t\t\t\tintent.setPackage(getPackageName());\n\t\t\t\tsendBroadcast(intent);\n\t\t\t\t((GpsStatusRecord) findViewById(R.id.gpsStatus)).manageRecordingIndicator(false);\n\t\t\t\tfinish();\n\t\t\t}\t\t\n\t\t\tbreak;\n\t\tcase R.id.tracklogger_menu_settings:\n\t\t\t// Start settings activity\n\t\t\tstartActivity(new Intent(this, Preferences.class));\n\t\t\tbreak;\n\t\tcase R.id.tracklogger_menu_waypointlist:\n\t\t\t// Start Waypoint list activity\n\t\t\ti = new Intent(this, WaypointList.class);\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\t\t\tstartActivity(i);\n\t\t\tbreak;\n\t\tcase R.id.tracklogger_menu_about:\n\t\t\t// Start About activity\n\t\t\tstartActivity(new Intent(this, About.class));\n\t\t\tbreak;\n\t\tcase R.id.tracklogger_menu_displaytrack:\n\t\t\t// Start display track activity, with or without OSM background\n\t\t\tboolean useOpenStreetMapBackground = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(\n\t\t\t\t\tOSMTracker.Preferences.KEY_UI_DISPLAYTRACK_OSM, OSMTracker.Preferences.VAL_UI_DISPLAYTRACK_OSM);\n\t\t\tif (useOpenStreetMapBackground) {\n\t\t\t\ti = new Intent(this, DisplayTrackMap.class);\n\t\t\t} else {\n\t\t\t\ti = new Intent(this, DisplayTrack.class);\n\t\t\t}\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\t\t\tstartActivity(i);\n\t\t\tbreak;\n\t\t}\n\t\treturn super.onOptionsItemSelected(item);\n\t}\n\t\n\t@Override\n\tpublic boolean onKeyDown(int keyCode, KeyEvent event) {\n\t\tswitch (keyCode) {\n\t\tcase KeyEvent.KEYCODE_BACK:\n\t\t\t// Manage back button if we are on a sub-page\n\t\t\tif (event.getRepeatCount() == 0) {\n\t\t\t\tif (mainLayout != null && mainLayout.getStackSize() > 1) {\n\t\t\t\t\tmainLayout.pop();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase KeyEvent.KEYCODE_CAMERA:\n\t\t\tLog.d(TAG, \"click on camera button\");\n\t\t\tif (gpsLogger.isTracking()) {\n\t\t\t\trequestStillImage();\n\t\t\t}\n\t\t\tbreak;\n\t\tcase KeyEvent.KEYCODE_DPAD_CENTER:\n\t\t\t// API Level 3 doesn't support long presses, so we need to do this manually\n\t\t\tif((gpsLogger != null && gpsLogger.isTracking()) && (event.getEventTime() - event.getDownTime()) > OSMTracker.LONG_PRESS_TIME){\n\t\t\t\t// new long press of dpad center detected, start voice recording dialog\n\t\t\t\tthis.showDialog(DIALOG_VOICE_RECORDING);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase KeyEvent.KEYCODE_HEADSETHOOK:\n\t\t\tif (gpsLogger != null && gpsLogger.isTracking()){\n\t\t\t\tthis.showDialog(DIALOG_VOICE_RECORDING);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn super.onKeyDown(keyCode, event);\n\t}\n\n\t/**\n\t * Request a still picture from the camera application, saving the file in\n\t * the current track directory\n\t */\n\tpublic void requestStillImage() {\n\t\tif (gpsLogger.isTracking()) {\n\t\t\tfinal String pictureSource = prefs.getString(OSMTracker.Preferences.KEY_UI_PICTURE_SOURCE,\n\t\t\t\t\tOSMTracker.Preferences.VAL_UI_PICTURE_SOURCE);\n\t\t\tif (OSMTracker.Preferences.VAL_UI_PICTURE_SOURCE_CAMERA.equals(pictureSource)) {\n\t\t\t\tstartCamera();\n\t\t\t} else if (OSMTracker.Preferences.VAL_UI_PICTURE_SOURCE_GALLERY.equals(pictureSource)) {\n\t\t\t\tstartGallery();\n\t\t\t} else {\n\t\t\t\t// Let the user choose between using the camera\n\t\t\t\t// or selecting a picture from the gallery\n\n\t\t\t\tAlertDialog.Builder getImageFrom = new AlertDialog.Builder(TrackLogger.this);\n\t\t\t\tgetImageFrom.setTitle(\"Select:\");\n\t\t\t\tfinal CharSequence[] opsChars = { getString(R.string.tracklogger_camera), getString(R.string.tracklogger_gallery) };\n\t\t\t\tgetImageFrom.setItems(opsChars, new android.content.DialogInterface.OnClickListener() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\tif (which == 0) {\n\t\t\t\t\t\t\tstartCamera();\n\t\t\t\t\t\t} else if (which == 1) {\n\t\t\t\t\t\t\tstartGallery();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tgetImageFrom.show();\n\t\t\t}\n\t\t} else {\n\t\t\tToast.makeText(getBaseContext(),\n\t\t\t\t\tgetResources().getString(R.string.error_externalstorage_not_writable),\n\t\t\t\t\tToast.LENGTH_SHORT).show();\n\t\t}\n\t}\n\n\t/**\n\t * Get file path from android media URI\n\t *\n\t * @param contentUri the android media URI\n\t * @return the filepath of the file\n\t */\n\tpublic String getRealPathFromURI(Uri contentUri) {\n\t\tCursor cursor = getContentResolver().query(contentUri, null, null, null, null);\n\t\tint column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA);\n\t\tcursor.moveToFirst();\n\t\treturn cursor.getString(column_index);\n\t}\n\n\t@Override\n\tprotected void onActivityResult(int requestCode, int resultCode, Intent data) {\n\t\tLog.v(TAG, \"Activity result: \" + requestCode + \", resultCode=\" + resultCode + \", Intent=\" + data);\n\t\tswitch (requestCode) {\n\t\tcase REQCODE_IMAGE_CAPTURE:\n\t\t\tif (resultCode == RESULT_OK) {\n\t\t\t\tif (currentPhotoFile != null && currentPhotoFile.exists()) {\n\t\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_TRACK_WP);\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, UUID.randomUUID().toString());\n\t\t\t\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, getResources().getString(R.string.wpt_stillimage));\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_LINK, currentPhotoFile.getName());\n\t\t\t\t\tintent.setPackage(this.getPackageName());\n\t\t\t\t\tsendBroadcast(intent);\n\t\t\t\t} else {\n\t\t\t\t\tLog.e(TAG, \"Cannot get image path from camera intent\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase REQCODE_GALLERY_CHOSEN:\n\t\t\tif (resultCode == RESULT_OK) {\n\t\t\t\t// Get imagePath from Gallery Uri\n\t\t\t\tString imagePath = getRealPathFromURI(data.getData());\n\t\t\t\tFile imageFile = new File(imagePath != null ? imagePath : \"\");\n\t\t\t\tif (imageFile.exists()) {\n\t\t\t\t\t// Copy the file from the gallery\n\t\t\t\t\tFile destFile = createImageFile();\n\t\t\t\t\tLog.d(TAG, \"Copying gallery file '\" + imagePath + \"' into '\" + destFile.getAbsolutePath() + \"'\");\n\t\t\t\t\tFileSystemUtils.copyFile(destFile.getParentFile(), new File(imagePath), destFile.getName());\n\n\t\t\t\t\t// Send an intent to inform service to track the waypoint.\n\t\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_TRACK_WP);\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, UUID.randomUUID().toString());\n\t\t\t\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, getResources().getString(R.string.wpt_stillimage));\n\t\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_LINK, destFile.getName());\n\t\t\t\t\tintent.setPackage(this.getPackageName());\n\t\t\t\t\tsendBroadcast(intent);\n\t\t\t\t} else {\n\t\t\t\t\tLog.e(TAG, \"Cannot get image path from gallery intent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsuper.onActivityResult(requestCode, resultCode, data);\n\t}\n\n\t/**\n\t * Getter for gpsLogger\n\t * \n\t * @return Activity {@link GPSLogger}\n\t */\n\tpublic GPSLogger getGpsLogger() {\n\t\treturn gpsLogger;\n\t}\n\n\t/**\n\t * Setter for gpsLogger\n\t * \n\t * @param l\n\t *\t\t\t\t{@link GPSLogger} to set.\n\t */\n\tpublic void setGpsLogger(GPSLogger l) {\n\t\tthis.gpsLogger = l;\n\t}\n\n\t/**\n\t * Create Image file according to DataHelper format and location\n\t *\n\t * @return a File\n\t */\n\tpublic File createImageFile() {\n\t\tFile trackDir = DataHelper.getTrackDirectory(currentTrackId, this);\n\t\tif (!trackDir.exists() && !trackDir.mkdirs()) {\n\t\t\tLog.w(TAG, \"Directory [\" + trackDir.getAbsolutePath() + \"] does not exist and cannot be created\");\n\t\t\treturn null;\n\t\t}\n\t\tif (trackDir.exists() && trackDir.canWrite()) {\n\t\t\tFile imageFile = new File(trackDir, DataHelper.FILENAME_FORMATTER.format(new Date()) + DataHelper.EXTENSION_JPG);\n\t\t\tLog.d(TAG, \"New Image File: \" + imageFile);\n\t\t\treturn imageFile;\n\t\t}\n\t\tLog.w(TAG, \"The directory [\" + trackDir.getAbsolutePath() + \"] will not allow files to be created\");\n\t\treturn null;\n\t}\n\n\t@Override\n\tprotected Dialog onCreateDialog(int id) {\n\t\tswitch(id){\n\t\tcase DIALOG_TEXT_NOTE:\n\t\t\t// create a new TextNoteDialog\n\t\t\treturn new TextNoteDialog(this, currentTrackId);\n\t\tcase DIALOG_VOICE_RECORDING:\n\t\t\tif (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)\n\t\t\t\t\t!= PackageManager.PERMISSION_GRANTED) {\n\n\t\t\t\t// Should we show an explanation?\n\t\t\t\tif ( (ActivityCompat.shouldShowRequestPermissionRationale(this,\n\t\t\t\t\t\tManifest.permission.RECORD_AUDIO)) ) {\n\n\t\t\t\t\t// Show an expanation to the user *asynchronously* -- don't block\n\t\t\t\t\t// this thread waiting for the user's response! After the user\n\t\t\t\t\t// sees the explanation, try again to request the permission.\n\t\t\t\t\t// TODO: explain why we need permission.\n\t\t\t\t\tLog.w(TAG, \"we should explain why we need write and record audio permission\");\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// No explanation needed, we can request the permission.\n\t\t\t\t\tActivityCompat.requestPermissions(this,\n\t\t\t\t\t\t\tnew String[]{\n\t\t\t\t\t\t\t\t\t\t Manifest.permission.RECORD_AUDIO},\n\t\t\t\t\t\t\tRC_STORAGE_AUDIO_PERMISSIONS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\t// create a new VoiceRegDialog\n\t\t\t\treturn new VoiceRecDialog(this, currentTrackId);\n\t\t\t}\n\t\t}\n\t\treturn super.onCreateDialog(id);\n\t}\n\n\t@Override\n\tprotected void onPrepareDialog(int id, Dialog dialog) {\n\t\tswitch(id){\n\t\tcase DIALOG_TEXT_NOTE:\n\t\t\t// we need to reset Values like uuid of the dialog,\n\t\t\t// otherwise we would overwrite an existing waypoint\n\t\t\t((TextNoteDialog)dialog).resetValues();\n\t\t\tbreak;\n\t\t}\n\t\tsuper.onPrepareDialog(id, dialog);\n\t}\n\t\n\t@Override\n\tprotected void onNewIntent(Intent newIntent) {\n\t\tif (newIntent.getExtras() != null) {\n\t\t\tif (newIntent.getExtras().containsKey(TrackContentProvider.Schema.COL_TRACK_ID)) {\n\t\t\t\tcurrentTrackId = newIntent.getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\tsetIntent(newIntent);\n\t\t\t}\n\t\t\tif (newIntent.hasExtra(\"mediaButton\") && gpsLogger != null && gpsLogger.isTracking()) {\n\t\t\t\tthis.showDialog(DIALOG_VOICE_RECORDING);\n\t\t\t}\n\t\t}\n\t\tsuper.onNewIntent(newIntent);\n\t}\n\n\tpublic long getCurrentTrackId() {\n\t\treturn this.currentTrackId;\n\t}\n\t\n\t/**\n\t * Starts the camera app. to take a picture\n\t */\n\tprivate void startCamera() {\n\t\tStrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();\n\t\tStrictMode.setVmPolicy(builder.build());\n\n\t\tcurrentPhotoFile = createImageFile();\n\t\tif (currentPhotoFile == null) {\n\t\t\tLog.e(TAG, \"imageFile is NULL in startCamera\");\n\t\t\treturn;\n\t\t}\n\t\tUri imageUriContent = FileProvider.getUriForFile(this, DataHelper.FILE_PROVIDER_AUTHORITY, currentPhotoFile);\n\n\t\tIntent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\n\t\tcameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);\n\t\tcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUriContent);\n\t\tstartActivityForResult(cameraIntent, REQCODE_IMAGE_CAPTURE);\n\t}\n\t\n\t/**\n\t * Starts the gallery app. to choose a picture\n\t */\n\tprivate void startGallery() {\n        Intent galleryIntent = new Intent();\n        galleryIntent.setType(DataHelper.MIME_TYPE_IMAGE);\n        galleryIntent.setAction(Intent.ACTION_GET_CONTENT);\n\t\tstartActivityForResult(galleryIntent, REQCODE_GALLERY_CHOSEN);\n\t}\n\n\tpublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,\n\t\t\t\t\t\t\t\t\t\t   @NonNull int[] grantResults) {\n\t\tswitch (requestCode) {\n\t\t\tcase RC_STORAGE_AUDIO_PERMISSIONS: {\n\t\t\t\t// If request is cancelled, the result arrays are empty.\n\t\t\t\tif (grantResults.length > 1) {\n\t\t\t\t\t\t// TODO: fix permission management\n\t\t\t\t\t\t//&& grantResults[0] == PackageManager.PERMISSION_GRANTED\n\t\t\t\t\t\t//&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {\n\n\t\t\t\t\t// permission was granted, yay!\n\t\t\t\t\tnew VoiceRecDialog(this, currentTrackId);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// permission denied, boo! Disable the\n\t\t\t\t\t// functionality that depends on this permission.\n\t\t\t\t\t//TODO: add an informative message.\n\t\t\t\t\tLog.v(TAG, \"Voice recording permission is denied.\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/TrackManager.java",
    "content": "package net.osmtracker.activity;\r\n\r\nimport androidx.appcompat.app.AppCompatActivity;\r\nimport androidx.appcompat.widget.Toolbar;\r\nimport androidx.core.app.ActivityCompat;\r\nimport androidx.core.content.ContextCompat;\r\nimport androidx.core.content.FileProvider;\r\nimport androidx.preference.PreferenceManager;\r\nimport androidx.recyclerview.widget.DividerItemDecoration;\r\nimport androidx.recyclerview.widget.LinearLayoutManager;\r\nimport androidx.recyclerview.widget.RecyclerView;\r\n\r\nimport android.Manifest;\r\nimport android.app.AlertDialog;\r\nimport android.content.ContentUris;\r\nimport android.content.ContentValues;\r\nimport android.content.Context;\r\nimport android.content.DialogInterface;\r\nimport android.content.Intent;\r\nimport android.content.SharedPreferences;\r\nimport android.content.pm.PackageManager;\r\nimport android.database.Cursor;\r\nimport android.net.Uri;\r\nimport android.os.Build;\r\nimport android.os.Bundle;\r\nimport android.util.Base64OutputStream;\r\nimport android.util.Log;\r\nimport android.view.ContextMenu;\r\nimport android.view.Menu;\r\nimport android.view.MenuItem;\r\nimport android.view.View;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\nimport com.google.android.material.floatingactionbutton.FloatingActionButton;\r\nimport com.google.android.material.snackbar.Snackbar;\r\n\r\nimport net.osmtracker.GitHubUser;\r\nimport net.osmtracker.OSMTracker;\r\nimport net.osmtracker.R;\r\nimport net.osmtracker.db.DataHelper;\r\nimport net.osmtracker.db.TrackContentProvider;\r\nimport net.osmtracker.exception.CreateTrackException;\r\nimport net.osmtracker.gpx.ExportToStorageTask;\r\nimport net.osmtracker.gpx.ExportToTempFileTask;\r\nimport net.osmtracker.gpx.ZipHelper;\r\nimport net.osmtracker.util.FileSystemUtils;\r\n\r\nimport java.io.File;\r\nimport java.io.FileInputStream;\r\nimport java.io.FileOutputStream;\r\nimport java.io.IOException;\r\nimport java.io.InputStream;\r\nimport java.io.OutputStream;\r\nimport java.util.Date;\r\n\r\n/**\r\n * Lists existing tracks. Each track is displayed using {@link RecyclerView}\r\n *\r\n *  Original @author Nicolas Guillaumin\r\n */\r\npublic class TrackManager extends AppCompatActivity\r\n\t\timplements TrackListRVAdapter.TrackListRecyclerViewAdapterListener {\r\n\r\n\tprivate static final String TAG = TrackManager.class.getSimpleName();;\r\n\r\n\tfinal private int RC_WRITE_PERMISSIONS_UPLOAD = 4;\r\n\tfinal private int RC_WRITE_PERMISSIONS_UPLOAD_GIT = 7;\r\n\tfinal private int RC_WRITE_STORAGE_DISPLAY_TRACK = 3;\r\n\tfinal private int RC_WRITE_PERMISSIONS_EXPORT_ALL = 1;\r\n\tfinal private int RC_WRITE_PERMISSIONS_EXPORT_ONE = 2;\r\n\tfinal private int RC_GPS_PERMISSION = 5;\r\n\tfinal private int RC_WRITE_PERMISSIONS_SHARE = 6;\r\n\r\n\t/** Bundle key for {@link #prevItemVisible} */\r\n\tprivate static final String PREV_VISIBLE = \"prev_visible\";\r\n\r\n\t/** Constant used if no track is active (-1)*/\r\n\tprivate static final long TRACK_ID_NO_TRACK = -1;\r\n\r\n\t// The active track being recorded, if any, or {TRACK_ID_NO_TRACK};\r\n\t// value is updated in {@link #onResume()}\r\n\tprivate long currentTrackId = TRACK_ID_NO_TRACK;\r\n\r\n\t//Use to know which view holder's trackId was selected on the recycler view\r\n\tprivate long contextMenuSelectedTrackid = TRACK_ID_NO_TRACK;\r\n\r\n\t/** The previous item visible, or -1; for scrolling back to its position in {#onResume()} */\r\n\tprivate int prevItemVisible = -1;\r\n\r\n\t// This variable is used to communicate between code trying to start TrackLogger\r\n\t// and the code that actually starts it when have GPS permissions\r\n\tprivate Intent TrackLoggerStartIntent = null;\r\n\r\n\tprivate TrackListRVAdapter recyclerViewAdapter;\r\n\r\n\tprivate String GPXinBase64;\r\n\t\r\n\t// To check if the RecyclerView already has a DividerItemDecoration added\r\n\tprivate boolean hasDivider;\r\n\r\n\t@Override\r\n\tprotected void onCreate(Bundle savedInstanceState) {\r\n\t\tsuper.onCreate(savedInstanceState);\r\n\t\tsetContentView(R.layout.trackmanager);\r\n\r\n\t\tToolbar myToolbar = findViewById(R.id.my_toolbar);\r\n\t\tsetSupportActionBar(myToolbar);\r\n\r\n\t\tif (savedInstanceState != null) {\r\n\t\t\tprevItemVisible = savedInstanceState.getInt(PREV_VISIBLE, -1);\r\n\t\t}\r\n\r\n\t\tFloatingActionButton fab = findViewById(R.id.trackmgr_fab);\r\n\t\tfab.setOnClickListener(new View.OnClickListener() {\r\n\t\t\t@Override\r\n\t\t\tpublic void onClick(View view) {\r\n\t\t\t\tstartTrackLoggerForNewTrack();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// should check if is the first time using the app\r\n\t\tboolean showAppIntro = PreferenceManager.getDefaultSharedPreferences(this)\r\n\t\t\t\t.getBoolean(OSMTracker.Preferences.KEY_DISPLAY_APP_INTRO,\r\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_DISPLAY_APP_INTRO);\r\n\t\tif (showAppIntro) {\r\n\t\t\tIntent intro = new Intent(this, Intro.class);\r\n\t\t\tstartActivity(intro);\r\n\t\t}\r\n\t\tRecyclerView recyclerView = findViewById(R.id.recyclerview);\r\n\t\trecyclerView.setLayoutManager(new LinearLayoutManager(this));\r\n\r\n\t\t// Adding a horizontal divider\r\n\t\tDividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);\r\n\t\tdividerItemDecoration.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); // Using a custom drawable\r\n\r\n\t\trecyclerView.addItemDecoration(dividerItemDecoration);\r\n\t}\r\n\r\n\t@Override\r\n\tprotected void onResume() {\r\n\t\tsetRecyclerView();\r\n\r\n\t\tTextView emptyView = findViewById(R.id.trackmgr_empty);\r\n\t\t//No tracks\r\n\t\tif (recyclerViewAdapter.getItemCount() == 0) {\r\n\t\t\temptyView.setVisibility(View.VISIBLE);\r\n\t\t} else{\r\n\t\t\temptyView.setVisibility(View.INVISIBLE);\r\n\t\t\t// Is any track active?\r\n\t\t\tcurrentTrackId = DataHelper.getActiveTrackId(getContentResolver());\r\n\t\t\tif (currentTrackId != TRACK_ID_NO_TRACK) {\r\n\t\t\t\tSnackbar.make(findViewById(R.id.trackmgr_fab),\r\n\t\t\t\t\t\tgetResources().getString(R.string.trackmgr_continuetrack_hint)\r\n\t\t\t\t\t\t.replace(\"{0}\", Long.toString(currentTrackId)), Snackbar.LENGTH_LONG)\r\n\t\t\t\t\t\t.setAction(\"Action\", null).show();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.onResume();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Configures and initializes the RecyclerView for displaying the list of tracks.\r\n\t */\r\n\tprivate void setRecyclerView() {\r\n\t\tRecyclerView recyclerView = findViewById(R.id.recyclerview);\r\n\r\n\t\tLinearLayoutManager layoutManager = new LinearLayoutManager(this,\r\n\t\t\t\tLinearLayoutManager.VERTICAL, false);\r\n\t\trecyclerView.setLayoutManager(layoutManager);\r\n\t\t// adds a divider decoration if not already present\r\n\t\tif (!hasDivider) {\r\n\t\t\tDividerItemDecoration did = new DividerItemDecoration(recyclerView.getContext(),\r\n\t\t\t\t\tlayoutManager.getOrientation());\r\n\t\t\trecyclerView.addItemDecoration(did);\r\n\t\t\thasDivider = true;\r\n\t\t}\r\n\t\trecyclerView.setHasFixedSize(true);\r\n\t\tCursor cursor = getContentResolver().query(\r\n\t\t\t\tTrackContentProvider.CONTENT_URI_TRACK, null, null, null,\r\n\t\t\t\tTrackContentProvider.Schema.COL_START_DATE + \" desc\");\r\n\r\n\t\trecyclerViewAdapter = new TrackListRVAdapter(this, cursor, this);\r\n\t\trecyclerView.setAdapter(recyclerViewAdapter);\r\n\t}\r\n\r\n\t@Override\r\n\tprotected void onSaveInstanceState(Bundle outState) {\r\n\t\tsuper.onSaveInstanceState(outState);\r\n\t\toutState.putInt(PREV_VISIBLE, prevItemVisible);\r\n\t}\r\n\r\n\t@Override\r\n\tprotected void onRestoreInstanceState(Bundle state) {\r\n\t\tsuper.onRestoreInstanceState(state);\r\n\t\tprevItemVisible = state.getInt(PREV_VISIBLE, -1);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\r\n\t\tgetMenuInflater().inflate(R.menu.trackmgr_menu, menu);\r\n\t\treturn true;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean onPrepareOptionsMenu(Menu menu) {\r\n\t\tif (currentTrackId != -1) {\r\n\t\t\t// Currently tracking. Display \"Continue\" option\r\n\t\t\tmenu.findItem(R.id.trackmgr_menu_continuetrack).setVisible(true);\r\n\r\n\t\t\t// Display a 'stop tracking' option\r\n\t\t\tmenu.findItem(R.id.trackmgr_menu_stopcurrenttrack).setVisible(true);\r\n\t\t} else {\r\n\t\t\t// Not currently tracking. Remove \"Continue\" option\r\n\t\t\tmenu.findItem(R.id.trackmgr_menu_continuetrack).setVisible(false);\r\n\r\n\t\t\t// Remove the 'stop tracking' option\r\n\t\t\tmenu.findItem(R.id.trackmgr_menu_stopcurrenttrack).setVisible(false);\r\n\t\t}\r\n\r\n\t\t// Remove \"delete all\" button if no tracks\r\n\t\tint tracksCount = recyclerViewAdapter.getItemCount();\r\n\t\tmenu.findItem(R.id.trackmgr_menu_deletetracks).setVisible(tracksCount > 0);\r\n\t\tmenu.findItem(R.id.trackmgr_menu_exportall).setVisible(tracksCount > 0);\r\n\r\n\t\treturn super.onPrepareOptionsMenu(menu);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean onOptionsItemSelected(MenuItem item) {\r\n\t\tswitch (item.getItemId()) {\r\n\t\t\tcase R.id.trackmgr_menu_newtrack:\r\n\t\t\t\tstartTrackLoggerForNewTrack();\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_continuetrack:\r\n\t\t\t\tIntent i = new Intent(this, TrackLogger.class);\r\n\t\t\t\ti.putExtra(TrackLogger.STATE_IS_TRACKING, true);\r\n\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\r\n\t\t\t\ttryStartTrackLogger(i);\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_stopcurrenttrack:\r\n\t\t\t\tstopActiveTrack();\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_deletetracks:\r\n\t\t\t\t// Confirm and delete all track\r\n\t\t\t\tnew AlertDialog.Builder(this)\r\n\t\t\t\t\t\t.setTitle(R.string.trackmgr_contextmenu_delete)\r\n\t\t\t\t\t\t.setMessage(getResources().getString(R.string.trackmgr_deleteall_confirm))\r\n\t\t\t\t\t\t.setCancelable(true)\r\n\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\r\n\t\t\t\t\t\t.setPositiveButton(R.string.menu_deletetracks, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\tdeleteAllTracks();\r\n\t\t\t\t\t\t\t\tdialog.dismiss();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\tdialog.cancel();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}).create().show();\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_exportall:\r\n\t\t\t\t// Confirm\r\n\t\t\t\tif (!writeExternalStoragePermissionGranted()){\r\n\t\t\t\t\tLog.e(TAG, \"ExportAllWrite - Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\r\n\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS_EXPORT_ALL);\r\n\t\t\t\t}\r\n\t\t\t\telse exportTracks(false);\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_settings:\r\n\t\t\t\t// Start settings activity\r\n\t\t\t\tstartActivity(new Intent(this, Preferences.class));\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_menu_about:\r\n\t\t\t\t// Start About activity\r\n\t\t\t\tstartActivity(new Intent(this, About.class));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn super.onOptionsItemSelected(item);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Starts TrackLogger Activity if GPS Permission is granted\r\n\t * If there's no GPS Permission, then requests it and the OnPermissionResult will call this\r\n\t * method again if granted\r\n\t */\r\n\tprivate void tryStartTrackLogger(Intent intent){\r\n\t\t// If GPS Permission Granted\r\n\t\tif (ContextCompat.checkSelfPermission(this,\r\n\t\t\t\tManifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\tLog.i(TAG,\"Permission granted on try\");\r\n\t\t\tstartActivity(intent);\r\n\t\t} else{\r\n\t\t\t// Permission is not granted\r\n\t\t\tLog.i(TAG,\"Not Granted on try\");\r\n\t\t\tthis.TrackLoggerStartIntent = intent;\r\n\t\t\t// Should we show an explanation?\r\n\t\t\tif (ActivityCompat.shouldShowRequestPermissionRationale(this,\r\n\t\t\t\t\tManifest.permission.ACCESS_FINE_LOCATION)) {\r\n\t\t\t\tLog.i(TAG,\"Should explain\");\r\n\t\t\t\tToast.makeText(this, R.string.gps_perms_required,\r\n\t\t\t\t\t\tToast.LENGTH_LONG).show();\r\n\t\t\t}\r\n\r\n\t\t\t// No explanation needed, just request the permission.\r\n\t\t\tLog.i(TAG,\"Should not explain\");\r\n\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\tnew String[]{Manifest.permission.ACCESS_FINE_LOCATION}, RC_GPS_PERMISSION);\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This method prepare the new track and set an id, then start a new TrackLogger with the new track id\r\n\t */\r\n\tprivate void startTrackLoggerForNewTrack(){\r\n\t\t// Start track logger activity\r\n\t\ttry {\r\n\t\t\tIntent i = new Intent(this, TrackLogger.class);\r\n\t\t\t// New track\r\n\t\t\tcurrentTrackId = createNewTrack();\r\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\r\n\t\t\ttryStartTrackLogger(i);\r\n\t\t} catch (CreateTrackException cte) {\r\n\t\t\tToast.makeText(this,\r\n\t\t\t\t\tgetResources().getString(R.string.trackmgr_newtrack_error).replace(\"{0}\",\r\n\t\t\t\t\t\t\tcte.getMessage()), Toast.LENGTH_LONG).show();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/* Export tracks\r\n\t * onlySelectedTrack: will export only the track selected on the recycle view.\r\n\t */\r\n\tprivate void exportTracks(boolean onlyContextMenuSelectedTrack) {\r\n\r\n\t\tlong[] trackIds = null;\r\n\r\n\t\t// Select the trackIds to be exported\r\n\t\tif (onlyContextMenuSelectedTrack) {\r\n\t\t\ttrackIds = new long[1];\r\n\t\t\ttrackIds[0] = contextMenuSelectedTrackid;\r\n\t\t} else {\r\n\t\t\tCursor cursor = getContentResolver().query(TrackContentProvider.CONTENT_URI_TRACK,\r\n\t\t\t\t\tnull, null, null,\r\n\t\t\t\t\tTrackContentProvider.Schema.COL_START_DATE + \" desc\");\r\n\t\t\tif (cursor.moveToFirst()) {\r\n\t\t\t\ttrackIds = new long[cursor.getCount()];\r\n\t\t\t\tint idCol = cursor.getColumnIndex(TrackContentProvider.Schema.COL_ID);\r\n\t\t\t\tint i = 0;\r\n\t\t\t\tdo {\r\n\t\t\t\t\ttrackIds[i++] = cursor.getLong(idCol);\r\n\t\t\t\t} while (cursor.moveToNext());\r\n\t\t\t}\r\n\t\t\tcursor.close();\r\n\t\t}\r\n\r\n\t\t// Invoke the Async Task\r\n\t\tnew ExportToStorageTask(this, trackIds) {\r\n\t\t\t@Override\r\n\t\t\tprotected void onPostExecute(Boolean success) {\r\n\t\t\t\tdialog.dismiss();\r\n\t\t\t\tif (!success) {\r\n\t\t\t\t\tnew AlertDialog.Builder(context).setTitle(android.R.string.dialog_alert_title)\r\n\t\t\t\t\t\t\t.setMessage(context.getResources()\r\n\t\t\t\t\t\t\t\t\t.getString(R.string.trackmgr_export_error)\r\n\t\t\t\t\t\t\t\t\t.replace(\"{0}\", super.getErrorMsg()))\r\n\t\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\r\n\t\t\t\t\t\t\t.setNeutralButton(android.R.string.ok,\r\n\t\t\t\t\t\t\tnew DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\t\tdialog.dismiss();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}).show();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tSnackbar.make(findViewById(R.id.trackmgr_fab),\r\n\t\t\t\t\t\t\tgetResources().getString(R.string.various_export_finished),\r\n\t\t\t\t\t\t\tSnackbar.LENGTH_LONG).setAction(\"Action\", null).show();\r\n\t\t\t\t\tupdateTrackItemsInRecyclerView();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.execute();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo, long trackId) {\r\n\t\tsuper.onCreateContextMenu(menu, v, menuInfo);\r\n\t\tgetMenuInflater().inflate(R.menu.trackmgr_contextmenu, menu);\r\n\t\tcontextMenuSelectedTrackid = trackId;\r\n\r\n\t\tmenu.setHeaderTitle(getResources().getString(R.string.trackmgr_contextmenu_title).replace(\"{0}\", Long.toString(contextMenuSelectedTrackid)));\r\n\t\tif(currentTrackId == contextMenuSelectedTrackid){\r\n\t\t\t// the selected one is the active track, so we will show the stop item\r\n\t\t\tmenu.findItem(R.id.trackmgr_contextmenu_stop).setVisible(true);\r\n\t\t}else{\r\n\t\t\t// the selected item is not active, so we need to hide the stop item\r\n\t\t\tmenu.findItem(R.id.trackmgr_contextmenu_stop).setVisible(false);\r\n\t\t}\r\n\t\tmenu.setHeaderTitle(getResources().getString(R.string.trackmgr_contextmenu_title).replace(\"{0}\", Long.toString(contextMenuSelectedTrackid)));\r\n\t\tif ( currentTrackId ==  contextMenuSelectedTrackid) {\r\n\t\t\t// User has pressed the active track, hide the delete option\r\n\t\t\tmenu.removeItem(R.id.trackmgr_contextmenu_delete);\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean onContextItemSelected(MenuItem item) {\r\n\t\tIntent i;\r\n\r\n\t\tswitch(item.getItemId()) {\r\n\t\t\tcase R.id.trackmgr_contextmenu_stop:\r\n\t\t\t\t// stop the active track\r\n\t\t\t\tstopActiveTrack();\r\n\t\t\t\tbreak;\r\n\t\t\tcase R.id.trackmgr_contextmenu_resume:\r\n\t\t\t\t// Activate the selected track if it is different from the currently active one\r\n\t\t\t\t// (or if no track is currently active)\r\n\t\t\t\tif (currentTrackId != contextMenuSelectedTrackid) {\r\n\t\t\t\t\tsetActiveTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t}\r\n\t\t\t\t// Start the TrackLogger activity to begin logging the selected track\r\n\t\t\t\ti = new Intent(this, TrackLogger.class);\r\n\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, contextMenuSelectedTrackid);\r\n\t\t\t\ttryStartTrackLogger(i);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_delete:\r\n\t\t\t\t// Confirm and delete selected track\r\n\t\t\t\tnew AlertDialog.Builder(this)\r\n\t\t\t\t\t\t.setTitle(R.string.trackmgr_contextmenu_delete)\r\n\t\t\t\t\t\t.setMessage(getResources().getString(R.string.trackmgr_delete_confirm)\r\n\t\t\t\t\t\t\t\t.replace(\"{0}\", Long.toString(contextMenuSelectedTrackid)))\r\n\t\t\t\t\t\t.setCancelable(true)\r\n\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\r\n\t\t\t\t\t\t.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\tdeleteTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t\t\t\t\tdialog.dismiss();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\tdialog.cancel();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}).create().show();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_export:\r\n\t\t\t\tif (writeExternalStoragePermissionGranted()) {\r\n\t\t\t\t\texportTracks(true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tLog.e(TAG, \"ExportAsGPXWrite - Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\r\n\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS_EXPORT_ONE);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_share:\r\n\t\t\t\tif (writeExternalStoragePermissionGranted()) {\r\n\t\t\t\t\tprepareAndShareTrack(contextMenuSelectedTrackid, this);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tLog.e(TAG, \"Share GPX - Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\r\n\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS_SHARE);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_osm_upload:\r\n\t\t\t\tif (writeExternalStoragePermissionGranted()) {\r\n\t\t\t\t\tuploadTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tLog.e(TAG, \"OsmUploadWrite - Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\r\n\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS_UPLOAD);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_git_upload:\r\n\t\t\t\tif (!writeExternalStoragePermissionGranted()){\r\n\t\t\t\t\tLog.e(\"DisplayTrackMapWrite\", \"Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},\r\n\t\t\t\t\t\t\tRC_WRITE_PERMISSIONS_UPLOAD_GIT);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tuploadTrackToGitHub(contextMenuSelectedTrackid, this);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_display:\r\n\t\t\t\tif (writeExternalStoragePermissionGranted()) {\r\n\t\t\t\t\tdisplayTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tLog.e(TAG, \"DisplayTrackMapWrite - Permission asked\");\r\n\t\t\t\t\tActivityCompat.requestPermissions(this,\r\n\t\t\t\t\t\t\tnew String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, RC_WRITE_STORAGE_DISPLAY_TRACK);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase R.id.trackmgr_contextmenu_details:\r\n\t\t\t\ti = new Intent(this, TrackDetail.class);\r\n\t\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, contextMenuSelectedTrackid);\r\n\t\t\t\tstartActivity(i);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn super.onContextItemSelected(item);\r\n\t}\r\n\r\n\tprivate void uploadTrack(long trackId){\r\n\t\tIntent i = new Intent(this, OpenStreetMapUpload.class);\r\n\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\r\n\t\tstartActivity(i);\r\n\t}\r\n\r\n\r\n\tprivate static void encodeFileToBase64(File inputFile, File outputFile) throws IOException {\r\n\t\ttry (InputStream inputStream = new FileInputStream(inputFile);\r\n\t\t\t OutputStream outputStream = new FileOutputStream(outputFile);\r\n\t\t\t Base64OutputStream base64OutputStream = new Base64OutputStream(outputStream, 0)) {\r\n\r\n\t\t\tbyte[] buffer = new byte[8192]; // 8KB Buffer\r\n\t\t\tint bytesRead;\r\n\t\t\twhile ((bytesRead = inputStream.read(buffer)) != -1) {\r\n\t\t\t\tbase64OutputStream.write(buffer, 0, bytesRead);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprivate void uploadTrackToGitHub(final long trackId, Context context){\r\n\t\tnew ExportToTempFileTask(context, trackId){\r\n\t\t\t@Override\r\n\t\t\tprotected void executionCompleted(){\r\n\t\t\t\tFile zipFile = ZipHelper.zipCacheFiles(context, trackId, this.getTmpFile());\r\n\t\t\t\tuploadTrackToGitHubAUX(zipFile, context);\r\n\t\t\t}\r\n\t\t}.execute();\r\n\t}\r\n\r\n\tprivate void uploadTrackToGitHubAUX(File tmpGPXFile, Context context) {\r\n\t\tGitHubUser gitHubUser = null;\r\n\r\n\t\tFile internalFile = new File(context.getFilesDir(), tmpGPXFile.getName() + \".base64\");\r\n\t\ttry {\r\n\t\t\tencodeFileToBase64(tmpGPXFile, internalFile);\r\n\t\t} catch (IOException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tgitHubUser = new GitHubUser(this);\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\r\n\t\tif (gitHubUser == null || gitHubUser.getUsername().length() == 0 || gitHubUser.getToken().length() != 40){\r\n\t\t\tIntent i = new Intent(context, GitHubConfig.class);\r\n\t\t\tstartActivity(i);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tIntent i = new Intent(context, GitHubUpload.class);\r\n\t\t\ti.putExtra(\"filePath\", internalFile.getAbsolutePath());\r\n\t\t\ti.putExtra(\"filename\", internalFile.getName());\r\n\t\t\ti.setPackage(getPackageName());\r\n\t\t\tstartActivity(i);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprivate void displayTrack(long trackId){\r\n\t\tLog.e(TAG, \"On Display Track\");\r\n\t\t// Start display track activity, with or without OSM background\r\n\t\tIntent i;\r\n\t\tboolean useOpenStreetMapBackground = PreferenceManager\r\n\t\t\t\t.getDefaultSharedPreferences(this).getBoolean(\r\n\t\t\t\t\t\tOSMTracker.Preferences.KEY_UI_DISPLAYTRACK_OSM,\r\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_UI_DISPLAYTRACK_OSM);\r\n\t\tif (useOpenStreetMapBackground) {\r\n\t\t\ti = new Intent(this, DisplayTrackMap.class);\r\n\t\t} else {\r\n\t\t\ti = new Intent(this, DisplayTrack.class);\r\n\t\t}\r\n\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\r\n\t\tstartActivity(i);\r\n\t}\r\n\r\n\tprivate boolean writeExternalStoragePermissionGranted(){\r\n\t\t// On versions lower than Android 11, write external storage permission is required.\r\n\t\tif (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {\r\n\t\t\tLog.d(TAG, \"CHECKING - Write\");\r\n\t\t\treturn ContextCompat.checkSelfPermission(this,\r\n\t\t\t\t\tManifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;\r\n\t\t} else {\r\n\t\t\tLog.d(TAG, \"Write External Storage is granted\");\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onClick(long trackId) {\r\n\t\tIntent i;\r\n\t\tif (trackId == currentTrackId) {\r\n\t\t\t// continue recording the current track\r\n\t\t\ti = new Intent(this, TrackLogger.class);\r\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\r\n\t\t\ti.putExtra(TrackLogger.STATE_IS_TRACKING, true);\r\n\t\t\ttryStartTrackLogger(i);\r\n\r\n\t\t} else {\r\n\t\t\t// show track info\r\n\t\t\ti = new Intent(this, TrackDetail.class);\r\n\t\t\ti.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\r\n\t\t\tstartActivity(i);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new track, in DB and on SD card\r\n\t * @returns The ID of the new track\r\n\t * @throws CreateTrackException\r\n\t */\r\n\tprivate long createNewTrack() throws CreateTrackException {\r\n\t\tSharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);\r\n\t\tDate startDate = new Date();\r\n\r\n\t\t// Create entry in TRACK table\r\n\t\tContentValues values = new ContentValues();\r\n\t\tvalues.put(TrackContentProvider.Schema.COL_NAME,\r\n\t\t\t\tDataHelper.FILENAME_FORMATTER.format(new Date()));\r\n\t\tvalues.put(TrackContentProvider.Schema.COL_START_DATE, startDate.getTime());\r\n\t\tvalues.put(TrackContentProvider.Schema.COL_ACTIVE,\r\n\t\t\t\tTrackContentProvider.Schema.VAL_TRACK_ACTIVE);\r\n\t\tString visibility = preferences.getString(\r\n\t\t\t\tOSMTracker.Preferences.KEY_OSM_TRACK_VISIBILITY,\r\n\t\t\t\tOSMTracker.Preferences.VAL_OSM_TRACK_VISIBILITY\r\n\t\t);\r\n\t\tLog.d(TAG, \"Visibility: \" + visibility);\r\n\t\tvalues.put(TrackContentProvider.Schema.COL_OSM_VISIBILITY, visibility);\r\n\t\tUri trackUri = getContentResolver().insert(TrackContentProvider.CONTENT_URI_TRACK, values);\r\n\t\tlong trackId = ContentUris.parseId(trackUri);\r\n\r\n\t\t// set the active track\r\n\t\tsetActiveTrack(trackId);\r\n\r\n\t\treturn trackId;\r\n\t}\r\n\r\n\t// This should be static because contains an AsyncTask\r\n\t// AsyncTasks has to live inside a static environment\r\n\t// That's why the Context is passed as a parameter\r\n\tprivate static void prepareAndShareTrack(final long trackId, Context context) {\r\n\t\t// Create temp file that will remain in cache\r\n\t\tnew ExportToTempFileTask(context, trackId){\r\n\t\t\t@Override\r\n\t\t\tprotected void executionCompleted(){\r\n\t\t\t\t// Creates a zip file with the trace and its multimedia files\r\n\t\t\t\tFile zipFile = ZipHelper.zipCacheFiles(context, trackId, this.getTmpFile());\r\n\t\t\t\tshareFile(zipFile, context);\r\n\t\t\t}\r\n\r\n\t\t\t@Override\r\n\t\t\tprotected void onPostExecute(Boolean success) {\r\n\t\t\t\tdialog.dismiss();\r\n\t\t\t\tif (!success) {\r\n\t\t\t\t\tnew AlertDialog.Builder(context)\r\n\t\t\t\t\t\t\t.setTitle(android.R.string.dialog_alert_title)\r\n\t\t\t\t\t\t\t.setMessage(context.getResources()\r\n\t\t\t\t\t\t\t\t\t.getString(R.string.trackmgr_prepare_for_share_error)\r\n\t\t\t\t\t\t\t\t\t.replace(\"{0}\", Long.toString(trackId)))\r\n\t\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\r\n\t\t\t\t\t\t\t.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {\r\n\t\t\t\t\t\t\t\t@Override\r\n\t\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\r\n\t\t\t\t\t\t\t\t\tdialog.dismiss();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.show();\r\n\t\t\t\t}else{\r\n\t\t\t\t\texecutionCompleted();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.execute();\r\n\t}\r\n\r\n\t/**\r\n\t * Allows user to share gpx file from storage to another app\r\n\t * @param tmpGPXFile track identifier\r\n\t */\r\n\tprivate static void shareFile(File tmpGPXFile, Context context) {\r\n\r\n\t\t// Get gpx content URI\r\n\t\tUri trackUriContent = FileProvider.getUriForFile(context,\r\n\t\t\t\tDataHelper.FILE_PROVIDER_AUTHORITY,\r\n\t\t\t\ttmpGPXFile);\r\n\t\t// Sharing intent\r\n\t\tIntent shareIntent = new Intent();\r\n\t\tshareIntent.setAction(Intent.ACTION_SEND);\r\n\t\tshareIntent.putExtra(Intent.EXTRA_STREAM, trackUriContent);\r\n\t\tshareIntent.setType(DataHelper.MIME_TYPE_GPX);\r\n\t\tcontext.startActivity(Intent.createChooser(shareIntent, context.getResources().getText(R.string.trackmgr_contextmenu_share)));\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes the track with the specified id from DB and SD card\r\n\t * @param  id of the track to be deleted\r\n\t */\r\n\tprivate void deleteTrack(long id) {\r\n\t\tgetContentResolver().delete(\r\n\t\t\t\tContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, id),\r\n\t\t\t\tnull, null);\r\n\t\tupdateTrackItemsInRecyclerView();\r\n\r\n\t\t// Delete any data stored for the track we're deleting\r\n\t\tFile trackStorageDirectory = DataHelper.getTrackDirectory(id, this);\r\n\t\tif (trackStorageDirectory.exists()) {\r\n\t\t\tFileSystemUtils.delete(trackStorageDirectory, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/*\r\n\t * This method updates the track items in the user interface . Is used when data in DB change\r\n\t * (export or delete track) to force the UI reflect the change.\r\n\t */\r\n\tprivate void updateTrackItemsInRecyclerView() {\r\n\t\trecyclerViewAdapter.getCursorAdapter().getCursor().requery();\r\n\t\trecyclerViewAdapter.notifyDataSetChanged();\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes all tracks and their data\r\n\t */\r\n\tprivate void deleteAllTracks() {\r\n\t\tCursor cursor = getContentResolver().query(TrackContentProvider.CONTENT_URI_TRACK, null, null, null, TrackContentProvider.Schema.COL_START_DATE + \" asc\");\r\n\r\n\t\t// Stop any currently active tracks\r\n\t\tif (currentTrackId != -1) {\r\n\t\t\tstopActiveTrack();\r\n\t\t}\r\n\t\trecyclerViewAdapter.getItemId(0);\r\n\r\n\t\tif (cursor != null && cursor.moveToFirst()) {\r\n\t\t\tint id_col = cursor.getColumnIndex(TrackContentProvider.Schema.COL_ID);\r\n\t\t\tdo {\r\n\t\t\t\tdeleteTrack(cursor.getLong(id_col));\r\n\t\t\t} while (cursor.moveToNext());\r\n\t\t\tcursor.close();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the active track\r\n\t * calls {stopActiveTrack()} to stop all currently\r\n\t * @param trackId ID of the track to activate\r\n\t */\r\n\tprivate void setActiveTrack(long trackId){\r\n\r\n\t\t// to be sure that no tracking will be in progress when we set a new track\r\n\t\tstopActiveTrack();\r\n\r\n\t\t// set the track active\r\n\t\tContentValues values = new ContentValues();\r\n\t\tvalues.put(TrackContentProvider.Schema.COL_ACTIVE,\r\n\t\t\t\tTrackContentProvider.Schema.VAL_TRACK_ACTIVE);\r\n\t\tgetContentResolver().update(TrackContentProvider.CONTENT_URI_TRACK, values,\r\n\t\t\t\tTrackContentProvider.Schema.COL_ID + \" = ?\",\r\n\t\t\t\tnew String[] {Long.toString(trackId)});\r\n\t}\r\n\r\n\t/**\r\n\t * Stops the active track\r\n\t * Sends a broadcast to be received by GPSLogger to stop logging\r\n\t * and forces the DataHelper to stop tracking.\r\n\t */\r\n\tprivate void stopActiveTrack(){\r\n\t\tif(currentTrackId != TRACK_ID_NO_TRACK){\r\n\t\t\t// we send a broadcast to inform all registered services to stop tracking\r\n\t\t\tIntent intent = new Intent(OSMTracker.INTENT_STOP_TRACKING);\r\n\t\t\tintent.setPackage(this.getPackageName());\r\n\t\t\tsendBroadcast(intent);\r\n\r\n\t\t\t// need to get sure, that the database is up to date\r\n\t\t\tDataHelper dataHelper = new DataHelper(this);\r\n\t\t\tdataHelper.stopTracking(currentTrackId);\r\n\r\n\t\t\t// set the currentTrackId to \"no track\"\r\n\t\t\tcurrentTrackId = TRACK_ID_NO_TRACK;\r\n\r\n\t\t\t// Change icon on track item\r\n\t\t\tupdateTrackItemsInRecyclerView();\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tpublic void onRequestPermissionsResult(int requestCode, String permissions[],\r\n\t\t\t\t\t\t\t\t\t\t   int[] grantResults) {\r\n\t\tswitch (requestCode) {\r\n\t\t\tcase RC_WRITE_PERMISSIONS_EXPORT_ALL: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\texportTracks(false);\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"we should explain why we need write permission_EXPORT_ALL\");\r\n\t\t\t\t\tToast.makeText(this, R.string.storage_permission_for_export_GPX, Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_WRITE_PERMISSIONS_EXPORT_ONE: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\texportTracks(true);\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"we should explain why we need write permission_EXPORT_ONE\");\r\n\t\t\t\t\tToast.makeText(this, R.string.storage_permission_for_export_GPX, Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_WRITE_STORAGE_DISPLAY_TRACK: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\t\t\tLog.e(TAG, \"Result - Permission granted\");\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\tdisplayTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"Permission not granted\");\r\n\t\t\t\t\tToast.makeText(this, R.string.storage_permission_for_display_track, Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_WRITE_PERMISSIONS_SHARE: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\t\t\tLog.e(TAG, \"Result - Permission granted\");\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\tdisplayTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t\tprepareAndShareTrack(contextMenuSelectedTrackid, this);\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"Permission not granted\");\r\n\t\t\t\t\tToast.makeText(this, R.string.storage_permission_for_share_track, Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_WRITE_PERMISSIONS_UPLOAD: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\t\t\tLog.e(TAG, \"Result - Permission granted\");\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\tuploadTrack(contextMenuSelectedTrackid);\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"Permission not granted\");\r\n\t\t\t\t\tToast.makeText(this, R.string.storage_permission_for_upload_to_OSM, Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_WRITE_PERMISSIONS_UPLOAD_GIT: {\r\n\t\t\t\t// If request is cancelled, the result arrays are empty.\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\t\t\tLog.e(\"Result\", \"Permission granted\");\r\n\t\t\t\t\t// permission was granted, yay!\r\n\t\t\t\t\tuploadTrackToGitHub(contextMenuSelectedTrackid, this);\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// permission denied, boo! Disable the\r\n\t\t\t\t\t// functionality that depends on this permission.\r\n\t\t\t\t\t//TODO: add an informative message.\r\n\t\t\t\t\tLog.w(TAG, \"Permission not granted\");\r\n\t\t\t\t\tToast.makeText(this, \"To upload the track to GIT we need access to the storage.\", Toast.LENGTH_LONG).show();\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase RC_GPS_PERMISSION:{\r\n\t\t\t\tif (grantResults.length > 0\r\n\t\t\t\t\t\t&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {\r\n\t\t\t\t\tLog.i(TAG, \"GPS Permission granted\");\r\n\t\t\t\t\ttryStartTrackLogger(this.TrackLoggerStartIntent);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tLog.i(TAG, \"GPS Permission denied\");\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic String getGPXinBase64() {\r\n\t\treturn GPXinBase64;\r\n\t}\r\n\r\n\tpublic void setGPXinBase64(String GPXinBase64) {\r\n\t\tthis.GPXinBase64 = GPXinBase64;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/activity/WaypointList.java",
    "content": "package net.osmtracker.activity;\n\nimport android.app.AlertDialog;\nimport android.app.ListActivity;\nimport android.content.ActivityNotFoundException;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.CursorAdapter;\nimport android.widget.EditText;\nimport android.widget.ListView;\nimport android.widget.Toast;\nimport androidx.core.content.FileProvider;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.db.WaypointListAdapter;\nimport net.osmtracker.listener.EditWaypointDialogOnClickListener;\n\nimport java.io.File;\n\n/**\n * Activity that lists the previous waypoints tracked by the user.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class WaypointList extends ListActivity {\n\n\tprivate static final String TAG = WaypointList.class.getSimpleName();\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\tListView listView = getListView();\n\t\tlistView.setFitsSystemWindows(true);\n\t\tlistView.setClipToPadding(false);\n\t\tlistView.setPadding(0, 48, 0, 0);\n\t}\n\n\t@Override\n\tprotected void onResume() {\n\t\tLong trackId = getIntent().getExtras().getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\n\t\tCursor cursor = getContentResolver().query(TrackContentProvider.waypointsUri(trackId),\n\t\t\t\tnull, null, null, TrackContentProvider.Schema.COL_TIMESTAMP + \" desc\");\n\t\tstartManagingCursor(cursor);\n\t\tsetListAdapter(new WaypointListAdapter(WaypointList.this, cursor));\n\t\t\n\t\tsuper.onResume();\n\t}\n\n\t@Override\n\tprotected void onPause() {\n\t\tCursorAdapter adapter = (CursorAdapter) getListAdapter();\n\t\tif (adapter != null) {\n\t\t\t// Properly close the adapter cursor\n\t\t\tCursor cursor = adapter.getCursor();\n\t\t\tstopManagingCursor(cursor);\n\t\t\tcursor.close();\n\t\t\tsetListAdapter(null);\n\t\t}\n\n\t\tsuper.onPause();\n\t}\n\n\t/**\n\t * Handles the selection of a waypoint from the list and opens an edit dialog.\n\t * This dialog allows the user to update the waypoint's name and preview attached files (images or audio).\n\t *\n\t * @param l The ListView where the item was clicked.\n\t * @param v The view that was clicked.\n\t * @param position The position of the clicked item.\n\t * @param id The ID of the clicked waypoint.\n\t */\n\t@Override\n\tprotected void onListItemClick(ListView l, View v, int position, long id) {\n\t\tfinal Cursor cursor = ((CursorAdapter) getListAdapter()).getCursor();\n\t\tfinal DataHelper dataHelper = new DataHelper(l.getContext());\n\t\tLayoutInflater inflater = this.getLayoutInflater();\n\n\t\t// Inflate the waypoint edit dialog layout\n\t\tfinal View editWaypointDialog = inflater.inflate(R.layout.edit_waypoint_dialog, null);\n\t\tfinal EditText editWaypointName = editWaypointDialog.findViewById(R.id.edit_waypoint_et_name);\n\n\t\tButton buttonPreview = editWaypointDialog.findViewById(R.id.edit_waypoint_button_preview);\n\t\tButton buttonUpdate = editWaypointDialog.findViewById(R.id.edit_waypoint_button_update);\n\t\tButton buttonDelete = editWaypointDialog.findViewById(R.id.edit_waypoint_button_delete);\n\t\tButton buttonCancel = editWaypointDialog.findViewById(R.id.edit_waypoint_button_cancel);\n\n\t\t// Retrieve existing waypoint name\n\t\tString oldName = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\teditWaypointName.setText(oldName);\n\t\teditWaypointName.setSelection(oldName.length());\n\n\t\t// Retrieve waypoint details\n\t\tfinal long trackId = cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_TRACK_ID));\n\t\tfinal String uuid = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_UUID));\n\t\tfinal String link = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_LINK));\n\n\t\tfinal String filePath = (link != null) ? DataHelper.getTrackDirectory(trackId, l.getContext()) + \"/\" + link : null;\n\t\tFile file = (filePath != null) ? new File(filePath) : null;\n\n\t\tif (file != null && file.exists()) {\n\t\t\ttry {\n\t\t\t\tif (isImageFile(filePath) || isAudioFile(filePath)) {\n\t\t\t\t\tbuttonPreview.setVisibility(View.VISIBLE);\n\t\t\t\t}\n\t\t\t} catch (Exception e) {\n\t\t\t\tLog.e(TAG, \"Error handling file: \" + filePath, e);\n\t\t\t}\n\t\t}\n\n\t\tAlertDialog.Builder builder = new AlertDialog.Builder(this);\n\t\tbuilder.setCancelable(true);\n\t\tAlertDialog alert = builder.create();\n\n\t\t// Preview button\n\t\tbuttonPreview.setOnClickListener(new EditWaypointDialogOnClickListener(alert, null) {\n\t\t\t@Override\n\t\t\tpublic void onClick(View view) {\n\t\t\t\tif (filePath != null) {\n\t\t\t\t\tFile file = new File(filePath);\n\t\t\t\t\tUri fileUri = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) ?\n\t\t\t\t\t\t\tFileProvider.getUriForFile(getApplicationContext(), DataHelper.FILE_PROVIDER_AUTHORITY, file) :\n\t\t\t\t\t\t\tUri.fromFile(file);\n\n\t\t\t\t\tIntent intent = new Intent(Intent.ACTION_VIEW);\n\t\t\t\t\tintent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);\n\n\t\t\t\t\tif (isImageFile(filePath)) {\n\t\t\t\t\t\tintent.setDataAndType(fileUri, DataHelper.MIME_TYPE_IMAGE);\n\t\t\t\t\t} else if (isAudioFile(filePath)) {\n\t\t\t\t\t\tintent.setDataAndType(fileUri, DataHelper.MIME_TYPE_AUDIO);\n\t\t\t\t\t}\n\n\t\t\t\t\ttry{\n\t\t\t\t\t\tstartActivity(intent);\n\t\t\t\t\t} catch (ActivityNotFoundException e) {\n\t\t\t\t\t\t// Handle the case where no app can handle the intent\n\t\t\t\t\t\t// this means the user has not installed an app that can handle the file type\n\t\t\t\t\t\t//Log.e(TAG, \"No app found to handle the file type: \" + filePath, e);\n\t\t\t\t\t\tToast.makeText(WaypointList.this, getString(R.string.no_app_to_handle_file_type), Toast.LENGTH_LONG).show();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\talert.dismiss();\n\t\t\t}\n\t\t});\n\n\t\t// Update waypoint name\n\t\tbuttonUpdate.setOnClickListener(new EditWaypointDialogOnClickListener(alert, null) {\n\t\t\t@Override\n\t\t\tpublic void onClick(View view) {\n\t\t\t\tString newName = editWaypointName.getText().toString();\n\t\t\t\tdataHelper.updateWayPoint(trackId, uuid, newName, link);\n\t\t\t\talert.dismiss();\n\t\t\t}\n\t\t});\n\n\t\t// Delete waypoint\n\t\tbuttonDelete.setOnClickListener(new EditWaypointDialogOnClickListener(alert, cursor) {\n\t\t\t@Override\n\t\t\tpublic void onClick(View view) {\n\t\t\t\tnew AlertDialog.Builder(WaypointList.this)\n\t\t\t\t\t\t.setTitle(getString(R.string.delete_waypoint_confirm_dialog_title))\n\t\t\t\t\t\t.setMessage(getString(R.string.delete_waypoint_confirm_dialog_msg))\n\t\t\t\t\t\t.setPositiveButton(getString(R.string.delete_waypoint_confirm_bt_ok), new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\t\tdataHelper.deleteWayPoint(uuid, filePath);\n\t\t\t\t\t\t\t\tcursor.requery();\n\t\t\t\t\t\t\t\talert.dismiss();\n\t\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.setNegativeButton(getString(R.string.delete_waypoint_confirm_bt_cancel), new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t\t@Override\n\t\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.show();\n\t\t\t}\n\t\t});\n\n\t\t// Cancel button\n\t\tbuttonCancel.setOnClickListener(new EditWaypointDialogOnClickListener(alert, null) {\n\t\t\t@Override\n\t\t\tpublic void onClick(View view) {\n\t\t\t\talert.dismiss();\n\t\t\t}\n\t\t});\n\n\t\talert.setView(editWaypointDialog);\n\t\talert.show();\n\n\t\tsuper.onListItemClick(l, v, position, id);\n\t}\n\n\t/**\n\t * Checks if a given file path corresponds to an image.\n\t *\n\t * @param path The file path.\n\t * @return True if the file is an image, false otherwise.\n\t */\n\tprivate boolean isImageFile(String path) {\n\t\treturn path.endsWith(DataHelper.EXTENSION_JPG);\n\t}\n\n\t/**\n\t * Checks if a given file path corresponds to an audio file.\n\t *\n\t * @param path The file path.\n\t * @return True if the file is an audio file, false otherwise.\n\t */\n\tprivate boolean isAudioFile(String path) {\n\t\treturn path.endsWith(DataHelper.EXTENSION_3GPP);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/adapter/NoteAdapter.java",
    "content": "package net.osmtracker.adapter;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.Locale;\nimport java.util.TimeZone;\n\npublic class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteViewHolder> {\n\n\tpublic static final SimpleDateFormat DATE_FORMATTER =\n\t\t\tnew SimpleDateFormat(\"HH:mm:ss 'UTC'\", Locale.ROOT);\n\tstatic {\n\t\tDATE_FORMATTER.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\t}\n\n\tprivate Cursor cursor;\n\tprivate final OnNoteClickListener listener;\n\n\tpublic interface OnNoteClickListener {\n\t\tvoid onNoteClick(long id, long noteId, String uuid, String name);\n\t}\n\n\tpublic NoteAdapter(OnNoteClickListener listener) {\n\t\tthis.listener = listener;\n\t}\n\n\tpublic void swapCursor(Cursor newCursor) {\n\t\tif (cursor == newCursor) return;\n\t\tif (cursor != null) cursor.close();\n\t\tcursor = newCursor;\n\t\tnotifyDataSetChanged();\n\t}\n\n\t@NonNull\n\t@Override\n\tpublic NoteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n\t\tView v = LayoutInflater.from(\n\t\t\t\tparent.getContext()).inflate(R.layout.notelist_item, parent, false);\n\t\treturn new NoteViewHolder(v);\n\t}\n\n\t@Override\n\tpublic void onBindViewHolder(@NonNull NoteViewHolder holder, int position) {\n\t\tif (cursor.moveToPosition(position)) {\n\t\t\tContext context = holder.itemView.getContext();\n\n\t\t\t// Bind name\n\t\t\tString name = cursor.getString(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_NAME));\n\t\t\tholder.tvName.setText(name);\n\n\t\t\t// Upload status\n\t\t\tif (cursor.isNull(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE))) {\n\t\t\t\tholder.ivUploadStatus.setVisibility(View.GONE);\n\t\t\t} else {\n\t\t\t\tholder.ivUploadStatus.setImageResource(android.R.drawable.stat_sys_upload_done);\n\t\t\t\tholder.ivUploadStatus.setVisibility(View.VISIBLE);\n\t\t\t}\n\n\t\t\t//Bind Location (Latitude/Longitude)\n\t\t\tString lat = cursor.getString(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_LATITUDE));\n\t\t\tString lon = cursor.getString(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_LONGITUDE));\n\n\t\t\tString locationStr = context.getString(R.string.wplist_latitude) + lat + \", \" +\n\t\t\t\t\tcontext.getString(R.string.wplist_longitude) + lon;\n\t\t\tholder.tvLocation.setText(locationStr);\n\n\t\t\t// Bind Timestamp\n\t\t\tDate ts = new Date(cursor.getLong(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_TIMESTAMP)));\n\t\t\tholder.tvTimestamp.setText(DATE_FORMATTER.format(ts));\n\n\t\t\t// Setup Click Listener\n\t\t\tString uuid = cursor.getString(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_UUID));\n\t\t\tlong trackId = cursor.getLong(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_TRACK_ID));\n\t\t\tlong noteId =  cursor.getLong(\n\t\t\t\t\tcursor.getColumnIndexOrThrow(TrackContentProvider.Schema.COL_ID));\n\t\t\tholder.itemView.setOnClickListener(\n\t\t\t\t\tv -> listener.onNoteClick(trackId, noteId, uuid, name));\n\t\t}\n\t}\n\n\t@Override\n\tpublic int getItemCount() {\n\t\treturn (cursor == null) ? 0 : cursor.getCount();\n\t}\n\n\tpublic static class NoteViewHolder extends RecyclerView.ViewHolder {\n\t\tTextView tvName;\n\t\tImageView ivUploadStatus;\n\t\tTextView tvLocation;\n\t\tTextView tvTimestamp;\n\n\n\t\tpublic NoteViewHolder(View v) {\n\t\t\tsuper(v);\n\t\t\ttvName = v.findViewById(R.id.notelist_item_name);\n\t\t\tivUploadStatus = v.findViewById(R.id.notelist_item_upload_status_icon);\n\t\t\ttvLocation = v.findViewById(R.id.notelist_item_location);\n\t\t\ttvTimestamp = v.findViewById(R.id.notelist_item_timestamp);\n\t\t}\n\t}\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/DataHelper.java",
    "content": "package net.osmtracker.db;\n\nimport android.content.ContentResolver;\nimport android.content.ContentUris;\nimport android.content.ContentValues;\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.database.Cursor;\nimport android.location.Location;\nimport android.net.Uri;\nimport android.util.Log;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.db.model.TrackPoint;\nimport net.osmtracker.db.model.WayPoint;\n\nimport java.io.File;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * Data helper for dialoging with content resolver and filesystem.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class DataHelper {\n\n\tprivate static final String TAG = DataHelper.class.getSimpleName();\n\n\t/**\n\t * GPX file extension.\n\t */\n\tpublic static final String EXTENSION_GPX = \".gpx\";\n\n\t/**\n\t * 3GPP extension\n\t */\n\tpublic static final String EXTENSION_3GPP = \".3gpp\";\n\n\t/**\n\t * JPG file extension\n\t */\n\tpublic static final String EXTENSION_JPG = \".jpg\";\n\n\t/**\n\t * ZIP file extension\n\t */\n\tpublic static final String EXTENSION_ZIP = \".zip\";\n\n\t/**\n\t * File extension for layout files\n\t */\n\n\tpublic static final String LAYOUT_FILE_EXTENSION = \".xml\";\n\n\t/**\n\t * GPX Files MIME standard for sharing\n\t */\n\tpublic static final String MIME_TYPE_GPX = \"application/gpx+xml\";\n\n\t/**\n\t * Audio Files MIME\n\t */\n\tpublic static final String MIME_TYPE_AUDIO = \"audio/*\";\n\n\t/**\n\t * Image Files MIME\n\t */\n\tpublic static final String MIME_TYPE_IMAGE = \"image/*\";\n\n\t/**\n\t * Directory containing user layouts, relative to storage dir.\n\t */\n\tpublic static final String LAYOUTS_SUBDIR = \"layouts\";\n\n\t/**\n\t * The suffix that must be added to the layout's name for getting its icons directory\n\t * Example: water_supply       <- layout name\n\t *          water_supply_icons <- icon directory\n\t */\n\n\tpublic static final String LAYOUTS_ICONS_DIR_SUFFIX = \"_icons\";\n\n\t/**\n\t * APP sign plus FileProvider = authority\n\t */\n\tpublic static final String FILE_PROVIDER_AUTHORITY = \"net.osmtracker.fileprovider\";\n\n\t/**\n\t * Number of tries to rename a media file for the current track if there are\n\t * already a media file of this name.\n\t */\n\tprivate static final int MAX_RENAME_ATTEMPTS = 20;\n\t\n\t/**\n\t * valid range for azimuth angles.\n\t */\n\tpublic static final float AZIMUTH_MIN = 0;\n\tpublic static final float AZIMUTH_MAX = 360;\n\tpublic static final float AZIMUTH_INVALID = -1;\n\n\t/**\n\t * Formatter for various files (GPX, media)\n\t */\n\tpublic static final SimpleDateFormat FILENAME_FORMATTER = new SimpleDateFormat(\"yyyy-MM-dd_HH-mm-ss\");\n\n\t/**\n\t * Context\n\t */\n\tprivate Context context;\n\n\t/**\n\t * ContentResolver to interact with content provider\n\t */\n\tprivate ContentResolver contentResolver;\n\n\t/**\n\t * Constructor.\n\t * \n\t * @param c\n\t *\t\t\t\tApplication context.\n\t */\n\tpublic DataHelper(Context c) {\n\t\tcontext = c;\n\t\tcontentResolver = c.getContentResolver();\n\t}\n\n\t/**\n\t * Track a point into DB.\n\t * \n\t * @param trackId\n\t *            Id of the track\n\t * @param location\n\t *            The Location to track\n\t * @param azimuth\n\t * \t\t\t  azimuth angle in degrees (0-360deg) of the track point. if it is outside the given range it will be set null.\n\t * @param accuracy\n\t * \t\t\t  accuracy of the compass reading (as SensorManager.SENSOR_STATUS_ACCURACY*),\n\t * \t\t\t  ignored if azimuth is invalid.\n\t * @param pressure\n\t *            atmospheric pressure\n\t */\n\tpublic void track(long trackId, Location location, float azimuth, int accuracy, float pressure) {\n\t\tLog.v(TAG, \"Tracking (trackId=\" + trackId + \") location: \" + location + \" azimuth: \" + azimuth + \", accuracy: \" + accuracy);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\tvalues.put(TrackContentProvider.Schema.COL_LATITUDE, location.getLatitude());\n\t\tvalues.put(TrackContentProvider.Schema.COL_LONGITUDE, location.getLongitude());\n\t\tif (location.hasAltitude()) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_ELEVATION, location.getAltitude());\n\t\t}\n\t\tif (location.hasAccuracy()) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_ACCURACY, location.getAccuracy());\n\t\t}\n\t\tif (location.hasSpeed()) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_SPEED, location.getSpeed());\n\t\t}\n\t\t\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tif (prefs.getBoolean(OSMTracker.Preferences.KEY_GPS_IGNORE_CLOCK, OSMTracker.Preferences.VAL_GPS_IGNORE_CLOCK)) {\n\t\t\t// Use OS clock\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, System.currentTimeMillis());\n\t\t} else {\n\t\t\t// Use GPS clock\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, location.getTime());\n\t\t}\n\n\t\tif (azimuth >= AZIMUTH_MIN && azimuth < AZIMUTH_MAX) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_COMPASS, azimuth);\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_COMPASS_ACCURACY, accuracy);\n\t\t}\n\n\t\tif (pressure != 0) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE, pressure);\n\t\t}\n\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tcontentResolver.insert(Uri.withAppendedPath(trackUri, TrackContentProvider.Schema.TBL_TRACKPOINT + \"s\"), values);\n\t}\n\n\t/**\n\t * Tracks a way point with link\n\t * \n\t * @param trackId\n\t *\t\t\t\tId of the track\n\t * @param location\n\t *\t\t\t\tLocation of waypoint\n\t * @param name\n\t *\t\t\t\tName of waypoint\n\t * @param link\n\t *\t\t\t\tLink of waypoint\n\t * @param uuid \n\t * \t\t\t    Unique id of the waypoint\n\t * @param azimuth\n\t * \t\t\t    azimuth angle in degrees (0-360deg) of the way point. if it is outside the given range it will be set null.\n\t * @param accuracy\n\t * \t\t\t  accuracy of the compass reading (as SensorManager.SENSOR_STATUS_ACCURACY*),\n\t * \t\t\t  ignored if azimuth is invalid.\n\t */\n\tpublic void wayPoint(long trackId, Location location, String name, String link, String uuid, float azimuth, int accuracy, float pressure) {\n\t\tLog.d(TAG, \"Tracking waypoint '\" + name + \"', track=\" + trackId + \", uuid=\" + uuid\n\t\t\t\t+ \", nbSatellites=\" + location.getExtras().getInt(\"satellites\")\n\t\t\t\t+ \", link='\"+ link + \"', location=\" + location + \", azimuth=\" + azimuth\n\t\t\t\t+ \", accuracy=\" + accuracy);\n\n\t\t// location should not be null, but sometime is.\n\t\t// TODO investigate this issue.\n\t\tif (location != null) {\n\t\t\tContentValues values = new ContentValues();\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_LATITUDE, location.getLatitude());\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_LONGITUDE, location.getLongitude());\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_NAME, name);\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_NBSATELLITES, location.getExtras().getInt(\"satellites\"));\n\n\t\t\tif (uuid != null) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_UUID, uuid);\n\t\t\t}\n\t\t\tif (location.hasAltitude()) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_ELEVATION, location.getAltitude());\n\t\t\t}\n\t\t\tif (location.hasAccuracy()) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_ACCURACY, location.getAccuracy());\n\t\t\t}\n\t\t\tif (link != null) {\n\t\t\t\t// Rename file to match location timestamp\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_LINK, renameFile(trackId, link, FILENAME_FORMATTER.format(location.getTime())));\n\t\t\t}\n\t\t\t\n\t\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\t\tif (prefs.getBoolean(OSMTracker.Preferences.KEY_GPS_IGNORE_CLOCK, OSMTracker.Preferences.VAL_GPS_IGNORE_CLOCK)) {\n\t\t\t\t// Use OS clock\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, System.currentTimeMillis());\n\t\t\t} else {\n\t\t\t\t// Use GPS clock\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, location.getTime());\n\t\t\t}\n\t\t\t\n\t\t\t//add compass if valid\n\t\t\tif (azimuth >= AZIMUTH_MIN && azimuth < AZIMUTH_MAX) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_COMPASS, azimuth);\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_COMPASS_ACCURACY, accuracy);\n\t\t\t}\n\n\t\t\tif (pressure != 0) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE, pressure);\n\t\t\t}\n\n\t\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\t\tcontentResolver.insert(Uri.withAppendedPath(trackUri, TrackContentProvider.Schema.TBL_WAYPOINT + \"s\"), values);\n\t\t}\n\t}\n\t\n\t/**\n\t * Updates a waypoint\n\t * \n\t * @param trackId\n\t *\t\t\t\tId of the track\n\t * @param uuid\n\t *\t\t\t\tUnique ID of the target waypoint\n\t * @param name\n\t *\t\t\t\tNew name\n\t * @param link\n\t *\t\t\t\tNew link\n\t */\n\tpublic void updateWayPoint(long trackId, String uuid, String name, String link) {\n\t\tLog.v(TAG, \"Updating waypoint with uuid '\" + uuid + \"'. New values: name='\" + name + \"', link='\" + link + \"'\");\n\t\tif (uuid != null) {\n\t\t\tContentValues values = new ContentValues();\n\t\t\tif (name != null) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_NAME, name);\n\t\t\t}\n\t\t\tif (link != null) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_LINK, link);\n\t\t\t}\n\t\t\t\n\t\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\t\tcontentResolver.update(Uri.withAppendedPath(trackUri, TrackContentProvider.Schema.TBL_WAYPOINT + \"s\"), values,\n\t\t\t\t\t\"uuid = ?\", new String[] { uuid });\n\t\t}\n\t}\n\t\n\t/**\n\t * Deletes a waypoint and its file associated (if exists)\n\t * \n\t * @param uuid\n\t *\t\t\t\tUnique ID of the target waypoint\n\t *\n\t * @param filepath\n\t * \t\t\t\tfile attached to the waypoint\n\t */\n\tpublic void deleteWayPoint(String uuid, String filepath) {\n\t\tLog.v(TAG, \"Deleting waypoint with uuid '\" + uuid);\n\t\tif (uuid != null) {\n\t\t\tcontentResolver.delete(Uri.withAppendedPath(TrackContentProvider.CONTENT_URI_WAYPOINT_UUID, uuid), null, null);\n\t\t}\n\n\t\t// delete file if exists\n\t\tFile file = (filepath != null) ? new File(filepath) : null;\n\t\tif (file != null && file.exists() && file.delete()) {\n\t\t\tLog.v(TAG, \"File deleted: \" + filepath);\n\t\t}\n\t}\n\n\t/**\n\t * Tracks a note point with link\n\t *\n\t * @param trackId \tId of the track\n\t * @param location \tLocation of note\n\t * @param name\t\ttext of the note\n\t * @param uuid\t\tUnique id of the note\n\t */\n\tpublic void trackNote(long trackId, Location location, String name, String uuid) {\n\t\tLog.d(TAG, \"Tracking note '\" + name + \"', track=\" + trackId + \", uuid=\" + uuid\n\t\t\t\t+ \", nbSatellites=\" + location.getExtras().getInt(\"satellites\")\n\t\t\t\t+ \", location=\" + location);\n\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_TRACK_ID, trackId);\n\t\tvalues.put(TrackContentProvider.Schema.COL_LATITUDE, location.getLatitude());\n\t\tvalues.put(TrackContentProvider.Schema.COL_LONGITUDE, location.getLongitude());\n\t\tvalues.put(TrackContentProvider.Schema.COL_NAME, name);\n\n\t\tif (uuid != null) {\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_UUID, uuid);\n\t\t}\n\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tif (prefs.getBoolean(OSMTracker.Preferences.KEY_GPS_IGNORE_CLOCK, OSMTracker.Preferences.VAL_GPS_IGNORE_CLOCK)) {\n\t\t\t// Use OS clock\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, System.currentTimeMillis());\n\t\t} else {\n\t\t\t// Use GPS clock\n\t\t\tvalues.put(TrackContentProvider.Schema.COL_TIMESTAMP, location.getTime());\n\t\t}\n\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tcontentResolver.insert(Uri.withAppendedPath(trackUri,\n\t\t\t\tTrackContentProvider.Schema.TBL_NOTE + \"s\"), values);\n\t}\n\n\t/**\n\t * Updates a note\n\t *\n\t * @param trackId \tId of the track\n\t * @param uuid \t\tUnique ID of the target note\n\t * @param name\t\tNew text value for the note\n\t */\n\tpublic void updateNote(long trackId, String uuid, String name) {\n\t\tLog.v(TAG, \"Updating note with uuid '\" + uuid + \"'. New values: name='\" + name);\n\t\tif (uuid != null) {\n\t\t\tContentValues values = new ContentValues();\n\t\t\tif (name != null) {\n\t\t\t\tvalues.put(TrackContentProvider.Schema.COL_NAME, name);\n\t\t\t}\n\n\t\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\t\tcontentResolver.update(Uri.withAppendedPath(trackUri, TrackContentProvider.Schema.TBL_NOTE + \"s\"), values,\n\t\t\t\t\t\"uuid = ?\", new String[] { uuid });\n\t\t}\n\t}\n\n\t/**\n\t * Deletes a note\n\t *\n\t * @param uuid Unique ID of the target waypoint\n\t */\n\tpublic void deleteNote(String uuid) {\n\t\tLog.v(TAG, \"Deleting note with uuid '\" + uuid);\n\t\tif (uuid != null) {\n\t\t\tcontentResolver.delete(Uri.withAppendedPath(TrackContentProvider.CONTENT_URI_NOTE_UUID, uuid), null, null);\n\t\t}\n\t}\n\t\n\t/**\n\t * Stop tracking by making the track inactive\n\t * @param trackId Id of the track\n\t */\n\tpublic void stopTracking(long trackId) {\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_ACTIVE, TrackContentProvider.Schema.VAL_TRACK_INACTIVE);\n\t\tcontentResolver.update(trackUri, values, null, null);\n\t}\n\n\t/**\n\t * Find the active track ID, if any.\n\t * @param cr  {@link ContentResolver} for query\n\t * @return  the active track ID, or -1\n\t */\n\tpublic static long getActiveTrackId(ContentResolver cr) {\n\t\tlong currentTrackId = -1;\n\t\tCursor ca = cr.query(TrackContentProvider.CONTENT_URI_TRACK_ACTIVE, null, null, null, null);\n\t\tif (ca.moveToFirst()) {\n\t\t\tcurrentTrackId = ca.getLong(ca.getColumnIndex(TrackContentProvider.Schema.COL_ID));\n\t\t}\n\t\tca.close();\n\t\treturn currentTrackId;\n\t}\n\n\t/**\n\t * Change the name of this track.\n\t * @param trackId Id of the track\n\t * @param name  New name of track, or null to clear it\n\t * @param cr  Database connection for query\n\t */\n\tpublic static void setTrackName(long trackId, String name, ContentResolver cr) {\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_NAME, name);\n\t\tcr.update(trackUri, values, null, null);\t\t\n\t}\n\n\t/**\n\t * Mark the export date/time of this track.\n\t * @param trackId Id of the track\n\t * @param exportTime Time of export, from {@link System#currentTimeMillis()}\n\t * @param cr {@link ContentResolver} for query\n\t */\n\tpublic static void setTrackExportDate(long trackId, long exportTime, ContentResolver cr) {\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_EXPORT_DATE, exportTime);\n\t\tcr.update(trackUri, values, null, null);\n\t}\n\t\n\tpublic static void setTrackUploadDate(long trackId, long uploadTime, ContentResolver cr) {\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE, uploadTime);\n\t\tcr.update(trackUri, values, null, null);\t\t\n\t}\n\n\tpublic static void setNoteUploadDate(long noteId, long uploadTime, ContentResolver cr) {\n\t\tUri noteUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_NOTE, noteId);\n\t\tContentValues values = new ContentValues();\n\t\tvalues.put(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE, uploadTime);\n\t\tcr.update(noteUri, values, null, null);\n\t}\n\t/**\n\t * Renames a file inside track directory, keeping the extension\n\t * \n\t * @param from\n\t *\t\t\t\tFile to rename (Ex: \"abc.png\")\n\t * @param to\n\t *\t\t\t\tFilename to use for new name (Ex: \"def\")\n\t * @return Renamed filename (Ex: \"def.png\")\n\t */\n\tprivate String renameFile(Long trackId, String from, String to) {\n\t\t// If all goes terribly wrong and we can't rename the file,\n\t\t// we will return the original file name we were given\n\t\tString _return = from;\n\t\t\n\t\tFile trackDir = getTrackDirectory(trackId, context);\n\t\t\n\t\tString ext = from.substring(from.lastIndexOf(\".\") + 1, from.length());\n\t\tFile origin = new File(trackDir + File.separator + from);\n\t\t\n\t\t// No point in trying to rename the file unless it exist\n\t\tif (origin.exists()) {\n\t\t\tFile target = new File(trackDir + File.separator + to + \".\" + ext);\n\t\t\t// Check & manages if there is already a file with this name\n\t\t\tfor (int i = 0; i < MAX_RENAME_ATTEMPTS && target.exists(); i++) {\n\t\t\t\ttarget = new File(trackDir + File.separator + to + i + \".\" + ext);\n\t\t\t}\n\t\t\n\t\t\torigin.renameTo(target);\n\t\t\t_return = target.getName(); \n\t\t}\n\t\t\n\t\treturn _return;\n\t}\n\n\t/**\n\t * @param cr Content Resolver to use\n\t * @param trackId Track id\n\t * @return A File to the track directory for the target track id.\n\t */\n\tpublic static File getTrackDirFromDB(ContentResolver cr, long trackId) {\n\t\tFile trackDir = null;\n\t\tCursor c = cr.query(\n\t\t\tContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId),\n\t\t\tnull, null, null, null);\n\t\n\t\tif (c != null && c.getCount() != 0) {\n\t\t\tc.moveToFirst();\n\t\t\t@SuppressWarnings(\"deprecation\")\n\t\t\tString trackPath = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_DIR));\n\t\t\tif (trackPath != null) {\n\t\t\t\ttrackDir = new File(trackPath);\n\t\t\t}\n\t\t}\n\t\tif (c != null && !c.isClosed()) {\n\t\t\tc.close();\n\t\t\tc = null;\n\t\t}\n\t\t\n\t\treturn trackDir;\n\t}\n\t\n\t/**\n\t * Generate a string of the directory path to external storage for the track id provided \n\t * @param trackId Track id\n\t * @param context\n\t * @return A the path where this track should store its files\n\t */\n\tpublic static File getTrackDirectory(long trackId, Context context) {\n\t\tFile _return = null;\n\t\t\n\t\tString trackStorageDirectory = context.getExternalFilesDir(null)\n\t\t+ OSMTracker.Preferences.VAL_STORAGE_DIR + File.separator + \"track\" + trackId;\n\t\t\n\t\t_return = new File(trackStorageDirectory);\t\t\n\t\treturn _return;\n\t}\n\n\tpublic static String getTrackNameInDB(long trackId, ContentResolver contentResolver) {\n\t\tString trackName = \"\";\n\t\tUri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId);\n\t\tCursor cursor = contentResolver.query(trackUri, null, null,\n\t\t\t\tnull, null);\n\t\tif(cursor != null && cursor.moveToFirst()) {\n\t\t\ttrackName = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\t\tcursor.close();\n\t\t}\n\n\t\treturn trackName;\n\t}\n\n\t/**\n\t *\n\t * @param startDate\n\t * @return\n\t */\n\tpublic Track getTrackByStartDate(Date startDate) {\n\t\t// Get the name of the track with the received start date\n\t\tString selection = TrackContentProvider.Schema.COL_START_DATE + \" = ?\";\n\t\tString[] args = {String.valueOf(startDate.getTime())};\n\t\tCursor cursor = context.getContentResolver().query(\n\t\t\t\tTrackContentProvider.CONTENT_URI_TRACK, null, selection, args,\n\t\t\t\tnull);\n\t\tTrack track = null;\n\t\tif(cursor != null && cursor.moveToFirst()){\n\t\t\t//This is due the build method. (TODO: a constructor with c as param needed in Track)\n\t\t\tlong trackId = cursor.getLong(\n\t\t\t\t\tcursor.getColumnIndex(TrackContentProvider.Schema.COL_ID));\n\t\t\ttrack = Track.build(trackId, cursor, contentResolver, true);\n\t\t}\n\t\treturn track;\n\t}\n\n\t//TODO: Fix this method. I suspect the query is not OK.\n\t// What happens if trackId is not valid?\n\tpublic Track getTrackById(long trackId) {\n\t\tCursor c = context.getContentResolver().query(ContentUris.withAppendedId(\n\t\t\t\tTrackContentProvider.CONTENT_URI_TRACK, trackId), null, null,\n\t\t\t\tnull, null);\n\t\tLog.d(TAG, \"Count of elements in cursor:\" + c.getCount());\n\n\t\tc.moveToFirst();\n\t\tTrack track = Track.build(trackId, c, contentResolver, true);\n\t\tc.close();\n\t\treturn track;\n\n\t}\n\n\tpublic List<Integer> getWayPointIdsOfTrack(long trackId) {\n\t\tList<Integer> out = new ArrayList<Integer>();\n\t\t// constant for the column track Id\n\t\tString[] mProjection = { TrackContentProvider.Schema.COL_ID };\n\n\t\tCursor cWayPoints = contentResolver.query( TrackContentProvider.waypointsUri(trackId),\n\t\t\t\tmProjection, null, null,\n\t\t\t\tTrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\n\n\t\tLog.d(TAG, \"Count of elements in cursor:\" + cWayPoints.getCount());\n\t\tfor(cWayPoints.moveToFirst(); !cWayPoints.isAfterLast(); cWayPoints.moveToNext()) {\n\t\t\tout.add(cWayPoints.getInt(\n\t\t\t\t\tcWayPoints.getColumnIndex(TrackContentProvider.Schema.COL_ID)));\n\t\t}\n\t\tcWayPoints.close();\n\n\t\tLog.d(TAG, \"Count of elements in returned list:\" + out.size());\n\n\t\treturn out;\n\t}\n\n\tpublic WayPoint getWayPointById(Integer wayPointId) {\n\t\tWayPoint wpt = null;\n\n\t\tCursor cWayPoint = contentResolver.query(\n\t\t\t\tTrackContentProvider.waypointUri(wayPointId),\n\t\t\t\tnull, null, null, null);\n\t\tLog.d(TAG, \"Count of elements in cursor (expected 1): \"\n\t\t\t\t+ cWayPoint.getCount());\n\n\t\tcWayPoint.moveToFirst();\n\t\twpt = new WayPoint(cWayPoint);\n\t\treturn wpt;\n\t}\n\n\tpublic List<Integer> getTrackPointIdsOfTrack(long trackId) {\n\t\tList<Integer> out = new ArrayList<Integer>();\n\t\t// constant for the column track Id\n\t\tString[] mProjection = { TrackContentProvider.Schema.COL_ID };\n\n\t\tCursor cTrackPoints = contentResolver.query( TrackContentProvider.trackPointsUri(trackId),\n\t\t\t\tmProjection, null, null,\n\t\t\t\tTrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\n\n\t\tLog.d(TAG, \"Count of elements in cTrackPoints:\" + cTrackPoints.getCount());\n\t\tfor(cTrackPoints.moveToFirst(); !cTrackPoints.isAfterLast(); cTrackPoints.moveToNext()) {\n\t\t\tout.add(cTrackPoints.getInt(\n\t\t\t\t\tcTrackPoints.getColumnIndex(TrackContentProvider.Schema.COL_ID)));\n\t\t}\n\t\tcTrackPoints.close();\n\t\tLog.d(TAG, \"Count of elements in returned list:\" + out.size());\n\n\t\treturn out;\n\t}\n\n\tpublic TrackPoint getTrackPointById(Integer trackPointId) {\n\t\tTrackPoint trkpt = null;\n\n\t\tCursor cTrackPoint = contentResolver.query(\n\t\t\t\tTrackContentProvider.trackpointUri(trackPointId),\n\t\t\t\tnull, null, null, null);\n\t\tLog.d(TAG, \"Count of elements in cursor (expected 1): \"\n\t\t\t\t+ cTrackPoint.getCount());\n\n\t\tcTrackPoint.moveToFirst();\n\t\ttrkpt = new TrackPoint(cTrackPoint);\n\t\treturn trkpt;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/DatabaseHelper.java",
    "content": "package net.osmtracker.db;\r\n\r\nimport java.io.File;\r\nimport java.io.FilenameFilter;\r\n\r\nimport net.osmtracker.OSMTracker;\r\nimport net.osmtracker.util.FileSystemUtils;\r\nimport android.content.ContentValues;\r\nimport android.content.Context;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.database.sqlite.SQLiteOpenHelper;\r\nimport android.util.Log;\r\n\r\nimport net.osmtracker.db.model.Track;\r\n\r\n/**\r\n * Helper for managing database.\r\n * \r\n * @author Nicolas Guillaumin\r\n * \r\n */\r\npublic class DatabaseHelper extends SQLiteOpenHelper {\r\n\r\n\tprivate static final String TAG = DatabaseHelper.class.getSimpleName();\t\r\n\t\r\n\t/**\r\n\t * SQL for creating table TRACKPOINT\r\n\t */\r\n\tprivate static final String SQL_CREATE_TABLE_TRACKPOINT = \"\"\r\n\t\t+ \"create table \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \" (\"\r\n\t\t+ TrackContentProvider.Schema.COL_ID\t+ \" integer primary key autoincrement,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TRACK_ID + \" integer not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LATITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LONGITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_SPEED + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ELEVATION + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ACCURACY + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TIMESTAMP + \" long not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_COMPASS + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_COMPASS_ACCURACY + \" integer null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE + \" double null\" + \")\";\r\n\r\n\t/**\r\n\t * SQL for creating index TRACKPOINT_idx (track id)\r\n\t * @since 12\r\n\t */\r\n\tprivate static final String SQL_CREATE_IDX_TRACKPOINT_TRACK\r\n\t\t= \"create index if not exists \"\r\n\t\t+ TrackContentProvider.Schema.TBL_TRACKPOINT\r\n\t\t+ \"_idx ON \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \"(\" + TrackContentProvider.Schema.COL_TRACK_ID + \")\";\r\n\r\n\t/**\r\n\t * SQL for creating table WAYPOINT\r\n\t */\r\n\tprivate static final String SQL_CREATE_TABLE_WAYPOINT = \"\"\r\n\t\t+ \"create table \" + TrackContentProvider.Schema.TBL_WAYPOINT + \" (\"\r\n\t\t+ TrackContentProvider.Schema.COL_ID + \" integer primary key autoincrement,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TRACK_ID + \" integer not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_UUID + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LATITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LONGITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ELEVATION + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ACCURACY + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TIMESTAMP + \" long not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_NAME + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LINK + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_NBSATELLITES + \" integer not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_COMPASS + \" double null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_COMPASS_ACCURACY + \" integer null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE + \" double null\"\t+ \")\";\r\n\r\n\t/**\r\n\t * SQL for creating index WAYPOINT_idx (track id)\r\n\t * @since 12\r\n\t */\r\n\tprivate static final String SQL_CREATE_IDX_WAYPOINT_TRACK\r\n\t\t= \"create index if not exists \"\r\n\t\t+ TrackContentProvider.Schema.TBL_WAYPOINT\r\n\t\t+ \"_idx ON \" + TrackContentProvider.Schema.TBL_WAYPOINT + \"(\" + TrackContentProvider.Schema.COL_TRACK_ID + \")\";\r\n\r\n\t/**\r\n\t * SQL for creating table TRACK\r\n\t * @since 5\r\n\t */\r\n\t@SuppressWarnings(\"deprecation\")\r\n\tprivate static final String SQL_CREATE_TABLE_TRACK = \"\"\r\n\t\t+ \"create table \" + TrackContentProvider.Schema.TBL_TRACK + \" (\"\r\n\t\t+ TrackContentProvider.Schema.COL_ID + \" integer primary key autoincrement,\"\r\n\t\t+ TrackContentProvider.Schema.COL_NAME + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_DESCRIPTION + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TAGS + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_OSM_VISIBILITY + \" text default '\"+ Track.OSMVisibility.Private+\"',\"\r\n\t\t+ TrackContentProvider.Schema.COL_START_DATE + \" long not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_DIR + \" text,\" // unused since DB_VERSION 13, since SQLite doesn't support to remove a column it will stay for now\r\n\t\t+ TrackContentProvider.Schema.COL_ACTIVE + \" integer not null default 0,\"\r\n\t\t+ TrackContentProvider.Schema.COL_EXPORT_DATE + \" long,\"  // null indicates not yet exported\r\n\t\t+ TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE + \" long\" // null indicates not yet uploaded\r\n\t\t+ \")\";\r\n\r\n\t/**\r\n\t * SQL for creating table NOTE\r\n\t * @since 18 (version 2026.02)\r\n\t */\r\n\tprivate static final String SQL_CREATE_TABLE_NOTE = \"\"\r\n\t\t+ \"create table \" + TrackContentProvider.Schema.TBL_NOTE + \" (\"\r\n\t\t+ TrackContentProvider.Schema.COL_ID + \" integer primary key autoincrement,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TRACK_ID + \" integer not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_UUID + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LATITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_LONGITUDE + \" double not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_TIMESTAMP + \" long not null,\"\r\n\t\t+ TrackContentProvider.Schema.COL_NAME + \" text,\"\r\n\t\t+ TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE + \" long\" // null indicates not yet uploaded\r\n\t    + \")\";\r\n\r\n\t/**\r\n\t * Database name.\r\n\t */\r\n\tpublic static final String DB_NAME = OSMTracker.class.getSimpleName();\r\n\r\n\t/**\r\n\t * Database version.\r\n\t * If you change the version, be sure that {@link #onUpgrade(SQLiteDatabase, int, int)} can handle it.\r\n\t * Only required for versions after v0.5.0 as before the DB was fully erased and recreated from scratch\r\n\t * for each new track.\r\n\t *<pre>\r\n\t *  v1: (r117)  v0.4.0, v0.4.1\r\n\t *  v2: add TBL_CONFIG; that table's been dropped since then (r163)  v0.4.2\r\n\t *  v3: add TBL_WAYPOINT.COL_UUID  (r187)  v0.4.3\r\n\t *  v5: add TBL_TRACK; TRACKPOINT, WAYPOINT +COL_TRACK_ID  (r198)\r\n\t *  v7: add TBL_TRACK.COL_DIR; drop TBL_CONFIG  (r201)\r\n\t *  v9: add TBL_TRACK.COL_ACTIVE  (r206)\r\n\t * v12: add TBL_TRACK.COL_EXPORT_DATE, IDX_TRACKPOINT_TRACK, IDX_WAYPOINT_TRACK (r207) v0.5.0\r\n\t * v13: TBL_TRACK.COL_DIR is now deprecated (rxxx) v0.5.3 TODO: fill in correct revision and version\r\n\t * v14: add TBL_TRACK.COL_OSM_UPLOAD_DATE, TBL_TRACK.COL_DESCRIPTION,\r\n\t * \t\t\tTBL_TRACK.COL_TAGS and TBL_TRACK.COL_OSM_VISIBILITY for OSM upload - v0.6.0 \r\n\t * v15: add TBL_TRACKPOINT.COL_SPEED\r\n\t * v16: add TBL_TRACKPOINT.COL_COMPASS, TBL_TRACKPOINT.COL_COMPASS_ACCURACY,\r\n\t *          TBL_WAYPOINT.COL_COMPASS and TBL_WAYPOINT.COL_COMPASS_ACCURACY\r\n\t * v17: add TBL_TRACKPOINT.COL_ATMOSPHERIC_PRESSURE and TBL_WAYPOINT.COL_ATMOSPHERIC_PRESSURE\r\n\t * v18: add TBL_NOTE\r\n\t *</pre>\r\n\t */\r\n\tprivate static final int DB_VERSION = 18;\r\n\r\n\tprivate Context context;\r\n\r\n\tpublic DatabaseHelper(Context context) {\r\n\t\tsuper(context, DB_NAME, null, DB_VERSION);\r\n\t\tthis.context = context;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onCreate(SQLiteDatabase db) {\r\n\t\tdb.execSQL(\"drop table if exists \" + TrackContentProvider.Schema.TBL_TRACKPOINT);\r\n\t\tdb.execSQL(SQL_CREATE_TABLE_TRACKPOINT);\r\n\t\tdb.execSQL(SQL_CREATE_IDX_TRACKPOINT_TRACK);\r\n\t\tdb.execSQL(\"drop table if exists \" + TrackContentProvider.Schema.TBL_WAYPOINT);\r\n\t\tdb.execSQL(SQL_CREATE_TABLE_WAYPOINT);\r\n\t\tdb.execSQL(SQL_CREATE_IDX_WAYPOINT_TRACK);\r\n\t\tdb.execSQL(\"drop table if exists \" + TrackContentProvider.Schema.TBL_TRACK);\r\n\t\tdb.execSQL(SQL_CREATE_TABLE_TRACK);\r\n\t\tdb.execSQL(\"drop table if exists \" + TrackContentProvider.Schema.TBL_NOTE);\r\n\t\tdb.execSQL(SQL_CREATE_TABLE_NOTE);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r\n\t\tswitch(oldVersion){\r\n\t\tcase 1:\r\n\t\tcase 2:\r\n\t\tcase 3:\r\n\t\tcase 4:\r\n\t\tcase 5:\r\n\t\tcase 6:\r\n\t\tcase 7:\r\n\t\tcase 8:\r\n\t\tcase 9:\r\n\t\tcase 10:\r\n\t\tcase 11: //pre v0.5.0 (completely create a new database)\r\n\t\t\tonCreate(db);\r\n\t\t\tbreak;\r\n\t\tcase 12:\r\n\t\t\tmanageNewStoragePath(db);\r\n\t\tcase 13:\r\n\t\t\t// Create 'osm_upload_date', 'description', 'tags' and 'visibility'\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACK + \" add column \" + TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE+ \" long\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACK + \" add column \" + TrackContentProvider.Schema.COL_DESCRIPTION + \" text\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACK + \" add column \" + TrackContentProvider.Schema.COL_TAGS + \" text\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACK + \" add column \" + TrackContentProvider.Schema.COL_OSM_VISIBILITY\r\n\t\t\t\t\t+ \" text default '\"+ Track.OSMVisibility.Private+\"'\");\r\n\t\tcase 14:\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \" add column \" + TrackContentProvider.Schema.COL_SPEED + \" double null\");\r\n\t\tcase 15:\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \" add column \" + TrackContentProvider.Schema.COL_COMPASS + \" double null\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \" add column \" + TrackContentProvider.Schema.COL_COMPASS_ACCURACY + \" integer null\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_WAYPOINT + \" add column \" + TrackContentProvider.Schema.COL_COMPASS + \" double null\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_WAYPOINT + \" add column \" + TrackContentProvider.Schema.COL_COMPASS_ACCURACY + \" integer null\");\r\n\t\tcase 16:\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_TRACKPOINT + \" add column \" + TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE + \" double null\");\r\n\t\t\tdb.execSQL(\"alter table \" + TrackContentProvider.Schema.TBL_WAYPOINT + \" add column \" + TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE + \" double null\");\r\n\t\tcase 17:\r\n\t\t\tdb.execSQL(SQL_CREATE_TABLE_NOTE);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * copies files from the tracks to our new storage directory and removes the path reference in COL_DIR\r\n\t * @param db the database to work on \r\n\t */\r\n\t@SuppressWarnings(\"deprecation\")\r\n\tprivate void manageNewStoragePath(SQLiteDatabase db){\r\n\t\tLog.d(TAG,\"manageNewStoragePath\");\r\n\t\t\r\n\t\t// we'll need this FilenameFitler to clean up our track directory\r\n\t\tFilenameFilter gpxFilenameFilter = new FilenameFilter() {\r\n\t\t\t@Override\r\n\t\t\tpublic boolean accept(File dir, String filename) {\r\n\t\t\t\tif(filename.toLowerCase().endsWith(\".gpx\"))\r\n\t\t\t\t\treturn true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\t// query all tracks\r\n\t\tString[] columns = new String[]{TrackContentProvider.Schema.COL_ID, TrackContentProvider.Schema.COL_DIR};\r\n\t\tCursor cursor = db.query(TrackContentProvider.Schema.TBL_TRACK, columns, null, null, null, null, null);\r\n\t\t\r\n\t\t// if we have a valid cursor and can write to the sdcard, we'll go on and try to copy the files\r\n\t\tif(cursor != null && cursor.moveToFirst()){\r\n\t\t\tLog.d(TAG, \"manageNewStoragePath (found \" + cursor.getCount() + \" tracks to be processed)\");\r\n\t\t\tdo{\r\n\t\t\t\tlong trackId = cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ID));\r\n\t\t\t\tLog.d(TAG,\"manageNewStoragePath (\" + trackId + \")\");\r\n\t\t\t\tString oldDirName = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_DIR));\r\n\t\t\t\tFile newDir = DataHelper.getTrackDirectory(trackId, context);\r\n\t\t\t\tFile oldDir = new File(oldDirName);\r\n\t\t\t\tif(oldDir.exists() && oldDir.canRead()){\r\n\t\t\t\t\t\r\n\t\t\t\t\t// if our new directory doesn't exist, we'll create it\r\n\t\t\t\t\tif(!newDir.exists())\r\n\t\t\t\t\t\tnewDir.mkdirs();\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(newDir.exists() && newDir.canWrite()){\r\n\t\t\t\t\t\tLog.d(TAG,\"manageNewStoragePath (\" + trackId + \"): copy directory\");\r\n\t\t\t\t\t\t// we'll first copy all files to our new storage area... we'll clean up later\r\n\t\t\t\t\t\tFileSystemUtils.copyDirectoryContents(newDir, oldDir);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// cleaning up new storage area\r\n\t\t\t\t\t\t// find gpx files we accidentally copied to our new storage area and delete them \r\n\t\t\t\t\t\tfor(File gpxFile:newDir.listFiles(gpxFilenameFilter)){\r\n\t\t\t\t\t\t\tLog.d(TAG,\"manageNewStoragePath (\" + trackId + \"): deleting gpx file [\"+gpxFile+\"]\");\r\n\t\t\t\t\t\t\tgpxFile.delete();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tLog.e(TAG, \"manageNewStoragePath (\" + trackId + \"): directory [\"+newDir+\"] is not writable or could not be created\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}while(cursor.moveToNext());\r\n\t\t}\r\n\t\t\r\n\t\t//close cursor\r\n\t\tif(cursor !=null && !cursor.isClosed()){\r\n\t\t\tcursor.close();\r\n\t\t}\r\n\t\t\r\n\t\tContentValues vals = new ContentValues();\r\n\t\tvals.putNull(TrackContentProvider.Schema.COL_DIR);\r\n\t\tdb.update(TrackContentProvider.Schema.TBL_TRACK, vals, null, null);\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/ExportDatabaseTask.java",
    "content": "package net.osmtracker.db;\n\nimport android.os.AsyncTask;\nimport android.os.Bundle;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.zip.GZIPOutputStream;\n\nimport net.osmtracker.activity.About;\n\n/**\n * Task to export the internal database to the external storage,\n * for debugging purposes\n */\npublic class ExportDatabaseTask extends AsyncTask<File, Float, String>{\n\n    private static final int BUF_SIZE = 16 * 1024;\n\n    private static final String DB_FILE_EXT = \".sqlitedb.gz\";\n\n    /** Activity to show the progress dialog */\n    private final About activity;\n\n    /** Target folder where to save the export */\n    private final File targetFolder;\n\n    /**\n     * Export the database to a target folder\n     * @param activity Activity to display progress dialog\n     * @param targetFolder Folder where to save the database file\n     */\n    public ExportDatabaseTask(About activity, File targetFolder) {\n        this.activity = activity;\n        this.targetFolder = targetFolder;\n    }\n\n    @Override\n    protected String doInBackground(File... files) {\n        if (files.length > 1) {\n            throw new IllegalArgumentException(\"More than 1 file is not supported\");\n        }\n\n        File targetFile = new File(targetFolder, DatabaseHelper.DB_NAME + DB_FILE_EXT);\n        targetFile.getParentFile().mkdirs();\n\n        long fileSize = files[0].length();\n        InputStream is = null;\n        OutputStream os = null;\n        try {\n            is = new FileInputStream(files[0]);\n            os = new GZIPOutputStream(new FileOutputStream(targetFile));\n            byte[] buffer = new byte[BUF_SIZE];\n            long copied = 0;\n            int count;\n\n            while ((count = is.read(buffer)) != -1) {\n                os.write(buffer, 0, count);\n                copied += count;\n                publishProgress((float) fileSize / copied);\n            }\n\n            return targetFile.getAbsolutePath();\n        } catch (IOException e) {\n            return e.getLocalizedMessage();\n        } finally {\n            if (is != null) {\n                try { is.close(); }\n                catch (IOException ioe) { }\n            }\n            if (os != null) {\n                try { os.close(); }\n                catch (IOException ioe) { }\n            }\n        }\n    }\n\n    @Override\n    protected void onProgressUpdate(Float... values) {\n        if (activity.getExportDbProgressDialog() != null) {\n            activity.getExportDbProgressDialog().setProgress(Math.round(values[0] * 100));\n        }\n    }\n\n    @Override\n    protected void onPostExecute(String result) {\n        Bundle b = new Bundle();\n        b.putString(\"result\", result);\n        activity.removeDialog(About.DIALOG_EXPORT_DB);\n        activity.showDialog(About.DIALOG_EXPORT_DB_COMPLETED, b);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/TrackContentProvider.java",
    "content": "package net.osmtracker.db;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport net.osmtracker.OSMTracker;\n\nimport android.content.ContentProvider;\nimport android.content.ContentResolver;\nimport android.content.ContentUris;\nimport android.content.ContentValues;\nimport android.content.UriMatcher;\nimport android.database.Cursor;\nimport android.database.sqlite.SQLiteQueryBuilder;\nimport android.net.Uri;\nimport android.util.Log;\n\n/**\n * Content provider for track data, using Android\n * {@link ContentProvider} mechanism.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class TrackContentProvider extends ContentProvider {\n\n\tprivate static final String TAG = TrackContentProvider.class.getSimpleName();\n\n\t/**\n\t * Authority for Uris\n\t */\n\tpublic static final String AUTHORITY = OSMTracker.class.getPackage().getName() + \".provider\";\n\n\t/**\n\t * Uri for track\n\t */\n\tpublic static final Uri CONTENT_URI_TRACK = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_TRACK);\n\n\tpublic static final Uri CONTENT_URI_NOTE = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_NOTE);\n\n\t/**\n\t * Uri for the active track\n\t */\n\tpublic static final Uri CONTENT_URI_TRACK_ACTIVE = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_TRACK + \"/active\");\n\n\t/**\n\t * Uri for a specific waypoint\n\t */\n\tpublic static final Uri CONTENT_URI_WAYPOINT = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_WAYPOINT);\n\n\t/**\n\t * Uri for a specific waypoint by uuid\n\t */\n\tpublic static final Uri CONTENT_URI_WAYPOINT_UUID = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_WAYPOINT + \"/uuid\");\n\n\t/**\n\t * Uri for a specific note by uuid\n\t */\n\tpublic static final Uri CONTENT_URI_NOTE_UUID = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_NOTE + \"/uuid\");\n\n\t/**\n\t * Uri for a specific trackpoint\n\t */\n\tpublic static final Uri CONTENT_URI_TRACKPOINT = Uri.parse(\"content://\" + AUTHORITY + \"/\" + Schema.TBL_TRACKPOINT);\n\n\t/**\n\t * tables and joins to be used within a query to get the important informations of a track\n\t */\n\tprivate static final String TRACK_TABLES = Schema.TBL_TRACK + \" left join \" + Schema.TBL_TRACKPOINT + \" on \" + Schema.TBL_TRACK + \".\" + Schema.COL_ID + \" = \" + Schema.TBL_TRACKPOINT + \".\" + Schema.COL_TRACK_ID;\n\t\n\t/**\n\t * the projection to be used to get the important informations of a track\n\t */\n\tprivate static final String[] TRACK_TABLES_PROJECTION = {\n\t\tSchema.TBL_TRACK + \".\" + Schema.COL_ID + \" as \" + Schema.COL_ID,\n\t\tSchema.COL_ACTIVE,\n\t\tSchema.COL_DIR,\n\t\tSchema.COL_EXPORT_DATE,\n\t\tSchema.COL_OSM_UPLOAD_DATE,\n\t\tSchema.TBL_TRACK + \".\" + Schema.COL_NAME + \" as \"+ Schema.COL_NAME,\n\t\tSchema.COL_DESCRIPTION,\n\t\tSchema.COL_TAGS,\n\t\tSchema.COL_OSM_VISIBILITY,\n\t\tSchema.COL_START_DATE,\n\t\t\"count(\" + Schema.TBL_TRACKPOINT + \".\" + Schema.COL_ID + \") as \" + Schema.COL_TRACKPOINT_COUNT,\n\t\t\"(SELECT count(\" + Schema.TBL_WAYPOINT + \".\" + Schema.COL_TRACK_ID +\") \" +\n\t\t\t\t\"FROM \" + Schema.TBL_WAYPOINT + \" \" +\n\t\t\t\t\"WHERE \" +\tSchema.TBL_WAYPOINT + \".\" + Schema.COL_TRACK_ID +\" \" +\n\t\t\t\t\t\"= \" + Schema.TBL_TRACK + \".\" + Schema.COL_ID +\") \" +\n\t\t\t\t\"as \" + Schema.COL_WAYPOINT_COUNT,\n\t\t\"(SELECT count(\" + Schema.TBL_NOTE + \".\" + Schema.COL_TRACK_ID +\") \" +\n\t\t\t\t\"FROM \" + Schema.TBL_NOTE + \" \" +\n\t\t\t\t\"WHERE \" +\tSchema.TBL_NOTE + \".\" + Schema.COL_TRACK_ID +\" \" +\n\t\t\t\t\"= \" + Schema.TBL_TRACK + \".\" + Schema.COL_ID +\") \" +\n\t\t\t\t\"as \" + Schema.COL_NOTE_COUNT,\n\t};\n\n\t/**\n\t * the group by statement that is used for the track statements\n\t */\n\tprivate static final String TRACK_TABLES_GROUP_BY = Schema.TBL_TRACK + \".\" + Schema.COL_ID;\n\t\n\t\n\t\n\t/**\n\t * Uri Matcher\n\t */\n\tprivate static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);\n\tstatic {\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK, Schema.URI_CODE_TRACK);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/active\", Schema.URI_CODE_TRACK_ACTIVE);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#\", Schema.URI_CODE_TRACK_ID);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#/start\", Schema.URI_CODE_TRACK_START);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#/end\", Schema.URI_CODE_TRACK_END);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#/\" + Schema.TBL_WAYPOINT + \"s\", Schema.URI_CODE_TRACK_WAYPOINTS);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#/\" + Schema.TBL_NOTE + \"s\", Schema.URI_CODE_TRACK_NOTES);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACK + \"/#/\" + Schema.TBL_TRACKPOINT + \"s\", Schema.URI_CODE_TRACK_TRACKPOINTS);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_WAYPOINT + \"/#\", Schema.URI_CODE_WAYPOINT_ID);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_WAYPOINT + \"/uuid/*\", Schema.URI_CODE_WAYPOINT_UUID);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_TRACKPOINT + \"/#\", Schema.URI_CODE_TRACKPOINT_ID);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_NOTE + \"/#\", Schema.URI_CODE_NOTE_ID);\n\t\turiMatcher.addURI(AUTHORITY, Schema.TBL_NOTE + \"/uuid/*\", Schema.URI_CODE_NOTE_UUID);\n\t}\n\t\n\t/**\n\t * @param trackId target track id\n\t * @return Uri for the waypoints of the track \n\t */\n\tpublic static final Uri waypointsUri(long trackId) {\n\t\treturn Uri.withAppendedPath(\n\t\t\t\tContentUris.withAppendedId(CONTENT_URI_TRACK, trackId),\n\t\t\t\tSchema.TBL_WAYPOINT + \"s\" );\n\t}\n\n\t/**\n\t * @param waypointId target waypoint id\n\t * @return Uri for the waypoint\n\t */\n\tpublic static final Uri waypointUri(long waypointId) {\n\t\treturn ContentUris.withAppendedId(CONTENT_URI_WAYPOINT, waypointId);\n\t}\n\n\t/**\n\t * @param noteId target note id\n\t * @return Uri for the note\n\t */\n\tpublic static final Uri noteUri(long noteId) {\n\t\treturn ContentUris.withAppendedId(CONTENT_URI_NOTE, noteId);\n\t}\n\n\t/**\n\t * @param trackId target track id\n\t * @return Uri for the notes of the track\n\t */\n\tpublic static final Uri notesUri(long trackId) {\n\t\treturn Uri.withAppendedPath(\n\t\t\t\tContentUris.withAppendedId(CONTENT_URI_TRACK, trackId),\n\t\t\t\tSchema.TBL_NOTE + \"s\" );\n\t}\n\n\t/**\n\t * @param trackId target track id\n\t * @return Uri for the trackpoints of the track \n\t */\n\tpublic static final Uri trackPointsUri(long trackId) {\n\t\treturn Uri.withAppendedPath(\n\t\t\t\tContentUris.withAppendedId(CONTENT_URI_TRACK, trackId),\n\t\t\t\tSchema.TBL_TRACKPOINT + \"s\" );\t\t\n\t}\n\n\t/**\n\t * @param trackpointId target trackpoint id\n\t * @return Uri for the trackpoint\n\t */\n\tpublic static final Uri trackpointUri(long trackpointId) {\n\t\treturn ContentUris.withAppendedId(CONTENT_URI_TRACKPOINT, trackpointId);\n\t}\n\n\t/**\n\t * @param trackId target track id\n\t * @return Uri for the startpoint of the track \n\t */\n\tpublic static final Uri trackStartUri(long trackId) {\n\t\treturn Uri.withAppendedPath(\n\t\t\t\tContentUris.withAppendedId(CONTENT_URI_TRACK, trackId),\n\t\t\t\t\"start\" );\t\t\n\t}\n\n\t/**\n\t * @param trackId target track id\n\t * @return Uri for the endpoint of the track \n\t */\n\tpublic static final Uri trackEndUri(long trackId) {\n\t\treturn Uri.withAppendedPath(\n\t\t\t\tContentUris.withAppendedId(CONTENT_URI_TRACK, trackId),\n\t\t\t\t\"end\" );\t\t\n\t}\n\n\t/**\n\t * Database Helper\n\t */\n\tprivate DatabaseHelper dbHelper;\n\n\t@Override\n\tpublic boolean onCreate() {\n\t\tdbHelper = new DatabaseHelper(getContext());\n\t\treturn true;\n\t}\n\n\t@Override\n\tpublic int delete(Uri uri, String selection, String[] selectionArgs) {\n\t\tLog.v(TAG, \"delete(), uri=\" + uri);\n\n\t\tint count;\n\t\t// Select which data type to delete\n\t\tswitch (uriMatcher.match(uri)) {\n\t\tcase Schema.URI_CODE_TRACK:\n\t\t\tcount = dbHelper.getWritableDatabase().delete(Schema.TBL_TRACK, selection, selectionArgs);\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_ID:\n\t\t\t// the URI matches a specific track, delete all related entities\n\t\t\tString trackId = Long.toString(ContentUris.parseId(uri));\n\t\t\tdbHelper.getWritableDatabase().delete(Schema.TBL_WAYPOINT, Schema.COL_TRACK_ID + \" = ?\", new String[] {trackId});\n\t\t\tdbHelper.getWritableDatabase().delete(Schema.TBL_TRACKPOINT, Schema.COL_TRACK_ID + \" = ?\", new String[] {trackId});\n\t\t\tcount = dbHelper.getWritableDatabase().delete(Schema.TBL_TRACK, Schema.COL_ID + \" = ?\", new String[] {trackId});\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_WAYPOINT_UUID:\n\t\t\tString uuid = uri.getLastPathSegment();\n\t\t\tif(uuid != null){\n\t\t\t\tcount = dbHelper.getWritableDatabase().delete(Schema.TBL_WAYPOINT, Schema.COL_UUID + \" = ?\", new String[]{uuid});\n\t\t\t}else{\n\t\t\t\tcount = 0;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_NOTE_UUID:\n\t\t\tString noteUUID = uri.getLastPathSegment();\n\t\t\tif(noteUUID != null){\n\t\t\t\tcount = dbHelper.getWritableDatabase().delete(Schema.TBL_NOTE, Schema.COL_UUID + \" = ?\", new String[]{noteUUID});\n\t\t\t}else{\n\t\t\t\tcount = 0;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new IllegalArgumentException(\"Unknown URI: \" + uri);\n\t\t}\n\n\t\tgetContext().getContentResolver().notifyChange(uri, null);\n\t\treturn count;\n\t}\n\n\t/**\n\t * Match and get the URI type, if recognized:\n\t * Matches {@link Schema#URI_CODE_TRACK_TRACKPOINTS}, {@link Schema#URI_CODE_TRACK_WAYPOINTS},\n\t * {link Schema#URI_CODE_TRACK_NOTES} or {@link Schema#URI_CODE_TRACK}.\n\t * @throws IllegalArgumentException if not matched\n\t */\n\t@Override\n\tpublic String getType(Uri uri) throws IllegalArgumentException {\n\t\tLog.v(TAG, \"getType(), uri=\" + uri);\n\n\t\t// Select which type to return\n\t\tswitch (uriMatcher.match(uri)) {\n\t\tcase Schema.URI_CODE_TRACK_TRACKPOINTS:\n\t\t\treturn ContentResolver.CURSOR_DIR_BASE_TYPE + \"/vnd.\" + OSMTracker.class.getPackage() + \".\"\n\t\t\t\t\t+ Schema.TBL_TRACKPOINT;\n\t\tcase Schema.URI_CODE_TRACK_WAYPOINTS:\n\t\t\treturn ContentResolver.CURSOR_DIR_BASE_TYPE + \"/vnd.\" + OSMTracker.class.getPackage() + \".\"\n\t\t\t\t\t+ Schema.TBL_WAYPOINT;\n\t\tcase Schema.URI_CODE_TRACK_NOTES:\n\t\t\treturn ContentResolver.CURSOR_DIR_BASE_TYPE + \"/vnd.\" + OSMTracker.class.getPackage() + \".\"\n\t\t\t\t\t+ Schema.TBL_NOTE;\n\t\tcase Schema.URI_CODE_TRACK:\n\t\t\treturn ContentResolver.CURSOR_DIR_BASE_TYPE + \"/vnd.\" + OSMTracker.class.getPackage() + \".\"\n\t\t\t\t\t+ Schema.TBL_TRACK;\n\t\tdefault:\n\t\t\tthrow new IllegalArgumentException(\"Unknown URL \" + uri);\n\t\t}\n\t}\n\n\t@Override\n\tpublic Uri insert(Uri uri, ContentValues values) {\n\t\tLog.v(TAG, \"insert(), uri=\" + uri + \", values=\" + values.toString());\n\n\t\t// Select which data type to insert\n\t\tswitch (uriMatcher.match(uri)) {\n\t\tcase Schema.URI_CODE_TRACK_TRACKPOINTS:\n\t\t\t// Check that mandatory columns are present.\n\t\t\tif (values.containsKey(Schema.COL_TRACK_ID) && values.containsKey(Schema.COL_LONGITUDE)\n\t\t\t\t\t&& values.containsKey(Schema.COL_LATITUDE) && values.containsKey(Schema.COL_TIMESTAMP)) {\n\n\t\t\t\tlong rowId = dbHelper.getWritableDatabase().insert(Schema.TBL_TRACKPOINT, null, values);\n\t\t\t\tif (rowId > 0) {\n\t\t\t\t\tUri trackpointUri = ContentUris.withAppendedId(uri, rowId);\n\t\t\t\t\tgetContext().getContentResolver().notifyChange(trackpointUri, null);\n\t\t\t\t\treturn trackpointUri;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new IllegalArgumentException(\"values should provide \" + Schema.COL_LONGITUDE + \", \"\n\t\t\t\t\t\t+ Schema.COL_LATITUDE + \", \" + Schema.COL_TIMESTAMP);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_WAYPOINTS:\n\t\t\t// Check that mandatory columns are present.\n\t\t\tif (values.containsKey(Schema.COL_TRACK_ID) && values.containsKey(Schema.COL_LONGITUDE)\n\t\t\t\t\t&& values.containsKey(Schema.COL_LATITUDE) && values.containsKey(Schema.COL_TIMESTAMP) ) {\n\n\t\t\t\tlong rowId = dbHelper.getWritableDatabase().insert(Schema.TBL_WAYPOINT, null, values);\n\t\t\t\tif (rowId > 0) {\n\t\t\t\t\tUri waypointUri = ContentUris.withAppendedId(uri, rowId);\n\t\t\t\t\tgetContext().getContentResolver().notifyChange(waypointUri, null);\n\t\t\t\t\treturn waypointUri;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new IllegalArgumentException(\"values should provide \" + Schema.COL_LONGITUDE + \", \"\n\t\t\t\t\t\t+ Schema.COL_LATITUDE + \", \" + Schema.COL_TIMESTAMP);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_NOTES:\n\t\t\t// Check that mandatory columns are present.\n\t\t\tif (values.containsKey(Schema.COL_TRACK_ID) && values.containsKey(Schema.COL_LONGITUDE)\n\t\t\t\t\t&& values.containsKey(Schema.COL_LATITUDE) && values.containsKey(Schema.COL_TIMESTAMP) ) {\n\n\t\t\t\tlong rowId = dbHelper.getWritableDatabase().insert(Schema.TBL_NOTE, null, values);\n\t\t\t\tif (rowId > 0) {\n\t\t\t\t\tUri noteUri = ContentUris.withAppendedId(uri, rowId);\n\t\t\t\t\tgetContext().getContentResolver().notifyChange(noteUri, null);\n\t\t\t\t\treturn noteUri;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK:\n\t\t\tif (values.containsKey(Schema.COL_START_DATE)) {\n\t\t\t\tlong rowId = dbHelper.getWritableDatabase().insert(Schema.TBL_TRACK, null, values);\n\t\t\t\tif (rowId > 0) {\n\t\t\t\t\tUri trackUri = ContentUris.withAppendedId(CONTENT_URI_TRACK, rowId);\n\t\t\t\t\tgetContext().getContentResolver().notifyChange(trackUri, null);\n\t\t\t\t\treturn trackUri;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new IllegalArgumentException(\"values should provide \" + Schema.COL_START_DATE);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new IllegalArgumentException(\"Unknown URI: \" + uri);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t\n\t@Override\n\tpublic Cursor query(Uri uri, String[] projection, String selectionIn, String[] selectionArgsIn, String sortOrder) {\n\t\tLog.v(TAG, \"query(), uri=\" + uri);\n\n\t\tSQLiteQueryBuilder qb = new SQLiteQueryBuilder();\n\t\tString selection = selectionIn;\n\t\tString[] selectionArgs = selectionArgsIn;\n\t\t\n\t\tString groupBy = null;\n\t\tString limit = null;\n\t\t\n\t\t// Select which datatype was requested\n\t\tswitch (uriMatcher.match(uri)) {\n\t\tcase Schema.URI_CODE_TRACK_TRACKPOINTS:\n\t\t\tString trackId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_TRACKPOINT);\n\t\t\tselection = Schema.COL_TRACK_ID + \" = ?\";\n\t\t\t// Deal with any additional selection info provided by the caller \n\t\t\tif (null != selectionIn) {\n\t\t\t\tselection += \" AND \" + selectionIn;\n\t\t\t}\n\t\t\t\n\t\t\tList<String> selctionArgsList = new ArrayList<String>();\n\t\t\tselctionArgsList.add(trackId);\n\t\t\t// Add the callers selection arguments, if any\n\t\t\tif (null != selectionArgsIn) {\n\t\t\t\tfor (String arg : selectionArgsIn) {\n\t\t\t\t\tselctionArgsList.add(arg);\n\t\t\t\t}\n\t\t\t}\n\t\t\tselectionArgs = selctionArgsList.toArray(new String[0]);\n\t\t\t// Finished with the temporary selection arguments list. release it for GC\n\t\t\tselctionArgsList.clear();\n\t\t\tselctionArgsList = null;\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_WAYPOINTS:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttrackId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_WAYPOINT);\n\t\t\tselection = Schema.COL_TRACK_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_NOTES:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttrackId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_NOTE);\n\t\t\tselection = Schema.COL_TRACK_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_NOTE_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\tString noteId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_NOTE);\n\t\t\tselection = Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {noteId};\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_START:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttrackId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_TRACKPOINT);\n\t\t\tselection = Schema.COL_TRACK_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\n\t\t\tsortOrder = Schema.COL_ID + \" asc\";\n\t\t\tlimit = \"1\";\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_END:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttrackId = uri.getPathSegments().get(1);\n\t\t\tqb.setTables(Schema.TBL_TRACKPOINT);\n\t\t\tselection = Schema.COL_TRACK_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\n\t\t\tsortOrder = Schema.COL_ID + \" desc\";\n\t\t\tlimit = \"1\";\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK:\n\t\t\tqb.setTables(TRACK_TABLES);\n\t\t\tif (projection == null)\n\t\t\t\tprojection = TRACK_TABLES_PROJECTION;\n\t\t\tgroupBy = TRACK_TABLES_GROUP_BY;\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttrackId = uri.getLastPathSegment();\n\t\t\tqb.setTables(TRACK_TABLES);\n\t\t\tif (projection == null)\n\t\t\t\tprojection = TRACK_TABLES_PROJECTION;\n\t\t\tgroupBy = TRACK_TABLES_GROUP_BY;\n\t\t\tselection = Schema.TBL_TRACK + \".\" + Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\t\t\t\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_ACTIVE:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\tqb.setTables(Schema.TBL_TRACK);\n\t\t\tselection = Schema.COL_ACTIVE + \" = ?\";\n\t\t\tselectionArgs = new String[] {Integer.toString(Schema.VAL_TRACK_ACTIVE)};\t\t\t\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_WAYPOINT_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\tString wayPointId = uri.getLastPathSegment();\n\t\t\tqb.setTables(Schema.TBL_WAYPOINT);\n\t\t\tselection = Schema.TBL_WAYPOINT + \".\" + Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {wayPointId};\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACKPOINT_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\tString trackPointId = uri.getLastPathSegment();\n\t\t\tqb.setTables(Schema.TBL_TRACKPOINT);\n\t\t\tselection = Schema.TBL_TRACKPOINT + \".\" + Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackPointId};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new IllegalArgumentException(\"Unknown URI: \" + uri);\n\t\t}\n\n\t\tCursor c = qb.query(dbHelper.getReadableDatabase(), projection, selection, selectionArgs, groupBy, null, sortOrder, limit);\n\t\tc.setNotificationUri(getContext().getContentResolver(), uri);\n\t\treturn c;\n\t}\n\n\t@Override\n\tpublic int update(Uri uri, ContentValues values, String selectionIn, String[] selectionArgsIn) {\n\t\tLog.v(TAG, \"update(), uri=\" + uri);\n\t\t\n\t\tString table;\n\t\tString selection = selectionIn;\n\t\tString[] selectionArgs = selectionArgsIn;\n\t\t\n\t\tswitch (uriMatcher.match(uri)) {\n\t\tcase Schema.URI_CODE_TRACK_WAYPOINTS:\n\t\t\tif (selectionIn == null || selectionArgsIn == null) {\n\t\t\t\t// Caller must narrow to a specific waypoint\n\t\t\t\tthrow new IllegalArgumentException();\n\t\t\t}\n\t\t\ttable = Schema.TBL_WAYPOINT;\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_NOTES:\n\t\t\tif (selectionIn == null || selectionArgsIn == null) {\n\t\t\t\t// Caller must narrow to a specific waypoint\n\t\t\t\tthrow new IllegalArgumentException();\n\t\t\t}\n\t\t\ttable = Schema.TBL_NOTE;\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_NOTE_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttable = Schema.TBL_NOTE;\n\t\t\tString noteId = uri.getLastPathSegment();\n\t\t\tselection = Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {noteId};\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_ID:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttable = Schema.TBL_TRACK;\n\t\t\tString trackId = uri.getLastPathSegment();\n\t\t\tselection = Schema.COL_ID + \" = ?\";\n\t\t\tselectionArgs = new String[] {trackId};\t\t\t\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK_ACTIVE:\n\t\t\tif (selectionIn != null || selectionArgsIn != null) {\n\t\t\t\t// Any selection/selectionArgs will be ignored\n\t\t\t\tthrow new UnsupportedOperationException();\n\t\t\t}\n\t\t\ttable = Schema.TBL_TRACK;\n\t\t\tselection = Schema.COL_ACTIVE + \" = ?\";\n\t\t\tselectionArgs = new String[] {Integer.toString(Schema.VAL_TRACK_ACTIVE)};\t\t\t\n\t\t\tbreak;\n\t\tcase Schema.URI_CODE_TRACK:\n\t\t\t// Dangerous: Will update all the tracks, but necessary for instance\n\t\t\t// to switch all the tracks to inactive\n\t\t\ttable = Schema.TBL_TRACK;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new IllegalArgumentException(\"Unknown URI: \" + uri);\n\t\t}\n\t\t\n\t\tint rows = dbHelper.getWritableDatabase().update(table, values, selection, selectionArgs);\n\t\tgetContext().getContentResolver().notifyChange(uri, null);\n\t\treturn rows;\n\n\t}\n\n\t/**\n\t * Represents Data Schema.\n\t */\n\tpublic static final class Schema {\n\t\tpublic static final String TBL_TRACKPOINT = \"trackpoint\";\n\t\tpublic static final String TBL_WAYPOINT = \"waypoint\";\n\t\tpublic static final String TBL_NOTE = \"note\";\n\t\tpublic static final String TBL_TRACK = \"track\";\n\t\tpublic static final String COL_ID = \"_id\";\n\t\tpublic static final String COL_TRACK_ID = \"track_id\";\n\t\tpublic static final String COL_UUID = \"uuid\";\n\t\tpublic static final String COL_LONGITUDE = \"longitude\";\n\t\tpublic static final String COL_LATITUDE = \"latitude\";\n\t\tpublic static final String COL_SPEED = \"speed\";\n\t\tpublic static final String COL_ELEVATION = \"elevation\";\n\t\tpublic static final String COL_ACCURACY = \"accuracy\";\n\t\tpublic static final String COL_NBSATELLITES = \"nb_satellites\";\n\t\tpublic static final String COL_TIMESTAMP = \"point_timestamp\";\n\t\tpublic static final String COL_NAME = \"name\";\n\t\tpublic static final String COL_DESCRIPTION = \"description\";\n\t\tpublic static final String COL_TAGS = \"tags\";\n\t\tpublic static final String COL_OSM_VISIBILITY = \"osm_visibility\";\n\t\tpublic static final String COL_LINK = \"link\";\n\t\tpublic static final String COL_START_DATE = \"start_date\";\n\t\t@Deprecated\n\t\tpublic static final String COL_DIR = \"directory\";\n\t\tpublic static final String COL_ACTIVE = \"active\";\n\t\tpublic static final String COL_EXPORT_DATE = \"export_date\";\n\t\tpublic static final String COL_OSM_UPLOAD_DATE = \"osm_upload_date\";\n\t\tpublic static final String COL_COMPASS = \"compass_heading\";\n\t\tpublic static final String COL_COMPASS_ACCURACY = \"compass_accuracy\";\n\t\tpublic static final String COL_ATMOSPHERIC_PRESSURE = \"atmospheric_pressure\";\n\t\t\n\t\t// virtual colums that are used in some sqls but dont exist in database\n\t\tpublic static final String COL_TRACKPOINT_COUNT = \"tp_count\";\n\t\tpublic static final String COL_WAYPOINT_COUNT = \"wp_count\";\n\t\tpublic static final String COL_NOTE_COUNT = \"note_count\";\n\n\t\t// Codes for UriMatcher\n\t\tpublic static final int URI_CODE_TRACK = 3;\n\t\tpublic static final int URI_CODE_TRACK_ID = 4;\n\t\tpublic static final int URI_CODE_TRACK_WAYPOINTS = 5;\n\t\tpublic static final int URI_CODE_TRACK_TRACKPOINTS = 6;\n\t\tpublic static final int URI_CODE_TRACK_ACTIVE = 7;\n\t\tpublic static final int URI_CODE_WAYPOINT_UUID = 8;\n\t\tpublic static final int URI_CODE_TRACK_START = 9;\n\t\tpublic static final int URI_CODE_TRACK_END = 10;\n\t\tpublic static final int URI_CODE_WAYPOINT_ID = 11;\n\t\tpublic static final int URI_CODE_TRACKPOINT_ID = 12;\n\t\tpublic static final int URI_CODE_TRACK_NOTES = 13;\n\t\tpublic static final int URI_CODE_NOTE_ID = 14;\n\t\tpublic static final int URI_CODE_NOTE_UUID = 15;\n\n\n\t\tpublic static final int VAL_TRACK_ACTIVE = 1;\n\t\tpublic static final int VAL_TRACK_INACTIVE = 0;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/TracklistAdapter.java",
    "content": "package net.osmtracker.db;\r\n\r\nimport net.osmtracker.R;\r\nimport net.osmtracker.db.model.Track;\r\nimport net.osmtracker.activity.TrackManager;\r\n\r\nimport android.content.Context;\r\nimport android.database.Cursor;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.CursorAdapter;\r\nimport android.widget.ImageView;\r\nimport android.widget.TextView;\r\n\r\n/**\r\n * Adapter for track list in {@link TrackManager Track Manager}.\r\n * For each row's contents, see <tt>tracklist_item.xml</tt>.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class TracklistAdapter extends CursorAdapter {\r\n\r\n\tpublic TracklistAdapter(Context context, Cursor c) {\r\n\t\tsuper(context, c);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void bindView(View view, Context context, Cursor cursor) {\r\n\t\tbind(cursor, view, context);\t\r\n\t}\r\n\r\n\t@Override\r\n\tpublic View newView(Context context, Cursor cursor, ViewGroup vg) {\r\n\t\tView view = LayoutInflater.from(vg.getContext()).inflate(R.layout.tracklist_item,\r\n\t\t\t\tvg, false);\r\n\t\treturn view;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Do the binding between data and item view.\r\n\t * \r\n\t * @param cursor\r\n\t *\t\t\t\tCursor to pull data\r\n\t * @param v\r\n\t *\t\t\t\tRelativeView representing one item\r\n\t * @param context\r\n\t *\t\t\t\tContext, to get resources\r\n\t * @return The relative view with data bound.\r\n\t */\r\n\tprivate View bind(Cursor cursor, View v, Context context) {\r\n\t\tTextView vId = (TextView) v.findViewById(R.id.trackmgr_item_id);\r\n\t\tTextView vNameOrStartDate = (TextView) v.findViewById(R.id.trackmgr_item_nameordate);\r\n\t\tTextView vWps = (TextView) v.findViewById(R.id.trackmgr_item_wps);\r\n\t\tTextView vTps = (TextView) v.findViewById(R.id.trackmgr_item_tps);\r\n\t\tTextView vNotesCount = v.findViewById(R.id.trackmgr_item_notes_count);\r\n\t\tImageView vStatus = (ImageView) v.findViewById(R.id.trackmgr_item_statusicon);\r\n\t\tImageView vUploadStatus = (ImageView) v.findViewById(R.id.trackmgr_item_upload_statusicon);\r\n\r\n\t\t// Is track active ?\r\n\t\tint active = cursor.getInt(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ACTIVE));\r\n\t\tif (TrackContentProvider.Schema.VAL_TRACK_ACTIVE == active) {\r\n\t\t\t// Yellow clock icon for Active\r\n\t\t\tvStatus.setImageResource(android.R.drawable.presence_away);\r\n\t\t\tvStatus.setVisibility(View.VISIBLE);\r\n\t\t} else if (cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_EXPORT_DATE))) {\r\n\t\t\t// Hide green circle icon: Track not yet exported\r\n\t\t\tvStatus.setVisibility(View.GONE);\r\n\t\t} else {\r\n\t\t\t// Show green circle icon (don't assume already visible with this drawable; may be a re-query)\r\n\t\t\tvStatus.setImageResource(android.R.drawable.presence_online);\r\n\t\t\tvStatus.setVisibility(View.VISIBLE);\r\n\t\t}\r\n\t\t\r\n\t\t// Upload status\r\n\t\tif (cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_OSM_UPLOAD_DATE))) {\r\n\t\t\tvUploadStatus.setVisibility(View.GONE);\r\n\t\t}\t\t\r\n\t\telse{\r\n\t\t\tvUploadStatus.setImageResource(android.R.drawable.stat_sys_upload_done);\r\n\t\t\tvUploadStatus.setVisibility(View.VISIBLE);\r\n\t\t}\r\n\r\n\t\t// Bind id\r\n\t\tlong trackId = cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ID));\r\n\t\tString strTrackId = Long.toString(trackId);\r\n\t\tvId.setText(strTrackId);\r\n\r\n\t\t// Bind WP count, TP count, Notes count, name\r\n\t\tTrack t = Track.build(trackId, cursor, context.getContentResolver(), false);\r\n\t\tvTps.setText(Integer.toString(t.getTpCount()));\r\n\t\tvWps.setText(Integer.toString(t.getWpCount()));\r\n\t\tvNotesCount.setText(Integer.toString(t.getNoteCount()));\r\n\t\tvNameOrStartDate.setText(t.getDisplayName());\r\n\r\n\t\treturn v;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/WaypointListAdapter.java",
    "content": "package net.osmtracker.db;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.TimeZone;\n\nimport net.osmtracker.R;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.CursorAdapter;\nimport android.widget.RelativeLayout;\nimport android.widget.TableLayout;\nimport android.widget.TextView;\n\n/**\n * Adapter for the waypoint list. Gets waypoints from database.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class WaypointListAdapter extends CursorAdapter {\n\n\t/**\n\t * Date formatter\n\t */\n\tpublic static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(\"HH:mm:ss 'UTC'\");\n\tstatic {\n\t\tDATE_FORMATTER.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\t}\n\n\t/**\n\t * Constructor.\n\t * \n\t * @param context\n\t *\t\t\t\tApplication context\n\t * @param c\n\t *\t\t\t\t{@link Cursor} to data\n\t */\n\tpublic WaypointListAdapter(Context context, Cursor c) {\n\t\tsuper(context, c);\n\t}\n\n\t@Override\n\tpublic void bindView(View view, Context context, Cursor cursor) {\n\t\tTableLayout tl = (TableLayout) view;\n\t\tbind(cursor, tl, context);\n\t}\n\n\t@Override\n\tpublic View newView(Context context, Cursor cursor, ViewGroup vg) {\n\t\tTableLayout tl = (TableLayout) LayoutInflater.from(vg.getContext()).inflate(R.layout.waypointlist_item,\n\t\t\t\tvg, false);\n\t\treturn bind(cursor, tl, context);\n\t}\n\n\t/**\n\t * Do the binding between data and item view.\n\t * \n\t * @param cursor\n\t *\t\t\t\tCursor to pull data\n\t * @param tl\n\t *\t\t\t\tRelativeView representing one item\n\t * @param context\n\t *\t\t\t\tContext, to get resources\n\t * @return The relative view with data bound.\n\t */\n\tprivate View bind(Cursor cursor, TableLayout tl, Context context) {\n\t\tTextView vName = (TextView) tl.findViewById(R.id.wplist_item_name);\n\t\tTextView vLocation = (TextView) tl.findViewById(R.id.wplist_item_location);\n\t\tTextView vTimestamp = (TextView) tl.findViewById(R.id.wplist_item_timestamp);\n\n\t\t// Bind name\n\t\tString name = cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\tvName.setText(name);\n\n\t\t// Bind location\n\t\tStringBuffer locationAsString = new StringBuffer();\n\t\tlocationAsString.append(context.getResources().getString(R.string.wplist_latitude)\n\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE)));\n\t\tlocationAsString.append(\", \" + context.getResources().getString(R.string.wplist_longitude)\n\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE)));\n\t\tif (!cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION))) {\n\t\t\tlocationAsString.append(\", \" + context.getResources().getString(R.string.wplist_elevation)\n\t\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION)));\n\t\t}\n\t\tif (!cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY))) {\n\t\t\tlocationAsString.append(\", \" + context.getResources().getString(R.string.wplist_accuracy)\n\t\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)));\n\t\t}\n\t\tif (!cursor.isNull(cursor.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\tlocationAsString.append(\", \" + context.getResources().getString(R.string.wplist_compass)\n\t\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)));\n\t\t\tlocationAsString.append(\", \" + context.getResources().getString(R.string.wplist_compass_accuracy)\n\t\t\t\t\t+ cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)));\n\t\t\t\n\t\t\n\t\t}\t\t\n\t\tvLocation.setText(locationAsString.toString());\n\n\t\t// Bind timestamp\n\t\tDate ts = new Date(cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP)));\n\t\tvTimestamp.setText(DATE_FORMATTER.format(ts));\n\t\treturn tl;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/model/Point.java",
    "content": "package net.osmtracker.db.model;\n\nimport android.database.Cursor;\n\nimport net.osmtracker.db.TrackContentProvider;\n\n/**\n * WayPoint and TrackPoint inherit from this object Point\n */\npublic abstract class Point {\n\n    protected Integer id;\n    protected Integer trackId;\n    protected double latitude;\n    protected double longitude;\n    protected long pointTimestamp;\n\n    protected Double elevation;\n    protected Double accuracy;\n    protected Double compassHeading;\n    protected Double compassAccuracy;\n    protected Double atmosphericPressure;\n\n\n    protected Point(Cursor c) {\n        id = c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_ID));\n        trackId = c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_TRACK_ID));\n        latitude = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE));\n        longitude = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE));\n        pointTimestamp = c.getLong(c.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP));\n\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION)) ) {\n            elevation = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION));\n        }\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) ) {\n            accuracy = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY));\n        }\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) ) {\n            compassHeading = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS));\n        }\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) ) {\n            compassAccuracy = c.getDouble(\n                    c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY));\n        }\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE)) ) {\n            atmosphericPressure = c.getDouble(\n                    c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE));\n        }\n    }\n\n    public Point() {\n\n    }\n\n\n    public double getLatitude() {\n        return latitude;\n    }\n\n    public void setLatitude(double latitude) {\n        this.latitude = latitude;\n    }\n\n    public double getLongitude() {\n        return longitude;\n    }\n\n    public void setLongitude(double longitude) {\n        this.longitude = longitude;\n    }\n\n    public Double getElevation() {\n        return elevation;\n    }\n\n    public void setElevation(Double elevation) {\n        this.elevation = elevation;\n    }\n\n    public long getPointTimestamp() {\n        return pointTimestamp;\n    }\n\n    public void setPointTimestamp(long pointTimestamp) {\n        this.pointTimestamp = pointTimestamp;\n    }\n\n\n    public Double getAccuracy() {\n        return accuracy;\n    }\n\n    public void setAccuracy(Double accuracy) {\n        this.accuracy = accuracy;\n    }\n\n    public Double getCompassHeading() {\n        return compassHeading;\n    }\n\n    public void setCompassHeading(Double compassHeading) {\n        this.compassHeading = compassHeading;\n    }\n\n    public Double getCompassAccuracy() {\n        return compassAccuracy;\n    }\n\n    public void setCompassAccuracy(Double compassAccuracy) {\n        this.compassAccuracy = compassAccuracy;\n    }\n\n    public Double getAtmosphericPressure() {\n        return atmosphericPressure;\n    }\n\n    public void setAtmosphericPressure(Double atmosphericPressure) {\n        this.atmosphericPressure = atmosphericPressure;\n    }\n\n    public Integer getId() {\n        return id;\n    }\n\n    public void setId(Integer id) {\n        this.id = id;\n    }\n\n    public Integer getTrackId() {\n        return trackId;\n    }\n\n    public void setTrackId(Integer trackId) {\n        this.trackId = trackId;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/model/Track.java",
    "content": "package net.osmtracker.db.model;\n\nimport java.text.DateFormat;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Date;\nimport java.util.List;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport android.content.ContentResolver;\nimport android.database.Cursor;\n\n/**\n * Represents a Track\n\n * @author Nicolas Guillaumin\n *\n */\npublic class Track {\n\n\tprivate static final DateFormat DATE_FORMAT = DateFormat.getDateTimeInstance();\n\n\tpublic enum OSMVisibility {\n\t\tPrivate(0, R.string.osm_visibility_private),\n\t\tPublic(1, R.string.osm_visibility_public),\n\t\tTrackable(2, R.string.osm_visibility_trackable),\n\t\tIdentifiable(3, R.string.osm_visibility_identifiable);\n\t\t\n\t\tpublic final int position;\n\t\tpublic final int resId;\n\t\t\n\t\tprivate OSMVisibility(int position, int resId) {\n\t\t\tthis.position = position;\n\t\t\tthis.resId = resId;\n\t\t}\n\t\t\n\t\tpublic static OSMVisibility fromPosition(int position) {\n\t\t\tfor (OSMVisibility v: values()) {\n\t\t\t\tif (v.position == position) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthrow new IllegalArgumentException();\n\t\t}\n\t}\n\t\n\tprivate String name;\n\tprivate String description;\n\tprivate OSMVisibility visibility;\n\tprivate List<String> tags = new ArrayList<String>();\n\tprivate int tpCount, wpCount, noteCount;\n\tprivate long trackDate;\n\tprivate long trackId;\n\t\n\tprivate Long startDate=null, endDate=null;\n\tprivate Float startLat=null, startLong=null, endLat=null, endLong=null;\n\t\n\tprivate boolean extraInformationRead = false;\n\t\n\tprivate ContentResolver cr;\n\n\t/**\n\t * build a track object with the given cursor\n\t * \n\t * @param trackId id of the track that will be built\n\t * @param tc cursor that is used to build the track\n\t * @param cr the content resolver to use\n\t * @param withExtraInformation if additional informations (startDate, endDate, first and last track point will be loaded from the database\n\t * @return Track\n\t */\n\tpublic static Track build(final long trackId, Cursor tc, ContentResolver cr, boolean withExtraInformation) {\n\t\tTrack out = new Track();\n \n\t\tout.trackId = trackId;\n\t\tout.cr = cr;\n\t\tout.trackDate = tc.getLong(tc.getColumnIndex(TrackContentProvider.Schema.COL_START_DATE));\n\t\t\n\t\tout.name = tc.getString(tc.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\tout.description = tc.getString(tc.getColumnIndex(TrackContentProvider.Schema.COL_DESCRIPTION));\n\t\t\n\t\tString tags = tc.getString(tc.getColumnIndex(TrackContentProvider.Schema.COL_TAGS));\n\t\t//TODO: use out.setTags(tags)\n\t\tif (tags != null && ! \"\".equals(tags)) {\n\t\t\tout.tags.addAll(Arrays.asList(tags.split(\",\")));\n\t\t}\n\t\t\n\t\tout.visibility = OSMVisibility.valueOf(tc.getString(tc.getColumnIndex(TrackContentProvider.Schema.COL_OSM_VISIBILITY)));\n\n\t\tout.tpCount = tc.getInt(tc.getColumnIndex(TrackContentProvider.Schema.COL_TRACKPOINT_COUNT));\n\t\t\n\t\tout.wpCount = tc.getInt(tc.getColumnIndex(TrackContentProvider.Schema.COL_WAYPOINT_COUNT));\n\n\t\tout.noteCount = tc.getInt(tc.getColumnIndex(TrackContentProvider.Schema.COL_NOTE_COUNT));\n\n\t\tif(withExtraInformation){\n\t\t\tout.readExtraInformation();\n\t\t}\n\t\t\n\t\treturn out;\t\t\n\t}\n\t\n\tprivate void readExtraInformation(){\n\t\tif(!extraInformationRead){\n\t\t\tCursor startCursor = cr.query(TrackContentProvider.trackStartUri(trackId), null, null, null, null);\n\t\t\tif(startCursor.moveToFirst()){\n\t\t\t\tstartDate = startCursor.getLong(startCursor.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP));\n\t\t\t\tstartLat = startCursor.getFloat(startCursor.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE));\n\t\t\t\tstartLong = startCursor.getFloat(startCursor.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE));\n\t\t\t}\n\t\t\tstartCursor.close();\n\t\t\t\n\t\t\tCursor endCursor = cr.query(TrackContentProvider.trackEndUri(trackId), null, null, null, null);\n\t\t\tif(endCursor.moveToFirst()){\n\t\t\t\tendDate = endCursor.getLong(endCursor.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP));\n\t\t\t\tendLat = endCursor.getFloat(endCursor.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE));\n\t\t\t\tendLong = endCursor.getFloat(endCursor.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE));\n\t\t\t}\n\t\t\tendCursor.close();\n\t\t\t\n\t\t\textraInformationRead = true;\n\t\t}\n\t}\n\t\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n\n\tpublic void setTrackId(long trackId) {\n\t}\n\n\tpublic long getTrackId() {\n\t\treturn this.trackId;\n\t}\n\t\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\t\n\tpublic void setTpCount(int tpCount) {\n\t\tthis.tpCount = tpCount;\n\t}\n\n\tpublic void setWpCount(int wpCount) {\n\t\tthis.wpCount = wpCount;\n\t}\n\n\tpublic void setNoteCount(int noteCount) {\n\t\tthis.noteCount = noteCount;\n\t}\n\n\tpublic void setTracktDate(long tracktDate) {\n\t\tthis.trackDate = tracktDate;\n\t}\n\n\tpublic void setEndDate(long endDate) {\n\t\tthis.endDate = endDate;\n\t}\n\n\tpublic void setStartLat(float startLat) {\n\t\tthis.startLat = startLat;\n\t}\n\n\tpublic void setTrackDate(long trackDate) { this.trackDate = trackDate; }\n\n\tpublic long getTrackDate() {\n\t\treturn trackDate;\n\t}\n\n\tpublic void setStartDate(long startDate) {\n\t\tthis.startDate = startDate;\n\t}\n\n\tpublic long getStartDate() {\n\t\treturn startDate;\n\t}\n\t\n\tpublic void setStartLong(float startLong) {\n\t\tthis.startLong = startLong;\n\t}\n\n\tpublic void setEndLat(float endLat) {\n\t\tthis.endLat = endLat;\n\t}\n\n\tpublic void setEndLong(float endLong) {\n\t\tthis.endLong = endLong;\n\t}\n\n\tpublic Integer getWpCount() {\n\t\treturn wpCount;\n\t}\n\t\n\tpublic Integer getTpCount() {\n\t\treturn tpCount;\n\t}\n\n\tpublic Integer getNoteCount() {\n\t\treturn noteCount;\n\t}\n\n\t// @deprecated\n\tpublic String getDisplayName() {\n\t\tif (name != null && name.length() > 0) {\n\t\t\treturn name;\n\t\t} else {\n\t\t\t// Use start date as name\n\t\t\treturn DATE_FORMAT.format(new Date(trackDate));\n\t\t}\n\t}\n\n\tpublic String getName() { return name; }\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setTags(List<String> tags) {\n\t\tthis.tags = tags;\n\t}\n\n\tpublic void setTags(String tags) {\n\t\tif (tags != null && ! \"\".equals(tags)) {\n\t\t\tthis.tags.addAll(Arrays.asList(tags.split(\",\")));\n\t\t}\n\t}\n\n\tpublic List<String> getTags() {\n\t\treturn tags;\n\t}\n\n\tpublic void setVisibility(OSMVisibility visibility) {\n\t\tthis.visibility = visibility;\n\t}\n\t\n\tpublic OSMVisibility getVisibility() {\n\t\treturn visibility;\n\t}\n\t\n\tpublic String getCommaSeparatedTags() {\n\t\tStringBuilder sb = new StringBuilder();\n\t\tfor (int i=0; i<tags.size(); i++) {\n\t\t\tsb.append(tags.get(i));\n\t\t\tif (i+1 < tags.size()) {\n\t\t\t\tsb.append(\",\");\n\t\t\t}\n\t\t}\n\t\treturn sb.toString();\n\t}\n\t\n\tpublic String getStartDateAsString() {\n\t\treadExtraInformation();\n\t\tif (startDate != null) {\n\t\t\treturn DATE_FORMAT.format(new Date(startDate));\n\t\t} else {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\t\n\tpublic String getEndDateAsString() {\n\t\treadExtraInformation();\n\t\tif (endDate != null) {\n\t\t\treturn DATE_FORMAT.format(new Date(endDate));\n\t\t} else {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tpublic Float getStartLat() {\n\t\treadExtraInformation();\n\t\treturn startLat;\n\t}\n\n\tpublic Float getStartLong() {\n\t\treadExtraInformation();\n\t\treturn startLong;\n\t}\n\n\tpublic Float getEndLat() {\n\t\treadExtraInformation();\n\t\treturn endLat;\n\t}\n\n\tpublic Float getEndLong() {\n\t\treadExtraInformation();\n\t\treturn endLong;\n\t}\n\t\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/model/TrackPoint.java",
    "content": "package net.osmtracker.db.model;\n\nimport android.database.Cursor;\n\nimport net.osmtracker.db.TrackContentProvider;\n\n/**\n * Represents a TrackPoint\n */\npublic class TrackPoint extends Point {\n\n    private Double speed;\n\n\n    public TrackPoint(Cursor c) {\n        super(c);\n        if ( ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_SPEED)) ) {\n            speed = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_SPEED));\n        }\n    }\n\n    public TrackPoint() {\n\n    }\n\n\n    public Double getSpeed() {\n        return speed;\n    }\n\n    public void setSpeed(Double speed) {\n        this.speed = speed;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/db/model/WayPoint.java",
    "content": "package net.osmtracker.db.model;\n\nimport android.database.Cursor;\n\nimport net.osmtracker.db.TrackContentProvider;\n\n/**\n * Represents a WayPoint\n */\npublic class WayPoint extends Point {\n\n    private String uuid;\n    private Integer numberOfSatellites;\n    private String name;\n    private String link;\n\n\n    public WayPoint(Cursor c) {\n        super(c);\n        uuid = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_UUID));\n        numberOfSatellites = c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_NBSATELLITES));\n        name = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n    }\n\n    public WayPoint() {\n    }\n\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getLink() {\n        return link;\n    }\n\n    public void setLink(String link) {\n        this.link = link;\n    }\n\n    public Integer getNumberOfSatellites() {\n        return numberOfSatellites;\n    }\n\n    public void setNumberOfSatellites(Integer numberOfSatellites) {\n        this.numberOfSatellites = numberOfSatellites;\n    }\n\n    public String getUuid() {\n        return uuid;\n    }\n\n    public void setUuid(String uuid) {\n        this.uuid = uuid;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/exception/CreateTrackException.java",
    "content": "package net.osmtracker.exception;\r\n\r\npublic class CreateTrackException extends Exception {\r\n\r\n\tprivate static final long serialVersionUID = 1L;\r\n\t\r\n\tpublic CreateTrackException(String message) {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/exception/ExportTrackException.java",
    "content": "package net.osmtracker.exception;\r\n\r\npublic class ExportTrackException extends Exception {\r\n\r\n\tprivate static final long serialVersionUID = 1L;\r\n\t\r\n\tpublic ExportTrackException(String message) {\r\n\t\tsuper(message);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/github/GitHubConstants.java",
    "content": "package net.osmtracker.github;\n\npublic final class GitHubConstants {\n    // Config constans\n    public static final String SHARED_PREFS_NAME = \"GitHubPrefs\";\n    public static final String KEY_USERNAME = \"username\";\n    public static final String KEY_TOKEN = \"token\";\n    // URL constants\n    public static String GITHUB_API_URL = \"https://api.github.com\";\n    public static String GITHUB_TOKENS_URL = \"https://github.com/settings/tokens\";\n    public static String GITHUB_API_REPOS_URL = GITHUB_API_URL + \"/repos\";\n    public static String GITHUB_API_USER_URL = GITHUB_API_URL + \"/user\";\n    public static String GITHUB_API_USER_REPOS_URL = GITHUB_API_USER_URL + \"/repos\";\n\n    private GitHubConstants() {\n        // Private constructor to prevent instantiation\n    }\n\n    //String fullURL = GITHUB_API_URL+\"/repos/\"+repoFullName;\n    public static String getRepoUrl(String repoFullName) {\n        return GITHUB_API_REPOS_URL + \"/\" + repoFullName;\n    }\n\n    /**\n     * Builds the URL to fetch a repository's forks.\n     *\n     * @param username The GitHub username.\n     * @param repo The repository name.\n     * @return The complete URL for the forks endpoint.\n     */\n    public static String getRepoForksUrl(String username, String repo) {\n        return GITHUB_API_REPOS_URL + \"/\" + username + \"/\" + repo + \"/forks\";\n    }\n\n    /**\n     * Builds the URL to fetch a repository's pull\n     * @param repoOrigen The repository name.\n     * @return The complete URL for the pull requests endpoint.\n     */\n    public static String getRepoPullsUrl(String repoOrigen) {\n        return GITHUB_API_REPOS_URL + \"/\" + repoOrigen + \"/pulls\";\n    }\n\n    /**\n     * Builds the URL to fetch a file's content.\n     * @param repoOrigen The repository name.\n     * @param filename The file name.\n     * @return The complete URL for the file content endpoint.\n     */\n    public static String getRepoFileContentUrl(String repoOrigen, String filename) {\n        return GITHUB_API_REPOS_URL + \"/\" + repoOrigen + \"/contents/\" + filename;\n    }\n\n    /**\n     * Builds the URL to fetch a user's repositories with optional sorting.\n     * @param sortBy The sorting parameter.\n     * @return The complete URL for the user's repositories endpoint.\n     */\n    public static String getUserReposUrl(String sortBy) {\n        return GITHUB_API_USER_REPOS_URL + \"?sort=\" + sortBy + \"&per_page=100\";\n    }\n\n    public static String getUserReposUrl(){\n        return getUserReposUrl(\"updated\");\n    }\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/gpx/ExportToStorageTask.java",
    "content": "package net.osmtracker.gpx;\n\nimport static net.osmtracker.util.FileSystemUtils.getUniqueChildNameFor;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.os.Environment;\nimport android.util.Log;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.exception.ExportTrackException;\n\nimport java.io.File;\nimport java.util.Date;\n\n/**\n * ExportToStorageTask is responsible for exporting track data to the device's storage.\n * It extends the ExportTrackTask class and provides specific implementations for\n * exporting track data to a directory on the external storage.\n */\npublic class ExportToStorageTask extends ExportTrackTask {\n\n\tprivate static final String TAG = ExportToStorageTask.class.getSimpleName();\n\tprivate final String ERROR_MESSAGE;\n\tprivate final DataHelper dataHelper;\n\tprivate final SharedPreferences sharedPreferences;\n\n\t/**\n\t * Constructor for ExportToStorageTask.\n\t *\n\t * @param context the context of the application\n\t * @param trackId the IDs of the tracks to be exported\n\t */\n\tpublic ExportToStorageTask(Context context, long... trackId) {\n\t\tthis(context, new DataHelper(context), trackId);\n\t}\n\n\t/**\n\t * Constructor for ExportToStorageTask with a DataHelper instance.\n\t *\n\t * @param context the context of the application\n\t * @param dataHelper the DataHelper instance for accessing track data\n\t * @param trackId the IDs of the tracks to be exported\n\t */\n\tpublic ExportToStorageTask(Context context, DataHelper dataHelper, long... trackId) {\n\t\tsuper(context, trackId);\n\t\tthis.dataHelper = dataHelper;\n\t\tthis.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tERROR_MESSAGE = context.getString(R.string.error_create_track_dir);\n\t}\n\n\t/**\n\t * Gets the directory where the track data will be exported.\n\t *\n\t * @param startDate the start date of the track\n\t * @return the directory where the track data will be exported\n\t * @throws ExportTrackException if the directory cannot be created\n\t */\n\t@Override\n\tprotected File getExportDirectory(Date startDate) throws ExportTrackException {\n        String trackName = getSanitizedTrackNameByStartDate(startDate);\n        boolean shouldCreateDirectoryPerTrack = shouldCreateDirectoryPerTrack();\n        File finalExportDirectory = getBaseExportDirectory();\n\t\tLog.d(TAG, \"absolute dir: \" + finalExportDirectory.getAbsolutePath());\n\n        if( shouldCreateDirectoryPerTrack && !trackName.isEmpty()){\n            String uniqueFolderName = getUniqueChildNameFor(finalExportDirectory, trackName, \"\");\n            finalExportDirectory = new File(finalExportDirectory, uniqueFolderName);\n            finalExportDirectory.mkdirs();\n        }\n        if(! finalExportDirectory.exists() )\n            throw new ExportTrackException(ERROR_MESSAGE);\n\n        return finalExportDirectory;\n\t}\n\n\t/**\n\t * Gets a sanitized track name based on the start date.\n\t *\n\t * @param startDate the start date of the track\n\t * @return the sanitized track name\n\t */\n\tpublic String getSanitizedTrackNameByStartDate(Date startDate) {\n\t\tTrack track = dataHelper.getTrackByStartDate(startDate);\n\n\t\tString trackName = \"\";\n\t\tif (track != null) {\n\t\t\ttrackName = track.getName();\n\t\t}\n\t\tif (trackName != null && !trackName.isEmpty()) {\n\t\t\ttrackName = trackName.replace(\"/\", \"_\").trim();\n\t\t}\n\t\treturn trackName;\n\t}\n\n\t/**\n\t * Determines whether a separate directory should be created for each track.\n\t *\n\t * @return true if a separate directory should be created for each track, false otherwise\n\t */\n    public boolean shouldCreateDirectoryPerTrack(){\n\t    return sharedPreferences.getBoolean(OSMTracker.Preferences.KEY_OUTPUT_DIR_PER_TRACK,\n                OSMTracker.Preferences.VAL_OUTPUT_GPX_OUTPUT_DIR_PER_TRACK);\n    }\n\n\t/**\n\t * Checks if external storage is writable.\n\t *\n\t * @return true if external storage is writable, false otherwise\n\t */\n\tprivate boolean isExternalStorageWritable() {\n\t\treturn Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);\n\t}\n\n\t/**\n\t * Gets the base directory where the track data will be exported.\n\t * Creates the directory if it does not exist.\n\t *\n\t * @return the base directory where the track data will be exported\n\t * @throws ExportTrackException if the directory cannot be created or is not writable\n\t */\n\tpublic File getBaseExportDirectory() throws ExportTrackException {\n\n\t\tif (!isExternalStorageWritable()) {\n\t\t\tthrow new ExportTrackException(\n\t\t\t\t\tcontext.getResources().getString(R.string.error_externalstorage_not_writable));\n\t\t}\n\t\tString exportDirectoryNameInPreferences = sharedPreferences.getString(\n\t\t\t\tOSMTracker.Preferences.KEY_STORAGE_DIR,\tOSMTracker.Preferences.VAL_STORAGE_DIR);\n\t\tLog.d(TAG,\"exportDirectoryNameInPreferences: \" + exportDirectoryNameInPreferences);\n\n\t\tFile baseExportDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),\n\t\t\t\texportDirectoryNameInPreferences);\n\t\t\n\t\t// if folder not exists, create it\n\t\tif (!baseExportDirectory.exists()) {\n\t\t\tboolean ok = baseExportDirectory.mkdirs();\n\t\t\tif (!ok) {\n\t\t\t\tthrow new ExportTrackException(\n\t\t\t\t\t\tcontext.getResources().getString(R.string.error_externalstorage_not_writable));\n\t\t\t}\n\t\t}\n\n\t\tLog.d(TAG, \"BaseExportDirectory: \" + baseExportDirectory.getAbsolutePath());\n\t\treturn baseExportDirectory;\n\t}\n\n\t@Override\n\tprotected boolean exportMediaFiles() {\n\t\treturn true;\n\t}\n\t\n\t@Override\n\tprotected boolean updateExportDate() {\n\t\treturn true;\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/gpx/ExportToTempFileTask.java",
    "content": "package net.osmtracker.gpx;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.util.Log;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.exception.ExportTrackException;\n\nimport java.io.File;\nimport java.util.Date;\n\n/**\n * Exports to a temporary file. Will not export associated\n * media, only the GPX file.\n *\n */\npublic abstract class ExportToTempFileTask extends ExportTrackTask {\n\n\tprivate static final String TAG = ExportToTempFileTask.class.getSimpleName();\n\t\n\tprivate final File tmpFile;\n\tprivate String filename;\n\t\n\tpublic ExportToTempFileTask(Context context, long trackId) {\n\t\tsuper(context, trackId);\n\t\tString desiredOutputFormat = PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_FILENAME,\n\t\t\t\tOSMTracker.Preferences.VAL_OUTPUT_FILENAME);\n\n\t\ttry {\n\t\t\tString trackName = new DataHelper(context).getTrackById(trackId).getName();\n\n\t\t\tlong startDate = new DataHelper(context).getTrackById(trackId).getTrackDate();\n\t\t\tString formattedTrackStartDate = DataHelper.FILENAME_FORMATTER.format(new Date(startDate));\n\n\t\t\t// Create temporary file\n\t\t\tString tmpFilename = super.formatGpxFilename(desiredOutputFormat, trackName, formattedTrackStartDate);\n\t\t\ttmpFile = new File(context.getCacheDir(),tmpFilename + DataHelper.EXTENSION_GPX);\n\t\t\tLog.d(TAG, \"Temporary file: \"+ tmpFile.getAbsolutePath());\n\t\t} catch (Exception ioe) {\n\t\t\tLog.e(TAG, \"Could not create temporary file\", ioe);\n\t\t\tthrow new IllegalStateException(\"Could not create temporary file\", ioe);\n\t\t}\n\t}\n\n\t@Override\n\tprotected File getExportDirectory(Date startDate) throws ExportTrackException {\n\t\treturn tmpFile.getParentFile();\n\t}\n\n\t@Override\n\tpublic String buildGPXFilename(Cursor c, File parentDirectory) {\n\t\tfilename = super.buildGPXFilename(c, parentDirectory);\n\t\treturn tmpFile.getName();\n\t}\n\n\t@Override\n\tprotected boolean exportMediaFiles() {\n\t\treturn false;\n\t}\n\t\n\t@Override\n\tprotected boolean updateExportDate() {\n\t\treturn false;\n\t}\n\t\n\tpublic File getTmpFile() {\n\t\treturn tmpFile;\n\t}\n\t\n\tpublic String getFilename() {\n\t\treturn filename;\n\t}\n\t\n\t@Override\n\tprotected void onPostExecute(Boolean success) {\n\t\tsuper.onPostExecute(success);\n\t\texecutionCompleted();\n\t}\n\t\n\tprotected abstract void executionCompleted();\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/gpx/ExportTrackTask.java",
    "content": "package net.osmtracker.gpx;\n\nimport android.app.AlertDialog;\nimport android.app.ProgressDialog;\nimport android.content.ContentResolver;\nimport android.content.ContentUris;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.DialogInterface.OnClickListener;\nimport android.database.Cursor;\nimport android.media.MediaScannerConnection;\nimport android.os.AsyncTask;\nimport android.util.Log;\nimport android.widget.Toast;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.exception.ExportTrackException;\nimport net.osmtracker.util.FileSystemUtils;\n\nimport java.io.BufferedWriter;\nimport java.io.File;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.io.Writer;\nimport java.net.URLEncoder;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.TimeZone;\nimport java.util.regex.Pattern;\n\nimport static net.osmtracker.db.DataHelper.EXTENSION_GPX;\nimport static net.osmtracker.util.FileSystemUtils.getUniqueChildNameFor;\n\nimport androidx.preference.PreferenceManager;\n\n/**\n * Base class to writes a GPX file and export\n * track media (Photos, Sounds)\n *\n * @author Nicolas Guillaumin\n *\n */\npublic abstract class ExportTrackTask extends AsyncTask<Void, Long, Boolean> {\n\n\tprivate static final String TAG = ExportTrackTask.class.getSimpleName();\n\n\t/**\n\t * Characters to replace in track filename, for use by buildGPXFilename. <BR>\n\t * The characters are: (space) ' \" / \\ * ? ~ @ &lt; &gt; <BR>\n\t * In addition, ':' will be replaced by ';', before calling this pattern.\n\t */\n\tprivate final static Pattern FILENAME_CHARS_BLACKLIST_PATTERN =\n\t\tPattern.compile(\"[ '\\\"/\\\\\\\\*?~@<>]\");  // must double-escape \\\n\n\t/**\n\t * XML header.\n\t */\n\tprivate static final String XML_HEADER = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" ?>\";\n\n\tprivate static final String CDATA_START = \"<![CDATA[\";\n\tprivate static final String CDATA_END = \"]]>\";\n\n\t/**\n\t * GPX opening tag\n\t */\n\tprivate static final String TAG_GPX = \"<gpx\"\n\t\t\t+ \" xmlns=\\\"http://www.topografix.com/GPX/1/1\\\"\"\n\t\t\t+ \" version=\\\"1.1\\\"\"\n\t\t\t+ \" creator=\\\"OSMTracker for Android™ - https://github.com/labexp/osmtracker-android\\\"\"\n\t\t\t+ \" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\"\n\t\t\t+ \" xsi:schemaLocation=\\\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \\\">\";\n\n\t/**\n\t * Date format for a point timestamp.\n\t */\n\tprivate SimpleDateFormat pointDateFormatter = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'Z'\");\n\n\t/**\n\t * {@link Context} to get resources\n\t */\n\tprotected Context context;\n\n\t/**\n\t * Track IDs to export\n\t */\n\tprivate long[] trackIds;\n\n\t/**\n\t * Dialog to display while exporting\n\t */\n\tprotected ProgressDialog dialog;\n\n\t/**\n\t * Message in case of an error\n\t */\n\tprivate String errorMsg = null;\n\n\t/**\n\t * @param startDate\n\t * @return The directory in which the track file should be created\n\t * @throws ExportTrackException\n\t */\n\tprotected abstract File getExportDirectory(Date startDate) throws ExportTrackException;\n\n\t/**\n\t * Whereas to export the media files or not\n\t * @return\n\t */\n\tprotected abstract boolean exportMediaFiles();\n\n\t/**\n\t * Whereas to update the track export date in the database at the end or not\n\t * @return\n\t */\n\tprotected abstract boolean updateExportDate();\n\n\tpublic ExportTrackTask(Context context, long... trackIds) {\n\t\tthis.context = context;\n\t\tthis.trackIds = trackIds;\n\t\tpointDateFormatter.setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n\t}\n\n\t@Override\n\tprotected void onPreExecute() {\n\t\t// Display dialog\n\t\tdialog = new ProgressDialog(context);\n\t\tdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);\n\t\tdialog.setIndeterminate(true);\n\t\tdialog.setCancelable(false);\n\t\tdialog.setMessage(context.getResources().getString(R.string.trackmgr_exporting_prepare));\n\t\tdialog.show();\n\t}\n\n\n\t@Override\n\tprotected Boolean doInBackground(Void... params) {\n\t\ttry {\n\t\t\tfor (long trackId : trackIds) {\n\t\t\t\texportTrackAsGpx(trackId);\n\t\t\t}\n\t\t} catch (ExportTrackException ete) {\n\t\t\terrorMsg = ete.getMessage();\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t@Override\n\tprotected void onProgressUpdate(Long... values) {\n\t\tif (values.length == 1) {\n\t\t\t// Standard progress update\n\t\t\tdialog.incrementProgressBy(values[0].intValue());\n\t\t} else if (values.length == 3) {\n\t\t\t// To initialise the dialog, 3 values are passed to onProgressUpdate()\n\t\t\t// trackId, number of track points, number of waypoints\n\t\t\tdialog.dismiss();\n\n\t\t\tdialog = new ProgressDialog(context);\n\t\t\tdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);\n\t\t\tdialog.setIndeterminate(false);\n\t\t\tdialog.setCancelable(false);\n\t\t\tdialog.setProgress(0);\n\t\t\tdialog.setMax(values[1].intValue() + values[2].intValue());\n\t\t\tdialog.setTitle(\n\t\t\t\t\tcontext.getResources().getString(R.string.trackmgr_exporting)\n\t\t\t\t\t\t\t.replace(\"{0}\", Long.toString(values[0])));\n\t\t\tdialog.show();\n\n\t\t}\n\t}\n\n\t@Override\n\tprotected void onPostExecute(Boolean success) {\n\t\tdialog.dismiss();\n\t\tif (!success) {\n\t\t\tnew AlertDialog.Builder(context)\n\t\t\t\t\t.setTitle(android.R.string.dialog_alert_title)\n\t\t\t\t\t.setMessage(context.getResources()\n\t\t\t\t\t\t\t.getString(R.string.trackmgr_export_error)\n\t\t\t\t\t\t\t.replace(\"{0}\", errorMsg))\n\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\n\t\t\t\t\t.setNeutralButton(android.R.string.ok, new OnClickListener() {\n\t\t\t\t\t\t@Override\n\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.show();\n\t\t}else{\n\t\t\tToast.makeText(this.context, R.string.various_export_finished, Toast.LENGTH_SHORT).show();\n\t\t}\n\t}\n\n\tprotected void exportTrackAsGpx(long trackId) throws ExportTrackException {\n\n\t\tContentResolver cr = context.getContentResolver();\n\n\t\tCursor c = context.getContentResolver().query(ContentUris.withAppendedId(\n\t\t\t\tTrackContentProvider.CONTENT_URI_TRACK, trackId), null, null,\n\t\t\t\tnull, null);\n\n\t\t// Get the startDate of this track\n\t\t// TODO: Maybe we should be pulling the track name instead?\n\t\t// We'd need to consider the possibility that two tracks were given the same name\n\t\t// We could possibly disambiguate by including the track ID in the Folder Name\n\t\t// to avoid overwriting another track on one hand or needlessly creating additional\n\t\t// directories to avoid overwriting.\n\t\tDate startDate = new Date();\n\t\tif (null != c && 1 <= c.getCount()) {\n\t\t\tc.moveToFirst();\n\t\t\tlong startDateInMilliseconds = c.getLong(c.getColumnIndex(\n\t\t\t\t\tTrackContentProvider.Schema.COL_START_DATE));\n\t\t\tstartDate.setTime(startDateInMilliseconds);\n\t\t}\n\n\t\tFile trackGPXExportDirectory = getExportDirectory(startDate);\n\t\tString filenameBase = buildGPXFilename(c, trackGPXExportDirectory);\n\n\n\t\tString tags = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_TAGS));\n\t\tString track_description = c.getString(c.getColumnIndex(\n\t\t\t\tTrackContentProvider.Schema.COL_DESCRIPTION));\n\t\tString track_name = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\n\t\tc.close();\n\n\t\tFile trackFile = new File(trackGPXExportDirectory, filenameBase);\n\n\t\tCursor cTrackPoints = cr.query(TrackContentProvider.trackPointsUri(trackId), null,\n\t\t\t\tnull, null,\n\t\t\t\tTrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\n\t\tCursor cWayPoints = cr.query(TrackContentProvider.waypointsUri(trackId), null,\n\t\t\t\tnull, null,\n\t\t\t\tTrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\n\n\t\tif (null != cTrackPoints && null != cWayPoints) {\n\t\t\tpublishProgress(trackId, (long) cTrackPoints.getCount(), (long) cWayPoints.getCount());\n\n\t\t\ttry {\n\t\t\t\twriteGpxFile(track_name, tags, track_description, cTrackPoints, cWayPoints,\n\t\t\t\t\t\ttrackFile);\n\t\t\t\tif (exportMediaFiles()) {\n\t\t\t\t\tcopyWaypointFiles(trackId, trackGPXExportDirectory);\n\t\t\t\t}\n\t\t\t\tif (updateExportDate()) {\n\t\t\t\t\tDataHelper.setTrackExportDate(trackId, System.currentTimeMillis(), cr);\n\t\t\t\t}\n\t\t\t} catch (IOException ioe) {\n\t\t\t\tthrow new ExportTrackException(ioe.getMessage());\n\t\t\t} finally {\n\t\t\t\tcTrackPoints.close();\n\t\t\t\tcWayPoints.close();\n\t\t\t}\n\n\t\t\t// Force rescan of directory\n\t\t\tArrayList<String> files = new ArrayList<String>();\n\t\t\tfor (File file : trackGPXExportDirectory.listFiles()) {\n\t\t\t\tfiles.add(file.getAbsolutePath());\n\t\t\t}\n\t\t\tMediaScannerConnection.scanFile(context, files.toArray(new String[0]), null,\n\t\t\t\t\tnull);\n\t\t}\n\t}\n\n\t/**\n\t * Writes the GPX file\n\t * @param cTrackPoints Cursor to track points.\n\t * @param cWayPoints Cursor to way points.\n\t * @param target Target GPX file\n\t * @throws IOException\n\t */\n\tprivate void writeGpxFile(String trackName, String tags, String track_description, Cursor cTrackPoints, Cursor cWayPoints, File target) throws IOException {\n\n\t\tString accuracyOutput = PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_ACCURACY,\n\t\t\t\tOSMTracker.Preferences.VAL_OUTPUT_ACCURACY);\n\t\tboolean fillHDOP = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_GPX_HDOP_APPROXIMATION,\n\t\t\t\tOSMTracker.Preferences.VAL_OUTPUT_GPX_HDOP_APPROXIMATION);\n\t\tString compassOutput = PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_COMPASS,\n\t\t\t\tOSMTracker.Preferences.VAL_OUTPUT_COMPASS);\n\n\t\tLog.v(TAG, \"write preferences: compass:\" + compassOutput);\n\n\t\tWriter writer = null;\n\t\ttry {\n\n\t\t\twriter = new BufferedWriter(new FileWriter(target));\n\n\t\t\twriter.write(XML_HEADER + \"\\n\");\n\t\t\twriter.write(TAG_GPX + \"\\n\");\n\n\t\t\twriter.write(\"\\t<metadata>\\n\");\n\n\t\t\t// Write the track's name to a tag\n\t\t\tif((trackName != null && !trackName.equals(\"\"))) writer.write(\"\\t\\t<name>\"+ trackName +\"</name>\\n\");\n\n\t\t\tif (tags != null && !tags.equals(\"\")) {\n\t\t\t\tfor (String tag : tags.split(\",\"))\n\t\t\t\t\twriter.write(\"\\t\\t<keywords>\" + tag.trim() + \"</keywords>\\n\");\n\t\t\t}\n\n\t\t\tif ((track_description != null && !track_description.equals(\"\"))) writer.write(\"\\t\\t<desc>\" + track_description + \"</desc>\\n\");\n\n\t\t\twriter.write(\"\\t</metadata>\\n\");\n\n\t\t\twriteWayPoints(writer, cWayPoints, accuracyOutput, fillHDOP, compassOutput);\n\t\t\twriteTrackPoints(context.getResources().getString(R.string.gpx_track_name), writer, cTrackPoints, fillHDOP, compassOutput);\n\t\t\twriter.write(\"</gpx>\");\n\n\t\t} finally {\n\t\t\tif (writer != null) {\n\t\t\t\twriter.close();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Iterates on track points and write them.\n\t * @param trackName Name of the track (metadata).\n\t * @param fw Writer to the target file.\n\t * @param c Cursor to track points.\n\t * @param fillHDOP Indicates whether fill <hdop> tag with approximation from location accuracy.\n\t * @param compass Indicates if and how to write compass heading to the GPX ('none', 'comment', 'extension')\n\t * @throws IOException\n\t */\n\tprivate void writeTrackPoints(String trackName, Writer fw, Cursor c, boolean fillHDOP, String compass) throws IOException {\n\t\t// Update dialog every 1%\n\t\tint dialogUpdateThreshold = c.getCount() / 100;\n\t\tif (dialogUpdateThreshold == 0) {\n\t\t\tdialogUpdateThreshold++;\n\t\t}\n\n\t\tfw.write(\"\\t\" + \"<trk>\" + \"\\n\");\n\t\tfw.write(\"\\t\\t\" + \"<name>\" + CDATA_START + trackName + CDATA_END + \"</name>\" + \"\\n\");\n\t\tif (fillHDOP) {\n\t\t\tfw.write(\"\\t\\t\" + \"<cmt>\"\n\t\t\t\t\t+ CDATA_START\n\t\t\t\t\t+ context.getResources().getString(R.string.gpx_hdop_approximation_cmt)\n\t\t\t\t\t+ CDATA_END\n\t\t\t\t\t+ \"</cmt>\" + \"\\n\");\n\t\t}\n\t\tfw.write(\"\\t\\t\" + \"<trkseg>\" + \"\\n\");\n\n\t\tint i=0;\n\t\tfor(c.moveToFirst(); !c.isAfterLast(); c.moveToNext(),i++) {\n\t\t\tStringBuffer out = new StringBuffer();\n\t\t\tout.append(\"\\t\\t\\t\" + \"<trkpt lat=\\\"\"\n\t\t\t\t\t+ c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE)) + \"\\\" \"\n\t\t\t\t\t+ \"lon=\\\"\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE)) + \"\\\">\" + \"\\n\");\n\t\t\tif (! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION))) {\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<ele>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION)) + \"</ele>\" + \"\\n\");\n\t\t\t}\n\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<time>\" + pointDateFormatter.format(new Date(c.getLong(c.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP)))) + \"</time>\" + \"\\n\");\n\n\t\t\tif(fillHDOP && ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY))) {\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<hdop>\" + (c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) / OSMTracker.HDOP_APPROXIMATION_FACTOR) + \"</hdop>\" + \"\\n\");\n\t\t\t}\n\t\t\tif(OSMTracker.Preferences.VAL_OUTPUT_COMPASS_COMMENT.equals(compass) && !c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<cmt>\"+CDATA_START+\"compass heading: \" +\n\t\t\t\t\t\tc.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) +\n\t\t\t\t\t\t\"deg\\n\\t\\t\\t\\t\\tcompass accuracy: \" +\n\t\t\t\t\t\tc.getLong(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY))+\n\t\t\t\t\t\tCDATA_END+\"</cmt>\"+\"\\n\");\n\t\t\t}\n\n\t\t\tString buff = \"\";\n\t\t\tif(! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_SPEED))) {\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<speed>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_SPEED)) + \"</speed>\" + \"\\n\";\n\t\t\t}\n\t\t\tif(OSMTracker.Preferences.VAL_OUTPUT_COMPASS_EXTENSION.equals(compass) && !c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<compass>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) + \"</compass>\" + \"\\n\";\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<compass_accuracy>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) + \"</compass_accuracy>\" + \"\\n\";\n\t\t\t}\n\n\t\t\tif (! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE))) { //Checking if the database contains atmospheric_pressure data\n\t\t\t\tdouble pressure = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE));\n\t\t\t\tString pressure_formatted = String.format(\"%.1f\", pressure);\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<baro>\" + pressure_formatted + \"</baro>\" + \"\\n\";\n\t\t\t}\n\n\t\t\tif(! buff.equals(\"\")) {\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<extensions>\\n\");\n\t\t\t\tout.append(buff);\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"</extensions>\\n\");\n\t\t\t}\n\n\t\t\tout.append(\"\\t\\t\\t\" + \"</trkpt>\" + \"\\n\");\n\t\t\tfw.write(out.toString());\n\n\t\t\tif (i % dialogUpdateThreshold == 0) {\n\t\t\t\tpublishProgress((long) dialogUpdateThreshold);\n\t\t\t}\n\t\t}\n\n\t\tfw.write(\"\\t\\t\" + \"</trkseg>\" + \"\\n\");\n\t\tfw.write(\"\\t\" + \"</trk>\" + \"\\n\");\n\t}\n\n\t/**\n\t * Iterates on way points and write them.\n\t * @param fw Writer to the target file.\n\t * @param c Cursor to way points.\n\t * @param accuracyInfo Constant describing how to include (or not) accuracy info for way points.\n\t * @param fillHDOP Indicates whether fill <hdop> tag with approximation from location accuracy.\n\t * @param compass Indicates if and how to write compass heading to the GPX ('none', 'comment', 'extension')\n\t * @throws IOException\n\t */\n\tprivate void writeWayPoints(Writer fw, Cursor c, String accuracyInfo, boolean fillHDOP, String compass) throws IOException {\n\n\t\t// Update dialog every 1%\n\t\tint dialogUpdateThreshold = c.getCount() / 100;\n\t\tif (dialogUpdateThreshold == 0) {\n\t\t\tdialogUpdateThreshold++;\n\t\t}\n\n\t\t// Label for meter unit\n\t\tString meterUnit = context.getResources().getString(R.string.various_unit_meters);\n\t\t// Word \"accuracy\"\n\t\tString accuracy = context.getResources().getString(R.string.various_accuracy);\n\n\t\tint i=0;\n\t\tfor(c.moveToFirst(); !c.isAfterLast(); c.moveToNext(), i++) {\n\t\t\tStringBuilder out = new StringBuilder();\n\t\t\tout.append(\"\\t\" + \"<wpt lat=\\\"\"\n\t\t\t\t\t+ c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE)) + \"\\\" \"\n\t\t\t\t\t+ \"lon=\\\"\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE)) + \"\\\">\" + \"\\n\");\n\t\t\tif (! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION))) {\n\t\t\t\tout.append(\"\\t\\t\" + \"<ele>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ELEVATION)) + \"</ele>\" + \"\\n\");\n\t\t\t}\n\t\t\tout.append(\"\\t\\t\" + \"<time>\" + pointDateFormatter.format(new Date(c.getLong(c.getColumnIndex(TrackContentProvider.Schema.COL_TIMESTAMP)))) + \"</time>\" + \"\\n\");\n\n\t\t\tString name = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\n\t\t\tif (! OSMTracker.Preferences.VAL_OUTPUT_ACCURACY_NONE.equals(accuracyInfo) && ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY))) {\n\t\t\t\t// Outputs accuracy info for way point\n\t\t\t\tif (OSMTracker.Preferences.VAL_OUTPUT_ACCURACY_WPT_NAME.equals(accuracyInfo)) {\n\t\t\t\t\t// Output accuracy with name\n\t\t\t\t\tout.append(\"\\t\\t\" + \"<name>\"\n\t\t\t\t\t\t\t+ CDATA_START\n\t\t\t\t\t\t\t+ name\n\t\t\t\t\t\t\t+ \" (\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) + meterUnit + \")\"\n\t\t\t\t\t\t\t+ CDATA_END\n\t\t\t\t\t\t\t+ \"</name>\" + \"\\n\");\n\t\t\t\t\tif (OSMTracker.Preferences.VAL_OUTPUT_COMPASS_COMMENT.equals(compass) &&\n\t\t\t\t\t\t\t! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\t\t\tout.append(\"\\t\\t\"+ \"<cmt>\" + CDATA_START + \"compass heading: \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) +\n\t\t\t\t\t\t\t\t\"deg\\n\\t\\t\\tcompass accuracy: \" + c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) + CDATA_END + \"</cmt>\\n\");\n\t\t\t\t\t}\n\t\t\t\t} else if (OSMTracker.Preferences.VAL_OUTPUT_ACCURACY_WPT_CMT.equals(accuracyInfo)) {\n\t\t\t\t\t// Output accuracy in separate tag\n\t\t\t\t\tout.append(\"\\t\\t\" + \"<name>\" + CDATA_START + name + CDATA_END + \"</name>\" + \"\\n\");\n\t\t\t\t\tif (OSMTracker.Preferences.VAL_OUTPUT_COMPASS_COMMENT.equals(compass) &&\n\t\t\t\t\t\t\t! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\t\t\tout.append(\"\\t\\t\" + \"<cmt>\" + CDATA_START + accuracy + \": \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) + meterUnit +\n\t\t\t\t\t\t\t\t\"\\n\\t\\t\\t compass heading: \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) +\n\t\t\t\t\t\t\t\t\"deg\\n\\t\\t\\t compass accuracy: \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) +CDATA_END + \"</cmt>\" + \"\\n\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout.append(\"\\t\\t\" + \"<cmt>\" + CDATA_START + accuracy + \": \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) + meterUnit + CDATA_END + \"</cmt>\" + \"\\n\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Unknown value for accuracy info, shouldn't occur but who knows ?\n\t\t\t\t\t// See issue #68. Output at least the name just in case.\n\t\t\t\t\tout.append(\"\\t\\t\" + \"<name>\" + CDATA_START + name + CDATA_END + \"</name>\" + \"\\n\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No accuracy info requested, or available\n\t\t\t\tout.append(\"\\t\\t\" + \"<name>\" + CDATA_START + name + CDATA_END + \"</name>\" + \"\\n\");\n\t\t\t\tif (OSMTracker.Preferences.VAL_OUTPUT_COMPASS_COMMENT.equals(compass) &&\n\t\t\t\t\t\t! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\t\tout.append(\"\\t\\t\"+ \"<cmt>\" + CDATA_START + \"compass heading: \" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) +\n\t\t\t\t\t\t\t\"deg\\n\\t\\t\\tcompass accuracy: \" + c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) + CDATA_END + \"</cmt>\\n\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tString link = c.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_LINK));\n\t\t\tif (link != null) {\n\t\t\t\tout.append(\"\\t\\t\" + \"<link href=\\\"\" + URLEncoder.encode(link) + \"\\\">\" + \"\\n\");\n\t\t\t\tout.append(\"\\t\\t\\t\" + \"<text>\" + link +\"</text>\\n\");\n\t\t\t\tout.append(\"\\t\\t\" + \"</link>\" + \"\\n\");\n\t\t\t}\n\n\t\t\tif (! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_NBSATELLITES))) {\n\t\t\t\tout.append(\"\\t\\t\" + \"<sat>\" + c.getInt(c.getColumnIndex(TrackContentProvider.Schema.COL_NBSATELLITES)) + \"</sat>\" + \"\\n\");\n\t\t\t}\n\n\t\t\tif(fillHDOP && ! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY))) {\n\t\t\t\tout.append(\"\\t\\t\" + \"<hdop>\" + (c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ACCURACY)) / OSMTracker.HDOP_APPROXIMATION_FACTOR) + \"</hdop>\" + \"\\n\");\n\t\t\t}\n\n\t\t\tString buff = \"\";\n\n\t\t\tif(OSMTracker.Preferences.VAL_OUTPUT_COMPASS_EXTENSION.equals(compass) && !c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS))) {\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<compass>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS)) + \"</compass>\" + \"\\n\";\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<compass_accuracy>\" + c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_COMPASS_ACCURACY)) + \"</compass_accuracy>\" + \"\\n\";\n\t\t\t}\n\n\t\t\tif (! c.isNull(c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE))) { //Checking if the database contains atmospheric_pressure data\n\t\t\t\tdouble pressure = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_ATMOSPHERIC_PRESSURE));\n\t\t\t\tString pressure_formatted = String.format(\"%.1f\", pressure);\n\t\t\t\tbuff += \"\\t\\t\\t\\t\\t\" + \"<baro>\" + pressure_formatted + \"</baro>\" + \"\\n\";\n\t\t\t}\n\n\t\t\tif(! buff.equals(\"\")) {\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"<extensions>\\n\");\n\t\t\t\tout.append(buff);\n\t\t\t\tout.append(\"\\t\\t\\t\\t\" + \"</extensions>\\n\");\n\t\t\t}\n\n\t\t\tout.append(\"\\t\" + \"</wpt>\" + \"\\n\");\n\n\t\t\tfw.write(out.toString());\n\n\t\t\tif (i % dialogUpdateThreshold == 0) {\n\t\t\t\tpublishProgress((long) dialogUpdateThreshold);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Copy all files from the OSMTracker external storage location to gpxOutputDirectory\n\t * @param gpxOutputDirectory The directory to which the track is being exported\n\t */\n\tprivate void copyWaypointFiles(long trackId, File gpxOutputDirectory) {\n\t\t// Get the new location where files related to these waypoints are/should be stored\n\t\tFile trackDir = DataHelper.getTrackDirectory(trackId, context);\n\n\t\tif(trackDir != null){\n\t\t\tLog.v(TAG, \"Copying files from the standard TrackDir [\"+trackDir+\"] to the export directory [\"+gpxOutputDirectory+\"]\");\n\t\t\tFileSystemUtils.copyDirectoryContents(gpxOutputDirectory, trackDir);\n\t\t}\n\n\t}\n\n\t/**\n\t * Build GPX filename from track info, based on preferences.\n\t * The filename will have the start date, and/or the track name if available.\n\t * If no name is available, fall back to the start date and time.\n\t * Track name characters will be sanitized using {@link #FILENAME_CHARS_BLACKLIST_PATTERN}.\n\t * @param cursor  Track info: {@link TrackContentProvider.Schema#COL_NAME}, {@link TrackContentProvider.Schema#COL_START_DATE}\n\t * @return  GPX filename, not including the path\n\t */\n\tpublic String buildGPXFilename(Cursor cursor, File parentDirectory) {\n\t\tString desiredOutputFormat = PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_FILENAME,\n\t\t\t\tOSMTracker.Preferences.VAL_OUTPUT_FILENAME);\n\n\t\tlong trackStartDate = cursor.getLong(cursor.getColumnIndex(TrackContentProvider.Schema.COL_START_DATE));\n\t\tString formattedTrackStartDate = DataHelper.FILENAME_FORMATTER.format(new Date(trackStartDate));\n\n\t\tString trackName =  cursor.getString(cursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME));\n\t\tif(trackName != null)\n\t\t\ttrackName = sanitizeTrackName(trackName);\n\n\t\tString firstGpxFilename = formatGpxFilename(desiredOutputFormat, trackName, formattedTrackStartDate);\n\n\t\tfirstGpxFilename = getUniqueChildNameFor(parentDirectory, firstGpxFilename, EXTENSION_GPX);\n\t\treturn firstGpxFilename;\n\n\t}\n\n\tpublic String formatGpxFilename(String desiredOutputFormat, String sanitizedTrackName, String formattedTrackStartDate){\n\t\tString result = \"\";\n\t\tString exportLabelName = PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_OUTPUT_FILENAME_LABEL,\tOSMTracker.Preferences.VAL_OUTPUT_FILENAME_LABEL);\n\t\t// If is required to avoid Unit Test fail\n\t\tif(exportLabelName == null){\n\t\t\texportLabelName = OSMTracker.Preferences.VAL_OUTPUT_FILENAME_LABEL;\n\t\t}\n\t\tboolean thereIsTrackName = sanitizedTrackName != null && sanitizedTrackName.length() >= 1;\n\n\t\tswitch(desiredOutputFormat){\n\t\t\tcase OSMTracker.Preferences.VAL_OUTPUT_FILENAME_NAME:\n\t\t\t\tif(thereIsTrackName)\n\t\t\t\t\tresult += sanitizedTrackName;\n\t\t\t\telse\n\t\t\t\t\tresult += formattedTrackStartDate;\n\t\t\t\tbreak;\n\t\t\tcase OSMTracker.Preferences.VAL_OUTPUT_FILENAME_NAME_DATE:\n\t\t\t\tif(thereIsTrackName)\n\t\t\t\t\tif(sanitizedTrackName.equals(formattedTrackStartDate)) {\n\t\t\t\t\t\tresult += sanitizedTrackName;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tresult += sanitizedTrackName + \"_\"  + formattedTrackStartDate; // name is not equal\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tresult += formattedTrackStartDate;\n\t\t\t\tbreak;\n\t\t\tcase OSMTracker.Preferences.VAL_OUTPUT_FILENAME_DATE_NAME:\n\t\t\t\tif(thereIsTrackName){\n\t\t\t\t\tif(sanitizedTrackName.equals(formattedTrackStartDate)){\n\t\t\t\t\t\tresult += formattedTrackStartDate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tresult += formattedTrackStartDate  + \"_\" + sanitizedTrackName;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tresult += formattedTrackStartDate;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase OSMTracker.Preferences.VAL_OUTPUT_FILENAME_DATE:\n\t\t\t\tresult += formattedTrackStartDate;\n\t\t\t\tbreak;\n\t\t}\n\t\tif(!(exportLabelName.equals(\"\"))) {\n\t\t\tresult += \"_\" + exportLabelName;\n\t\t}\n\t\treturn result;\n\t}\n\n\n\n\tpublic String sanitizeTrackName(String trackName){\n\t\tString first = trackName.trim().replace(':', ';');\n\t\tString second = FILENAME_CHARS_BLACKLIST_PATTERN.matcher(first).replaceAll(\"_\");\n\t\treturn second;\n\t}\n\n\t/**\n\t * Message in case of an error\n\t */\n\tpublic String getErrorMsg() {\n\t\treturn errorMsg;\n\t}\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/gpx/ZipHelper.java",
    "content": "package net.osmtracker.gpx;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.util.Objects;\nimport java.util.zip.ZipEntry;\nimport java.util.zip.ZipOutputStream;\n\nimport net.osmtracker.db.DataHelper;\n\npublic class ZipHelper {\n\n    private static final String TAG = \"ZipHelper\";\n\n    /**\n     * Compresses all files associated with a track into a ZIP file.\n     *\n     * @param context   Application context.\n     * @param trackId   Track ID.\n     * @param fileGPX   GPX file.\n     * @return The created ZIP file or null if an error occurred.\n     */\n    public static File zipCacheFiles(Context context, long trackId, File fileGPX) {\n\n        String name = fileGPX.getName();\n        File zipFile = new File(context.getCacheDir(),\n                name.substring(0, name.lastIndexOf(\".\")) + DataHelper.EXTENSION_ZIP);\n\n        File traceFilesDirectory = DataHelper.getTrackDirectory(trackId, context);\n\n        try (FileOutputStream fos = new FileOutputStream(zipFile);\n             ZipOutputStream zos = new ZipOutputStream(fos)) {\n\n            // Add gpx file\n            addFileToZip(fileGPX, zos);\n\n            if(!traceFilesDirectory.exists()){\n                return zipFile;\n            }\n\n            for (File multimediaFile : Objects.requireNonNull(traceFilesDirectory.listFiles())) {\n                if (!multimediaFile.isDirectory()) { // Avoid adding empty folders\n                    // only add files that are not .zip files\n                    if (!multimediaFile.getName().endsWith(DataHelper.EXTENSION_ZIP)) {\n                        addFileToZip(multimediaFile, zos);\n                    } else {\n                        Log.d(TAG, \"Multimedia file: \" + multimediaFile.getAbsolutePath() + \" ignored. \");\n                    }\n                } else {\n                    Log.d(TAG, \"Folder \" + multimediaFile.getAbsolutePath() + \" ignored. \");\n                }\n            }\n\n            Log.d(TAG, \"ZIP file created: \" + zipFile.getAbsolutePath());\n            return zipFile;\n\n        } catch (IOException e) {\n            Log.e(TAG, \"Error creating ZIP file\", e);\n            return null;\n        }\n    }\n\n\n    /**\n     * Adds a file to the ZIP archive.\n     *\n     * @param file The file to add.\n     * @param zos  The ZipOutputStream to which the file will be added.\n     */\n    private static void addFileToZip(File file, ZipOutputStream zos) throws IOException {\n        if (!file.exists()) {\n            Log.e(TAG, \"File does not exist: \" + file.getAbsolutePath());\n            return;\n        }\n\n        try (FileInputStream fis = new FileInputStream(file)) {\n            ZipEntry zipEntry = new ZipEntry(file.getName());\n            zos.putNextEntry(zipEntry);\n\n            byte[] buffer = new byte[1024];\n            int length;\n            while ((length = fis.read(buffer)) > 0) {\n                zos.write(buffer, 0, length);\n            }\n\n            zos.closeEntry();\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/DisablableTableLayout.java",
    "content": "package net.osmtracker.layout;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TableLayout;\n\n/**\n * TableLayout allowing disabling of child components.\n * This layout is hard-coded for level 2 childs, ie. childs\n * that are into a TableRow directly attached to the TableLayout.\n * \n * @author Nicolas Guillaumin\n *\n */\npublic class DisablableTableLayout extends TableLayout {\n\n\tpublic DisablableTableLayout(Context context) {\n\t\tsuper(context);\n\t}\n\t\n\t/**\n\t * Enables to set an OnClickListener to all the childs.\n\t * @param l The OnClickListener to set.\n\t */\n\tpublic void setOnClickListenerForAllChild(OnClickListener l) {\n\n\t\tfor(int i=0; i<this.getChildCount(); i++) {\n\t\t\tView v = (View) this.getChildAt(i);\n\t\t\tif (v instanceof ViewGroup ) {\n\t\t\t\tfor(int j=0; j< ((ViewGroup)v).getChildCount(); j++) {\n\t\t\t\t\tView subView = ((ViewGroup)v).getChildAt(j);\n\t\t\t\t\tsubView.setOnClickListener(l);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tv.setOnClickListener(l);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Enables or disable all child of the Layout.\n\t * @param enabled If true, enable all, otherwise disable all.\n\t */\n\t@Override\n\tpublic void setEnabled(boolean enabled) {\n\t\tfor(int i=0; i<this.getChildCount(); i++) {\n\t\t\tView v = (View) this.getChildAt(i);\n\t\t\tif (v instanceof ViewGroup ) {\n\t\t\t\tfor(int j=0; j< ((ViewGroup)v).getChildCount(); j++) {\n\t\t\t\t\tView subView = ((ViewGroup)v).getChildAt(j);\n\t\t\t\t\tsubView.setEnabled(enabled);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tv.setEnabled(enabled);\n\t\t\t}\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/DownloadCustomLayoutTask.java",
    "content": "package net.osmtracker.layout;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.os.AsyncTask;\nimport android.os.Environment;\nimport android.util.Log;\n\nimport androidx.preference.PreferenceManager;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\nimport net.osmtracker.OSMTracker;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.util.HashMap;\nimport java.util.Set;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.util.CustomLayoutsUtils;\nimport net.osmtracker.util.URLCreator;\n\n/**\n * Created by aton1698 on 13/12/17.\n */\n\npublic class DownloadCustomLayoutTask extends AsyncTask<String, Integer, Boolean> {\n    private static final String TAG = \"Download Custom Layout\" ;\n\n    private Context context;\n\n    public DownloadCustomLayoutTask(Context context) {\n        this.context = context;\n    }\n\n    @Override\n    protected Boolean doInBackground(String[] layoutData) {\n\n        String layoutName = layoutData[0];\n        String iso = layoutData[1];\n        return downloadLayout(layoutName,iso);\n    }\n\n\n    public boolean downloadLayout(String layoutName, String iso){\n        String layoutFolderName = layoutName.replace(\" \", \"_\");\n        SharedPreferences prefs =  PreferenceManager.getDefaultSharedPreferences(context);\n        String storageDir = File.separator + OSMTracker.Preferences.VAL_STORAGE_DIR;\n        Log.d(TAG,\"storage directory: \" + storageDir);\n\n        String layoutURL = URLCreator.createLayoutFileURL(context, layoutFolderName, iso);\n        String layoutPath = context.getExternalFilesDir(null) + storageDir + File.separator +\n\t\t\t\tDataHelper.LAYOUTS_SUBDIR + File.separator;\n\n        //TODO: change \"_icons\" for Preferences.ICONS_DIR_SUFFIX\n        String iconsPath = context.getExternalFilesDir(null)  + storageDir + File.separator +\n\t\t\t\tDataHelper.LAYOUTS_SUBDIR + File.separator  + layoutFolderName+\"_icons\" +\n                File.separator;\n\n        Boolean status = false;\n\n        try {\n            // download layout\n            createDir(layoutPath);\n            downloadFile(layoutURL,layoutPath +File.separator +\n                    CustomLayoutsUtils.createFileName(layoutName, iso));\n            status = true;\n\n            // downloading icons\n            HashMap<String, String> iconsInfo = getIconsHash(layoutName);\n            if (iconsInfo != null) {\n                createDir(iconsPath);\n                Set<String> keys = iconsInfo.keySet();\n                String currentKey;\n                String currentValue;\n                for(int i=0 ; i<keys.toArray().length ; i++){\n                    currentKey= (String)keys.toArray()[i];\n                    currentValue = iconsInfo.get(currentKey);\n                    downloadFile(currentValue, iconsPath + File.separator + currentKey);\n                }\n            }\n        } catch (Throwable throwable) {\n            Log.e(TAG, throwable.toString());\n            status = false;\n        }\n        return status;\n    }\n\n\n    //TODO: reuse export create dir functionality\n    private void createDir(String dirPath) throws IOException {\n        // Checks if a volume containing external storage is available for read and write.\n        if (! Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ) {\n            throw new IOException(context.getResources().getString(R.string.error_externalstorage_not_writable));\n        }\n\n        File directory = new File(dirPath);\n         //If File is not present create directory\n        if (! directory.exists() ) {\n            boolean ok = directory.mkdirs();\n            if (! ok) {\n                throw new IOException(context.getResources().getString(R.string.error_externalstorage_not_writable));\n            }\n        }\n        Log.d(TAG, \"Directory Created: \" + directory.toString());\n    }\n\n    private boolean isSDCardPresent() {\n        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);\n    }\n\n    private void downloadFile( String downloadUrl, String outputFile) throws Throwable {\n\n        URL url = new URL(downloadUrl); //Create Download URl\n        HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Open Url Connection\n        InputStream is = connection.getInputStream(); //Get InputStream for connection\n\n        if (is != null){\n            FileOutputStream fos = new FileOutputStream(outputFile);//Get OutputStream for NewFile Location\n\n            byte[] buffer = new byte[2048]; //Set buffer type\n            int len = 0; //init length\n\n            while ((len = is.read(buffer)) != -1) {\n                fos.write(buffer, 0, len);//Write new file\n            }\n            fos.close();\n            is.close();\n        }\n        else{\n            throw new IOException(\"No Contents\");\n        }\n    }\n\n    /**\n     *\n     * @param layoutName\n     * @return\n     */\n    private HashMap<String,String> getIconsHash(String layoutName) {\n\n        final HashMap<String,String> iconsHash = new HashMap<String, String>();\n        String layoutFolderName = layoutName.replace(\" \", \"_\");\n\n        String link = URLCreator.createIconsDirUrl(context, layoutFolderName);\n        System.out.println(\"Download icons hash from: \" + link);\n\n        try {\n            URL url = new URL(link);\n            HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();\n            InputStream stream = httpConnection.getInputStream();\n            String response = CustomLayoutsUtils.getStringFromStream(stream);\n            JSONArray jsonArray = new JSONArray(response);\n\n            for (int i= 0; i < jsonArray.length(); i++) {\n                JSONObject object = jsonArray.getJSONObject(i);\n                iconsHash.put(object.getString(\"name\"), object.getString(\"download_url\"));\n            }\n\n\n        } catch (Exception e) {\n            Log.e(TAG, e.toString());\n            return null;\n        }\n\n        return iconsHash;\n\n    }\n\n\n\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/GetStringResponseTask.java",
    "content": "package net.osmtracker.layout;\n\nimport android.os.AsyncTask;\nimport android.util.Log;\n\nimport net.osmtracker.util.CustomLayoutsUtils;\n\nimport java.net.URL;\n\nimport javax.net.ssl.HttpsURLConnection;\n\n/**\n * Created by james on 07/12/17.\n */\n\npublic class GetStringResponseTask extends AsyncTask<String, Integer, String> {\n    private static final String TAG = \"GetStringResponseTask\";\n\n    /**\n     *\n     * @param params params[0] must be the URL from which the String will be retrieved.\n     * @return\n     */\n    @Override\n    protected String doInBackground(String... params) {\n        try {\n            URL url = new URL(params[0]);\n            HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory());\n            HttpsURLConnection l_connection = (HttpsURLConnection) url.openConnection();\n            return CustomLayoutsUtils.getStringFromStream(l_connection.getInputStream());\n\n        } catch (Exception e) {\n            Log.e(TAG, \"Error. Exception: \" + e.toString());\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/GpsStatusRecord.java",
    "content": "package net.osmtracker.layout;\n\nimport java.text.DecimalFormat;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.TrackLogger;\n\nimport android.Manifest;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.location.GnssStatus;\nimport android.location.Location;\nimport android.location.LocationListener;\nimport android.location.LocationManager;\nimport android.location.LocationProvider;\nimport android.os.Bundle;\n\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.preference.PreferenceManager;\n\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\n/**\n * Layout for the GPS Status image and misc action buttons.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class GpsStatusRecord extends LinearLayout implements LocationListener {\n\t\n\tprivate final static String TAG = GpsStatusRecord.class.getSimpleName();\n\n\tfinal private int REQUEST_CODE_GPS_PERMISSIONS = 1;\n\n\t/**\n\t * Formatter for accuracy display.\n\t */\n\tprivate final static DecimalFormat ACCURACY_FORMAT = new DecimalFormat(\"0\");\n\n\t/**\n\t * Keeps matching between satellite indicator bars to draw, and numbers\n\t * of satellites for each bars;\n\t */\n\tprivate final static int[] SAT_INDICATOR_TRESHOLD = {2, 3, 4, 6, 8};\n\n\t/**\n\t * Containing activity\n\t */\n\tprivate TrackLogger activity;\n\n\t/**\n\t * Reference to LocationManager\n\t */\n\tprivate LocationManager lmgr;\n\n\t/**\n\t * the timestamp of the last GPS fix we used\n\t */\n\tprivate long lastGPSTimestampStatus = 0;\n\n\t/**\n\t * the timestamp of the last GPS fix we used for location updates\n\t */\n\tprivate long lastGPSTimestampLocation = 0;\n\n\t/**\n\t * the interval (in ms) to log GPS fixes defined in the preferences\n\t */\n\tprivate final long gpsLoggingInterval;\n\n\t/**\n\t * Is GPS active ?\n\t */\n\tprivate boolean gpsActive = false;\n\n\t/**\n\t * Satellites count\n\t */\n\tprivate int satCount = 0;\n\n\t/**\n\t * Satellites used in fix count\n\t */\n\tprivate int fixCount = 0;\n\n\t\n\tpublic GpsStatusRecord(Context context, AttributeSet attrs) {\n\t\tsuper(context, attrs);\n\t\tLayoutInflater.from(context).inflate(R.layout.gpsstatus_record, this, true);\n\n\t\t//read the logging interval from preferences\n\t\tgpsLoggingInterval = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(context).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_GPS_LOGGING_INTERVAL, OSMTracker.Preferences.VAL_GPS_LOGGING_INTERVAL)) * 1000;\n\n\t\tif (context instanceof TrackLogger) {\n\t\t\tactivity = (TrackLogger) context;\n\t\t\tlmgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);\n\t\t}\n\t\t\n\t\t// Initialize waiting message (0 satellites so far)\n\t\tTextView tvAccuracy = (TextView) findViewById(R.id.gpsstatus_record_tvAccuracy);\n\t\ttvAccuracy.setText(getResources().getString(R.string.various_waiting_gps_fix)\n\t\t\t\t.replace(\"{0}\", \"0\")\n\t\t\t\t.replace(\"{1}\", \"0\"));\n\n\t}\n\n\tpublic void requestLocationUpdates(boolean request) {\n\t\tif (request) {\n\t\t\tif (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\n\t\t\t\tlmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);\n\t\t\t\tlmgr.registerGnssStatusCallback(mStatusCallback);\n\t\t\t} else {\n\t\t\t\tActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},\n\t\t\t\t\t\tREQUEST_CODE_GPS_PERMISSIONS);\n\t\t\t}\n\t\t} else {\n\t\t\tlmgr.removeUpdates(this);\n\t\t\tlmgr.unregisterGnssStatusCallback(mStatusCallback);\n\t\t}\n\t}\n\n\tprivate GnssStatus.Callback mStatusCallback = new GnssStatus.Callback() {\n\t\t@Override\n\t\tpublic void onSatelliteStatusChanged(GnssStatus status) {\n\t\t\tsatCount = status.getSatelliteCount();\n\t\t\tfixCount = 0;\n\n\t\t\tfor (int i = 0; i < satCount; i++) {\n\t\t\t\tif (status.usedInFix(i)) {\n\t\t\t\t\tfixCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fixCount == 0) {\n\t\t\t\tTextView tvAccuracy = findViewById(R.id.gpsstatus_record_tvAccuracy);\n\t\t\t\ttvAccuracy.setText(getResources().getString(R.string.various_waiting_gps_fix)\n\t\t\t\t\t\t.replace(\"{0}\", Long.toString(fixCount))\n\t\t\t\t\t\t.replace(\"{1}\", Long.toString(satCount)));\n\n\t\t\t\t((ImageView) findViewById(R.id.gpsstatus_record_imgSatIndicator)).setImageResource(R.drawable.sat_indicator_unknown);\n\t\t\t}\n\n\t\t\tLog.v(TAG, \"Found \" + satCount + \" satellites. \" + fixCount + \" used in fix.\");\n\t\t}\n\t};\n\n\t@Override\n\tpublic void onLocationChanged(Location location) {\n\t\t// first of all we check if the time from the last used fix to the current fix is greater than the logging interval\n\t\tif ((lastGPSTimestampLocation + gpsLoggingInterval) < System.currentTimeMillis()) {\n\t\t\tlastGPSTimestampLocation = System.currentTimeMillis(); // save the time of this fix\n\t\t\tLog.v(TAG, \"Location received \" + location);\n\t\t\tif (!gpsActive) {\n\t\t\t\tgpsActive = true;\n\t\t\t\t// GPS activated, activate UI\n\t\t\t\tactivity.onGpsEnabled();\n\t\t\t\tmanageRecordingIndicator(true);\n\t\t\t}\n\t\t\telse if (gpsActive && !activity.getButtonsEnabled()) {\n\t\t\t\tactivity.onGpsEnabled();\n\t\t\t\tmanageRecordingIndicator(true);\n\t\t\t}\n\n\t\t\tTextView tvAccuracy = findViewById(R.id.gpsstatus_record_tvAccuracy);\n\t\t\tif (location.hasAccuracy()) {\n\t\t\t\tLog.d(TAG, \"location accuracy: \"+ ACCURACY_FORMAT.format(location.getAccuracy()));\n\t\t\t\ttvAccuracy.setText(getResources().getString(R.string.various_accuracy_with_sats)\n\t\t\t\t\t\t.replace(\"{0}\", ACCURACY_FORMAT.format(location.getAccuracy()))\n\t\t\t\t\t\t.replace(\"{1}\", getResources().getString(R.string.various_unit_meters))\n\t\t\t\t\t\t.replace(\"{2}\", Long.toString(fixCount))\n\t\t\t\t\t\t.replace(\"{3}\", Long.toString(satCount)));\n\n\t\t\t\tmanageSatelliteStatusIndicator((int) location.getAccuracy());\n\n\t\t\t} else {\n\t\t\t\tLog.d(TAG, \"location without accuracy\");\n\t\t\t\ttvAccuracy.setText(\"\");\n\t\t\t}\n\t\t}\n\t}\n\n\t@Override\n\tpublic void onProviderDisabled(String provider) {\n\t\tLog.d(TAG, \"Location provider \" + provider + \" disabled\");\n\t\tgpsActive = false;\n\t\t((ImageView) findViewById(R.id.gpsstatus_record_imgSatIndicator)).setImageResource(R.drawable.sat_indicator_off);\n\t\t((TextView) findViewById(R.id.gpsstatus_record_tvAccuracy)).setText(\"\");\n\t\tactivity.onGpsDisabled();\n\t}\n\n\t@Override\n\tpublic void onProviderEnabled(String provider) {\n\t\tLog.d(TAG, \"Location provider \" + provider + \" enabled\");\n\t\t((ImageView) findViewById(R.id.gpsstatus_record_imgSatIndicator)).setImageResource(R.drawable.sat_indicator_unknown);\n\t}\n\n\t@Override\n\tpublic void onStatusChanged(String provider, int status, Bundle extras) {\n\t\t// Update provider status image according to status\n\t\tLog.d(TAG, \"Location provider \" + provider + \" status changed to: \" + status);\n\t\tImageView imgSatIndicator = findViewById(R.id.gpsstatus_record_imgSatIndicator);\n\t\tTextView tvAccuracy = findViewById(R.id.gpsstatus_record_tvAccuracy);\n\n\t\tswitch (status) {\n\t\t\t// Don't do anything for status AVAILABLE, as this event occurs frequently,\n\t\t\t// changing the graphics cause flickering .\n\t\t\tcase LocationProvider.OUT_OF_SERVICE:\n\t\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_off);\n\t\t\t\ttvAccuracy.setText(\"\");\n\t\t\t\tgpsActive = false;\n\t\t\t\tactivity.onGpsDisabled();\n\t\t\t\tbreak;\n\t\t\tcase LocationProvider.TEMPORARILY_UNAVAILABLE:\n\t\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_unknown);\n\t\t\t\ttvAccuracy.setText(\"\");\n\t\t\t\tgpsActive = false;\n\t\t\t\tbreak;\n\t\t}\n\n\t}\n\t\n\t/**\n\t * Manages the state of the recording indicator, depending if we're tracking or not.\n\t * @param isTracking true if the indicator must show that we're tracking, otherwise false\n\t */\n\tpublic void manageRecordingIndicator(boolean isTracking) {\n\t\tImageView recordStatus = findViewById(R.id.gpsstatus_record_animRec);\n\t\tif (isTracking) {\n\t\t\trecordStatus.setImageResource(R.drawable.record_red);\n\t\t} else {\n\t\t\trecordStatus.setImageResource(R.drawable.record_grey);\n\t\t}\n\t}\n\n\t/**\n\t * Manages the state of the satellites status\n\t * @param accuracy in meters, the smaller the number the better the accuracy.\n\t */\n\tprivate void manageSatelliteStatusIndicator(int accuracy){\n\t\tImageView imgSatIndicator = findViewById(R.id.gpsstatus_record_imgSatIndicator);\n\n\t\tint nbBars = accuracy / 4;\n\n\t\tif (nbBars == 0) {\n\t\t\tLog.v(TAG, \"Will draw 5 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_5);\n\t\t} else if (nbBars == 1) {\n\t\t\tLog.v(TAG, \"Will draw 4 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_4);\n\t\t} else if (nbBars == 2) {\n\t\t\tLog.v(TAG, \"Will draw 3 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_3);\n\t\t} else if (nbBars == 3) {\n\t\t\tLog.v(TAG, \"Will draw 2 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_2);\n\t\t} else if (nbBars == 4) {\n\t\t\tLog.v(TAG, \"Will draw 1 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_1);\n\t\t} else {\n\t\t\tLog.v(TAG, \"Will draw 0 bars.\");\n\t\t\timgSatIndicator.setImageResource(R.drawable.sat_indicator_0);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/TLSSocketFactory.java",
    "content": "package net.osmtracker.layout;\n\nimport java.io.IOException;\nimport java.net.InetAddress;\nimport java.net.Socket;\nimport java.net.UnknownHostException;\nimport java.security.KeyManagementException;\nimport java.security.NoSuchAlgorithmException;\n\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.SSLSocket;\nimport javax.net.ssl.SSLSocketFactory;\n\n/**\n * @author fkrauthan\n */\npublic class TLSSocketFactory extends SSLSocketFactory {\n\n    private SSLSocketFactory internalSSLSocketFactory;\n\n    public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {\n        SSLContext context = SSLContext.getInstance(\"TLS\");\n        context.init(null, null, null);\n        internalSSLSocketFactory = context.getSocketFactory();\n    }\n\n    @Override\n    public String[] getDefaultCipherSuites() {\n        return internalSSLSocketFactory.getDefaultCipherSuites();\n    }\n\n    @Override\n    public String[] getSupportedCipherSuites() {\n        return internalSSLSocketFactory.getSupportedCipherSuites();\n    }\n\n    @Override\n    public Socket createSocket() throws IOException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket());\n    }\n\n    @Override\n    public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));\n    }\n\n    @Override\n    public Socket createSocket(String host, int port) throws IOException, UnknownHostException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));\n    }\n\n    @Override\n    public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));\n    }\n\n    @Override\n    public Socket createSocket(InetAddress host, int port) throws IOException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));\n    }\n\n    @Override\n    public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {\n        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));\n    }\n\n    private Socket enableTLSOnSocket(Socket socket) {\n        if(socket != null && (socket instanceof SSLSocket)) {\n            ((SSLSocket)socket).setEnabledProtocols(new String[] {\"TLSv1\", \"TLSv1.1\", \"TLSv1.2\"});\n        }\n        return socket;\n    }\n}"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/URLValidatorTask.java",
    "content": "package net.osmtracker.layout;\n\nimport android.os.AsyncTask;\nimport android.util.Log;\n\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\nimport net.osmtracker.util.URLCreator;\n\nimport javax.net.ssl.HttpsURLConnection;\nimport static android.content.ContentValues.TAG;\n\n/**\n * Created by labexp on 13/12/17.\n */\n\npublic class URLValidatorTask extends AsyncTask<String, Integer, Boolean>{\n\n    public static final String TAG = \"URLValidatorTask\";\n\n    @Override\n    protected Boolean doInBackground(String... params) {\n        /*\n         * params[0] = Github Username\n         * params[1] = Repository Name\n         * params[2] = Branch Name\n         */\n        String githubUsername = params[0];\n        String repoName = params[1];\n        String branchName = params[2];\n        return customLayoutsRepoValidator(githubUsername, repoName, branchName);\n    }\n\n    protected boolean customLayoutsRepoValidator(String githubUsername, String repoName, String branchName){\n        String server_url = URLCreator.createTestURL(githubUsername, repoName, branchName);\n        Log.d(TAG, \"Resource URL: \" + server_url);\n        boolean status;\n        try {\n            URL url = new URL(server_url);\n            // Open Url Connection\n            HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory());\n            HttpsURLConnection httpConnection = (HttpsURLConnection) url.openConnection();\n\n            //If Connection response is OK then change the status to true\n            if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {\n                Log.i(TAG, \"Server returned HTTP \" + httpConnection.getResponseCode()\n                        + \" \" + httpConnection.getResponseMessage());\n                status = true;\n            } else{\n                Log.e(TAG, \"The connection could not be established, server return: \" + httpConnection.getResponseCode()\n                        + \" \" + httpConnection.getResponseMessage());\n                status = false;\n            }\n        } catch (Exception e) {\n            Log.e(TAG, \"Error. Exception: \" + e.toString());\n            e.printStackTrace();\n            status = false;\n        }\n        return status;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/layout/UserDefinedLayout.java",
    "content": "package net.osmtracker.layout;\r\n\r\nimport java.io.File;\r\nimport java.io.FileReader;\r\nimport java.io.IOException;\r\nimport java.util.HashMap;\r\nimport java.util.Stack;\r\n\r\nimport net.osmtracker.OSMTracker;\r\nimport net.osmtracker.R;\r\nimport net.osmtracker.activity.TrackLogger;\r\nimport net.osmtracker.service.resources.AppResourceIconResolver;\r\nimport net.osmtracker.service.resources.ExternalDirectoryIconResolver;\r\nimport net.osmtracker.util.UserDefinedLayoutReader;\r\n\r\nimport org.xmlpull.v1.XmlPullParser;\r\nimport org.xmlpull.v1.XmlPullParserException;\r\nimport org.xmlpull.v1.XmlPullParserFactory;\r\n\r\nimport android.content.Context;\r\nimport android.view.ViewGroup;\r\nimport android.widget.LinearLayout;\r\n\r\n/**\r\n * Manages user-definable layout. User can define his own buttons\r\n * and pages of buttons in an XML file.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class UserDefinedLayout extends LinearLayout {\r\n\r\n\t@SuppressWarnings(\"unused\")\r\n\tprivate static final String TAG = UserDefinedLayout.class.getSimpleName();\r\n\t\r\n\t/**\r\n\t * Name of the root layout.\r\n\t */\r\n\tprivate static final String ROOT_LAYOUT_NAME = \"root\";\r\n\t\r\n\t/**\r\n\t * List of layouts (button pages) read from XML\r\n\t */\r\n\tprivate HashMap<String, ViewGroup> layouts = new HashMap<String, ViewGroup>();\r\n\r\n\t/**\r\n\t * Stack for keeping track of user navigation in pages\r\n\t */\r\n\tprivate Stack<String> layoutStack = new Stack<String>();\r\n\r\n\tpublic UserDefinedLayout(Context ctx) {\r\n\t\tsuper(ctx);\r\n\t}\r\n\t\r\n\tpublic UserDefinedLayout(TrackLogger activity, long trackId, File xmlLayout) throws XmlPullParserException, IOException {\r\n\t\tsuper(activity);\r\n\t\t\r\n\t\t// Set default presentation parameters\r\n\t\tsetLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT, 1));\r\n\t\t\r\n\t\tUserDefinedLayoutReader udlr;\r\n\t\tXmlPullParser parser;\r\n\t\tif (xmlLayout == null) {\r\n\t\t\t// No user file, use default file\r\n\t\t\tparser = getResources().getXml(R.xml.default_buttons_layout);\r\n\t\t\tudlr = new UserDefinedLayoutReader(this, getContext(), activity, trackId, parser, new AppResourceIconResolver(getResources(), OSMTracker.class.getPackage().getName()));\r\n\t\t} else {\r\n\t\t\t// User file specified, parse it\r\n\t\t\tXmlPullParserFactory factory = XmlPullParserFactory.newInstance();\r\n\t\t\tparser = factory.newPullParser();\r\n\t\t\tparser.setInput(new FileReader(xmlLayout));\r\n\t\t\tudlr = new UserDefinedLayoutReader(this, getContext(), activity, trackId, parser, new ExternalDirectoryIconResolver(xmlLayout.getParentFile()));\r\n\t\t}\r\n\t\t\r\n\t\tlayouts = udlr.parseLayout();\r\n\t\t\r\n\t\tif (layouts == null || layouts.isEmpty() || layouts.get(ROOT_LAYOUT_NAME) == null) {\r\n\t\t\tthrow new IOException(\"Error in layout file. Is there a layout name '\" + ROOT_LAYOUT_NAME + \"' defined ?\");\r\n\t\t}\r\n\t\t\r\n\t\t// XML file parsed, push the root layout on the view\r\n\t\tpush(ROOT_LAYOUT_NAME);\r\n\t\t\r\n\t}\r\n\t\r\n\t/**\r\n\t * Push the specified layout on top of the view\r\n\t * @param s Name of layout to push.\r\n\t */\r\n\tpublic void push(String s) {\r\n\t\tif (layouts.get(s) != null) {\r\n\t\t\tlayoutStack.push(s);\r\n\t\t\tif (this.getChildCount() > 0) {\r\n\t\t\t\tthis.removeAllViews();\r\n\t\t\t}\r\n\t\t\tthis.addView(layouts.get(layoutStack.peek()));\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Pops the current top-layout, and set the view to\r\n\t * the new top-layout.\r\n\t * @return The name of the popped layout\r\n\t */\r\n\tpublic String pop() {\r\n\t\tString out = layoutStack.pop();\r\n\t\tif (this.getChildCount() > 0) {\r\n\t\t\tthis.removeAllViews();\r\n\t\t}\r\n\t\tthis.addView(layouts.get(layoutStack.peek()));\r\n\t\treturn out;\r\n\t}\r\n\t\r\n\t/**\r\n\t * @return the number of layouts stacked\r\n\t */\r\n\tpublic int getStackSize() {\r\n\t\treturn layoutStack.size();\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic void setEnabled(boolean enabled) {\r\n\t\tsuper.setEnabled(enabled);\r\n\t\tthis.getChildAt(0).setEnabled(enabled);\r\n\t}\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/EditWaypointDialogOnClickListener.java",
    "content": "package net.osmtracker.listener;\n\nimport android.app.AlertDialog;\nimport android.database.Cursor;\nimport android.view.View;\n\n/**\n * Class that implements an OnClickListener to display an edit waypoint dialog.\n */\npublic class EditWaypointDialogOnClickListener implements View.OnClickListener {\n\n\tprivate Cursor cursor;\n\n\tprotected AlertDialog alert;\n\n\tprotected EditWaypointDialogOnClickListener(AlertDialog alert, Cursor cu) {\n\t\tthis.cursor = cu;   // Assigns the received cursor to the class attribute\n\t\tthis.alert = alert; // Assigns the received alert to the class attribute\n\t}\n\n\t@Override\n\tpublic void onClick(View view) {\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/PageButtonOnClickListener.java",
    "content": "package net.osmtracker.listener;\r\n\r\nimport net.osmtracker.layout.UserDefinedLayout;\r\nimport android.view.View;\r\nimport android.view.View.OnClickListener;\r\n\r\n/**\r\n * Listener for page-type buttons. Provokes a navigation\r\n * to the target page.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class PageButtonOnClickListener implements OnClickListener {\r\n\r\n\t/**\r\n\t * Name of the target layout (page) for this button\r\n\t */\r\n\tprivate String targetLayoutName;\r\n\t\r\n\t/**\r\n\t * Main layout\r\n\t */\r\n\tprivate UserDefinedLayout rootLayout;\r\n\r\n\tpublic PageButtonOnClickListener(UserDefinedLayout layout, String target) {\r\n\t\trootLayout = layout;\r\n\t\ttargetLayoutName = target;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void onClick(View v) {\r\n\t\tif (targetLayoutName != null) {\r\n\t\t\trootLayout.push(targetLayoutName);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/PressureListener.java",
    "content": "package net.osmtracker.listener;\n\nimport android.content.Context;\nimport android.hardware.Sensor;\nimport android.hardware.SensorEvent;\nimport android.hardware.SensorEventListener;\nimport android.hardware.SensorManager;\nimport android.util.Log;\n\n/**\n * Listener for pressure sensor.\n * Register the listener with your context using the register/unregister functions\n * Should be possible to enable/disable via preferences due to power consumption.\n *\n */\npublic class PressureListener implements SensorEventListener {\n\n    /**\n     * TAG for this class\n     */\n    private static final String TAG = PressureListener.class.getSimpleName();\n\n    private SensorManager sensorService;\n    private float last_atmospheric_pressure_hPa = 0;\n\n\n    @Override\n    public void onSensorChanged(SensorEvent event) {\n        last_atmospheric_pressure_hPa = event.values[0];\n    }\n\n    @Override\n    public void onAccuracyChanged(Sensor sensor, int accuracy) {\n\n    }\n\n    public boolean register (Context context, boolean use_barometer) {\n\n        boolean result = false;\n\n        if (use_barometer) {\n            sensorService = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);\n\n            Sensor pressureSens = sensorService.getDefaultSensor(Sensor.TYPE_PRESSURE);\n\n            if (pressureSens != null) {\n                sensorService.registerListener(this,\n                        pressureSens,\n                        SensorManager.SENSOR_DELAY_NORMAL);\n\n                Log.i(TAG, \"Registerered for pressure Sensor\");\n                result = true;\n            } else {\n                Log.w(TAG, \"Pressure sensor not found\");\n                result = false;\n            }\n        }\n\n        return result;\n    }\n\n    public void unregister () {\n        // stop sensors TODO: is this good if sensors registration failed?\n        if (sensorService != null) {\n            sensorService.unregisterListener(this);\n            sensorService = null;\n            Log.v(TAG, \"unregistered\");\n        }\n    }\n\n    public float getPressure () {\n        return last_atmospheric_pressure_hPa;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/SensorListener.java",
    "content": "package net.osmtracker.listener;\n\nimport java.text.DecimalFormat;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.hardware.Sensor;\nimport android.hardware.SensorEvent;\nimport android.hardware.SensorEventListener;\nimport android.hardware.SensorManager;\nimport android.util.Log;\nimport android.widget.TextView;\n\n/**\n * Listener for sensors. In particular for the acceleration and magnetic sensors to provide compass\n * heading.\n * Register the listener with your context using the register/unregister functions\n * most recent reading from the sensor is always available from azimuth, pitch, roll, accuracy and valid fields\n * \n * @author Christoph Gohle\n *\n */\npublic class SensorListener implements SensorEventListener {\n\n\tprivate SensorManager sensorService;\n\n\t/**\n\t * value of the last accelerometer sensor event\n\t */\n\tprivate float[] gravity = null;\n\t\n\t/**\n\t * accuracy of the last accelerometer sensor event\n\t */\n\tprivate int gravAccuracy = 0;\n\t\n\t/**\n\t * value of the last magnetic field sensor event\n\t */\n\tprivate float[] geomag = null;\n\t\n\t/**\n\t * accuracy of the last magnetic field sensor event\n\t */\n\tprivate int magAccuracy = 0;\n\t\n\t/**\n\t * Azimuth, pitch and roll (as in SensorManager.SENSOR_ACCURACY_* of the last sensor event) \n\t */\n\tprivate float azimuth, pitch, roll;\n\t\n\t/**\n\t * Accuracy (as in SensorManager.SENSOR_ACCURACY_* of the last sensor event\n\t */\n\tprivate int accuracy;\n\t\n\t/**\n\t * true if current azimuth, pitch and roll are valid (from the last sensor event)\n\t */\n\tprivate boolean valid = false;\n\t\n\t/**\n\t * conversion from rad to degrees\n\t */\n\tpublic static final float RAD_TO_DEG = 180.0f/3.141592653589793f;\n\n\tprivate float[] inR = new float[9];\n\tprivate float[] outR = new float[9];\n\tprivate float[] I = new float[9];\n\tprivate float[] orientVals = new float[3];\n\t\n\tprivate Activity activity = null;\n\tprivate Context context = null;\n\t\n\n\t/**\n\t * Formatter for heading display.\n\t */\n\tprivate final static DecimalFormat HEADING_FORMAT = new DecimalFormat(\"0\");\n\n\t/**\n\t * TAG for this class\n\t */\n\tprivate static final String TAG = SensorListener.class.getSimpleName();\n\t\n\t/**\n\t * use ORIENTATION sensor type as default\n\t */\n\tprivate final static boolean USE_ORIENTATION_AS_DEFAULT = true;\n\t\n\tpublic void onAccuracyChanged(Sensor sensor, int accuracy) {\n\t\tLog.v(TAG, \"Accuracy changed: sensor:\" + sensor + \", accuracy: \" + accuracy);\n\t}\n\n\tpublic void onSensorChanged(SensorEvent event) {\n\t\tboolean update_rotation = false;\n\n\t\tswitch (event.sensor.getType()){  \n\t\n\t\t\tcase Sensor.TYPE_ACCELEROMETER:\n\t\t\t   \n\t\t\t    gravity = event.values.clone();\n\t\t\t    gravAccuracy = event.accuracy;\n\t\t\t    Log.v(TAG, \"gravitation sensor accurcay: \"+gravAccuracy);\n\t\t\t    update_rotation = true;\n\t\t\t    break;\n\t\t    case Sensor.TYPE_MAGNETIC_FIELD:\n\t\t\t    geomag = event.values.clone();\n\t\t\t    magAccuracy = event.accuracy;\n\t\t\t    Log.v(TAG, \"magnetic sensor accurcay: \"+magAccuracy);\n\t\t\t    update_rotation = true;\n\t\t\t    break;\n\t        case Sensor.TYPE_ORIENTATION:\n\t            azimuth = event.values[0];\n\t            pitch = event.values[1];\n\t            roll = event.values[2];\n\t            accuracy = event.accuracy;\n\t            valid = true;\n\t            break;\n\t    }\n\t\t\n\t\tif (update_rotation) {\n\t\t\tvalid = calcOrientation();\n\t\t} else {\n\t\t\t// case for orientation event: already done\n\t\t}\n\t\tLog.v(TAG,\"new azimuth:  \"+azimuth+\", pitch: \"+pitch+\", roll: \"+roll+\", accuracy: \"+accuracy+\", valid: \"+valid);\t\t\t\n\t\t\n\t\tif (activity!=null) {\n\t\t\tTextView tvHeading = (TextView) activity.findViewById(R.id.gpsstatus_record_tvHeading);\n\t\t\tif (tvHeading != null) {\n\t\t\t\tif (valid) {\n\t\t\t\t\tint color = Color.RED;\n\t\t\t\t\tswitch (accuracy) {\n\t\t\t\t\tcase SensorManager.SENSOR_STATUS_UNRELIABLE:\n\t\t\t\t\t\tcolor = Color.RED;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SensorManager.SENSOR_STATUS_ACCURACY_LOW:\n\t\t\t\t\t\tcolor = Color.MAGENTA;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM:\n\t\t\t\t\t\tcolor = Color.YELLOW;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SensorManager.SENSOR_STATUS_ACCURACY_HIGH:\n\t\t\t\t\t\tcolor = Color.GREEN;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\ttvHeading.setTextColor(color);\n\t\t\t\t\ttvHeading.setText(activity.getResources().getString(R.string.various_heading_display)\n\t\t\t\t\t\t\t.replace(\"{0}\", HEADING_FORMAT.format(azimuth)));\n\t\t\t\t} else {\n\t\t\t\t\ttvHeading.setTextColor(Color.GRAY);\n\t\t\t\t\ttvHeading.setText(activity.getResources().getString(R.string.various_heading_unknown));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate boolean calcOrientation() {\n\t\t// If gravity and geomag have values then find rotation matrix\n\t\tboolean success = false;\n\t\tif (gravity != null && geomag != null){\n\t\n\t\t\t// checks that the rotation matrix is found\n\t\t\tsuccess = SensorManager.getRotationMatrix(inR, I, gravity, geomag);\n\t\t\tif (success){\n\t\t\t    // Re-map coordinates so y-axis comes out of camera\n\t\t\t\tSensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, \n\t\t\t\tSensorManager.AXIS_Z, outR);\n\t\t\t\t\n\t\t\t\t// Finds the Azimuth and Pitch angles of the y-axis with \n\t\t\t\t// magnetic north and the horizon respectively\n\t\t\t\tSensorManager.getOrientation(outR, orientVals);\n\t\t\t\tazimuth = orientVals[0]*RAD_TO_DEG;\n\t\t\t\tpitch = orientVals[1]*RAD_TO_DEG;\n\t\t\t\troll = orientVals[2]*RAD_TO_DEG;\n\t\t\t\tif (magAccuracy<gravAccuracy) {\n\t\t\t\t\taccuracy = magAccuracy;\n\t\t\t\t} else {\n\t\t\t\t\taccuracy = gravAccuracy;\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t   \t} else {\n\t\t   \t}\n\t\t}\n\t\treturn success;\n\t}\n\t\n\t/**\n\t * register the listener with default orientation sensors \n\t * @param activity activity that will be updated from this listener\n\t * @return true on success\n\t */\n\tpublic boolean register(Activity activity) {\n\t\tthis.activity = activity;\n\t\treturn register(activity, USE_ORIENTATION_AS_DEFAULT);\n\t}\n\t\n\t/**\n\t *  register the listener with default orientatin sensor\n\t * @param \n\t * @return\n\t */\n\tpublic boolean register(Context context){\n\t\treturn register(context, USE_ORIENTATION_AS_DEFAULT);\n\t}\n\n\t/**\n\t * register the listener with orientation sensors \n\t * @param context context that will be used to obtain the SensorManager\n\t * @param use_orientation use (deprecated) orientation sensor if true. Otherwise use the getOrientation method\n\t * @return true on success\n\t */\n\tpublic boolean register(Context context, boolean use_orientation) {\n\t\t//register for Orientation updates\n\t\tthis.context = context;\n\t\tboolean result;\n\t    sensorService = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);\n\t    \n\t    if (!use_orientation) {\n\t\t    Sensor accelSens = sensorService.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);\n\t\t    Sensor magSens = sensorService.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);\n\t\t    \n\t\t    if (accelSens != null && magSens != null) {\n\t\t\t    sensorService.registerListener(this, \n\t\t\t    \t\taccelSens,\n\t\t\t    \t\tSensorManager.SENSOR_DELAY_NORMAL);\n\t\n\t\t\t    sensorService.registerListener(this, \n\t\t\t    \t\tmagSens,\n\t\t\t    \t\tSensorManager.SENSOR_DELAY_NORMAL);\n\t\t\t    Log.i(TAG, \"Registerered for magnetic, acceleration Sensor\");\n\t\t\t    result = true;\n\t\t    } else {\n\t\t    \tLog.w(TAG, \"either magnetic or gravitation sensor not found\");\n\t\t    \tgeomag = null;\n\t\t    \tgravity = null;\n\t\t    \tunregister();\n\t\t    \tresult = false;\n\t\t    }\n\t    } else {\t\t    \n\t\t    Sensor orSens = sensorService.getDefaultSensor(Sensor.TYPE_ORIENTATION);\n\t\t    if (orSens!=null){\n\t\t    \tsensorService.registerListener(this, orSens, SensorManager.SENSOR_DELAY_NORMAL);\n\t\n\t\t\t    Log.i(TAG, \"Registerered for orientation Sensor\");\n\t\t\t    result = true;\n\t\t    } else {\n\t\t    \tLog.w(TAG, \"Orientation sensor not found\");\n\t\t    \tunregister();\n\t\t    \tresult = false;\n\t\t    }\n\t    }\n\t    return result;\n\t}\n\n\tpublic void unregister() {\n\t\t// stop sensors TODO: is this good if sensors registration failed?\n\t\tif (sensorService != null) { \n\t\t\tsensorService.unregisterListener(this);\n\t\t\tsensorService = null;\n\t\t\tLog.v(TAG,\"unregisterd\");\n\t\t}\n\t}\n\t\n\tpublic float getAzimuth() {\n\t\tif (valid) {\n\t\t\treturn azimuth;\n\t\t} else {\n\t\t\treturn DataHelper.AZIMUTH_INVALID;\n\t\t}\n\t}\n\t\n\tpublic int getAccuracy() {\n\t\treturn accuracy;\n\t}\n};\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/StillImageOnClickListener.java",
    "content": "package net.osmtracker.listener;\n\nimport net.osmtracker.activity.TrackLogger;\n\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\n/**\n * Manages still image recording with camera app.\n * \n * @author Nicolas Guillaumin\n *\n */\npublic class StillImageOnClickListener implements OnClickListener {\n\n\t/**\n\t * Parent activity\n\t */\n\tTrackLogger activity;\n\t\n\tpublic StillImageOnClickListener(TrackLogger parent) {\n\t\tactivity = parent;\n\t}\n\t\n\t@Override\n\tpublic void onClick(View v) {\n\t\tactivity.requestStillImage();\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/TagButtonOnClickListener.java",
    "content": "package net.osmtracker.listener;\r\n\r\nimport android.content.Intent;\r\nimport android.view.View;\r\nimport android.view.View.OnClickListener;\r\nimport android.widget.Button;\r\nimport android.widget.Toast;\r\n\r\nimport java.util.UUID;\r\n\r\nimport net.osmtracker.OSMTracker;\r\nimport net.osmtracker.R;\r\nimport net.osmtracker.db.TrackContentProvider;\r\n\r\n\r\n/**\r\n * Listener for standard waypoint tag button.\r\n * Sends an Intent to track waypoint. Waypoint name is the\r\n * label of the button.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class TagButtonOnClickListener implements OnClickListener {\r\n\r\n\tprivate long currentTrackId;\r\n\t\r\n\tpublic TagButtonOnClickListener(long trackId) {\r\n\t\tcurrentTrackId = trackId;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic void onClick(View view) {\r\n\t\tButton button = (Button) view;\r\n\t\tString label = button.getText().toString().replaceAll(\"\\n\", \" \");\r\n\r\n\t\t// Send an intent to inform service to track the waypoint.\r\n\t\tIntent intent = new Intent(OSMTracker.INTENT_TRACK_WP);\r\n\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\r\n\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, label);\r\n\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, UUID.randomUUID().toString());\r\n\r\n\t\tString packageName = view.getContext().getPackageName();\r\n\t\tintent.setPackage(packageName);\r\n\r\n\t\tview.getContext().sendBroadcast(intent);\r\n\t\t\r\n\t\t// Inform user that the waypoint was tracked\r\n\t\tToast.makeText(view.getContext(), view.getContext().getResources().getString(R.string.tracklogger_tracked) + \" \" + label, Toast.LENGTH_SHORT).show();\r\n\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/TextNoteOnClickListener.java",
    "content": "package net.osmtracker.listener;\r\n\r\nimport net.osmtracker.activity.TrackLogger;\r\n\r\nimport android.view.View;\r\nimport android.view.View.OnClickListener;\r\n\r\n/**\r\n * Manages text note button.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class TextNoteOnClickListener implements OnClickListener {\r\n\r\n\t\r\n\tprivate TrackLogger tl;\r\n\t\r\n\tpublic TextNoteOnClickListener(TrackLogger trackLogger) {\r\n\t\ttl = trackLogger;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic void onClick(final View v) {\r\n\t\t// let the TrackLogger activity open and control the dialog\r\n\t\ttl.showDialog(TrackLogger.DIALOG_TEXT_NOTE);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/listener/VoiceRecOnClickListener.java",
    "content": "package net.osmtracker.listener;\n\nimport net.osmtracker.activity.TrackLogger;\n\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\n/**\n * Manages voice recording.\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class VoiceRecOnClickListener implements OnClickListener{\n\n\t/**\n\t * Parent activity\n\t */\n\tprivate TrackLogger tl;\n\t\n\tpublic VoiceRecOnClickListener(TrackLogger trackLogger) {\n\t\ttl = trackLogger;\n\t}\n\n\t@Override\n\tpublic void onClick(View v) {\n\t\ttl.showDialog(TrackLogger.DIALOG_VOICE_RECORDING);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/osm/OpenStreetMapConstants.java",
    "content": "package net.osmtracker.osm;\n\npublic class OpenStreetMapConstants {\n\n\tprivate static final boolean DEV_MODE = false;\n\tprivate static final String OSM_API_URL_DEV = \"https://master.apis.dev.openstreetmap.org\";\n\tprivate static final String OSM_API_URL_PROD = \"https://www.openstreetmap.org\";\n\tprivate static final String OSM_API_URL = (DEV_MODE) ? OSM_API_URL_DEV : OSM_API_URL_PROD;\n\n\tpublic static class Api {\n\n\t\tpublic static final String OSM_API_URL_PATH = OSM_API_URL + \"/api/0.6/\";\n\n\t}\n\n\tpublic static class OAuth2 {\n\t\tpublic static final String CLIENT_ID_PROD = \"6s8TuIQoPeq89ZWUFOXU7EZ-ZaCUVtUoNZFIKCMdU-E\";\n\t\tpublic static final String CLIENT_ID_DEV = \"94Ht-oVBJ2spydzfk18s1RV2z7NS98SBwMfzSCqLQLE\"; // DEV\n\n\t\tpublic static final String CLIENT_ID = (DEV_MODE) ? CLIENT_ID_DEV : CLIENT_ID_PROD;\n\n        public static final String SCOPE = \"write_gpx write_notes\";\n\t\tpublic static final String USER_AGENT = \"OSMTracker for Android™\";\n\n\t\tpublic static class Urls {\n\t\t\tpublic static final String AUTHORIZATION_ENDPOINT = OSM_API_URL + \"/oauth2/authorize\";\n\t\t\tpublic static final String TOKEN_ENDPOINT = OSM_API_URL + \"/oauth2/token\";\n\t\t}\n\n\t}\n\n\t\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/osm/UploadToOpenStreetMapNotesTask.java",
    "content": "package net.osmtracker.osm;\n\nimport android.app.Activity;\nimport android.util.Log;\nimport android.view.Gravity;\nimport android.widget.LinearLayout;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\n\nimport androidx.appcompat.app.AlertDialog;\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.util.DialogUtils;\n\nimport java.lang.ref.WeakReference;\n\nimport de.westnordost.osmapi.OsmConnection;\nimport de.westnordost.osmapi.common.errors.OsmAuthorizationException;\nimport de.westnordost.osmapi.common.errors.OsmBadUserInputException;\nimport de.westnordost.osmapi.map.data.OsmLatLon;\nimport de.westnordost.osmapi.notes.NotesApi;\n\n/**\n * Uploads a note to OpenStreetMap\n *\n * @author Most of the code was made by Nicolas Guillaumin, adapted by Jose Andrés Vargas Serrano\n */\npublic class UploadToOpenStreetMapNotesTask {\n\n    private static final String TAG = UploadToOpenStreetMapNotesTask.class.getSimpleName();\n\n\t// Result constants\n\tprivate static final int RESULT_OK = 1;\n\tprivate static final int RESULT_ERROR_INTERNAL = -1;\n\tprivate static final int RESULT_ERROR_AUTH = -2;\n\tprivate static final int RESULT_ERROR_OSM_USER = -3;\n\n\tprivate final WeakReference<Activity> activityRef;\n    private final String accessToken;\n\n\t//OSM Note data\n\tprivate final long noteId;\n    private final String noteText;\n    private final double longitude;\n    private final double latitude;\n\n\tprivate AlertDialog progressDialog;\n    // Error message returned by OSM if the request completed\n    private String errorMsg;\n\tprivate int resultCode = RESULT_ERROR_INTERNAL;\n\n\tpublic UploadToOpenStreetMapNotesTask(Activity activity, String accessToken, long noteId,\n\t\t\t\t\t\t\t\t\t\t  String noteText, double latitude, double longitude) {\n\t\tthis.activityRef = new WeakReference<>(activity);\n\t\tthis.accessToken = accessToken;\n\t\tthis.noteId = noteId;\n\t\tthis.noteText = noteText;\n\t\tthis.longitude = longitude;\n\t\tthis.latitude = latitude;\n\t}\n\n\t/**\n\t * Synchronous execution for use with ExecutorService.\n\t * Replaces the lifecycle of AsyncTask. */\n\tpublic void run() {\n\t\tfinal Activity activity = activityRef.get();\n\t\tif (activity == null || activity.isFinishing()) return;\n\n\t\t// 1. Prepare UI (Equivalent to onPreExecute)\n\t\tactivity.runOnUiThread(() -> progressDialog = createProgressDialog(activity));\n\n\t\t// 2. Execute Network Logic (Equivalent to doInBackground)\n\t\tOsmConnection osm = new OsmConnection(\n\t\t\t\tOpenStreetMapConstants.Api.OSM_API_URL_PATH,\n\t\t\t\tOpenStreetMapConstants.OAuth2.USER_AGENT,\n\t\t\t\taccessToken);\n\n\t\ttry {\n\t\t\tnew NotesApi(osm).create(new OsmLatLon(latitude, longitude), noteText);\n\t\t\tresultCode = RESULT_OK;\n\t\t} catch (OsmBadUserInputException e) {\n\t\t\tLog.e(TAG, \"Bad OSM user input or illegal argument\", e);\n\t\t\terrorMsg = e.getLocalizedMessage();\n\t\t\tresultCode = RESULT_ERROR_OSM_USER;\n\t\t} catch (OsmAuthorizationException oae) {\n\t\t\tLog.e(TAG, \"OSM Authorization error\", oae);\n\t\t\terrorMsg = oae.getLocalizedMessage();\n\t\t\tresultCode = RESULT_ERROR_AUTH;\n\t\t} catch (Exception e) {\n\t\t\tLog.e(TAG, \"Upload error\", e);\n\t\t\terrorMsg = e.getLocalizedMessage();\n\t\t\tresultCode = RESULT_ERROR_INTERNAL;\n\t\t}\n\n\t\t// 3. Handle Results (Equivalent to onPostExecute)\n\t\tactivity.runOnUiThread(() -> {\n\t\t\tActivity act = activityRef.get();\n\t\t\tif (act == null || act.isFinishing()) return;\n\n\t\t\tif (progressDialog != null && progressDialog.isShowing()) {\n\t\t\t\tprogressDialog.dismiss();\n\t\t\t}\n\n\t\t\thandleResult(act);\n\t\t});\n\t}\n\n\tprivate void handleResult(Activity activity) {\n\t\tswitch (resultCode) {\n\t\t\tcase RESULT_OK:\n\t\t\t\tDataHelper.setNoteUploadDate(noteId,\n\t\t\t\t\t\tSystem.currentTimeMillis(), activity.getContentResolver());\n\t\t\t\tnew AlertDialog.Builder(activity)\n\t\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_info)\n\t\t\t\t\t\t.setMessage(R.string.osm_upload_sucess)\n\t\t\t\t\t\t.setPositiveButton(android.R.string.ok,\n\t\t\t\t\t\t\t\t(d, w) -> activity.finish())\n\t\t\t\t\t\t.show();\n\t\t\t\tbreak;\n\n\t\t\tcase RESULT_ERROR_AUTH:\n\t\t\t\tshowAuthErrorDialog(activity);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tDialogUtils.showErrorDialog(activity,\n\t\t\t\t\t\tactivity.getString(R.string.osm_note_upload_error) + \": \" + errorMsg);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate AlertDialog createProgressDialog(Activity activity) {\n\t\tLinearLayout layout = new LinearLayout(activity);\n\t\tlayout.setOrientation(LinearLayout.HORIZONTAL);\n\t\tlayout.setPadding(50, 50, 50, 50);\n\t\tlayout.setGravity(Gravity.CENTER_VERTICAL);\n\n\t\tProgressBar pb = new ProgressBar(activity);\n\t\tpb.setIndeterminate(true);\n\t\tlayout.addView(pb);\n\n\t\tTextView tv = new TextView(activity);\n\t\ttv.setText(R.string.osm_note_upload);\n\t\ttv.setPadding(40, 0, 0, 0);\n\t\tlayout.addView(tv);\n\n\t\tAlertDialog progressDialog = new AlertDialog.Builder(activity)\n\t\t\t\t.setView(layout).setCancelable(false).create();\n\t\tprogressDialog.show();\n\t\treturn progressDialog;\n\t}\n\n\t/**\n\t * Helper to show the specific authorization error dialog\n\t */\n\tprivate void showAuthErrorDialog(Activity activity) {\n\t\tnew AlertDialog.Builder(activity)\n\t\t\t\t.setTitle(android.R.string.dialog_alert_title)\n\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\n\t\t\t\t.setMessage(R.string.osm_note_upload_unauthorized)\n\t\t\t\t.setCancelable(true)\n\t\t\t\t.setNegativeButton(android.R.string.no, (d, w) -> d.dismiss())\n\t\t\t\t.setPositiveButton(android.R.string.yes, (d, w) -> {\n\t\t\t\t\tPreferenceManager.getDefaultSharedPreferences(activity).edit()\n\t\t\t\t\t\t.remove(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN).apply();\n\t\t\t\t\td.dismiss();\n\t\t\t\t}).show();\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/osm/UploadToOpenStreetMapTask.java",
    "content": "package net.osmtracker.osm;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.ProgressDialog;\nimport android.content.DialogInterface;\nimport android.content.SharedPreferences.Editor;\nimport android.os.AsyncTask;\nimport android.util.Log;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.util.DialogUtils;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport de.westnordost.osmapi.OsmConnection;\nimport de.westnordost.osmapi.common.errors.OsmAuthorizationException;\nimport de.westnordost.osmapi.common.errors.OsmBadUserInputException;\nimport de.westnordost.osmapi.traces.GpsTraceDetails;\nimport de.westnordost.osmapi.traces.GpsTracesApi;\n\n/**\n * Uploads a GPX file to OpenStreetMap\n * \n * @author Nicolas Guillaumin\n */\npublic class UploadToOpenStreetMapTask extends AsyncTask<Void, Void, Void> {\n\n\tprivate static final String TAG = UploadToOpenStreetMapTask.class.getSimpleName();\n\t\n\t/** Upload progress dialog */\n\tprivate ProgressDialog dialog;\n\t\n\tprivate final Activity activity;\n\tprivate final String accessToken;\n\tprivate final long trackId;\n\n\t/** File to export */\n\tprivate final File gpxFile;\n\t\n\t/** Filename to use when uploading */\n\tprivate final String filename;\n\t\n\t/** Track description */\n\tprivate final String description;\n\t\n\t/** Track tags */\n\tprivate final String tags;\n\t\n\t/** Track visibility */\n\tprivate final Track.OSMVisibility visibility;\n\n\t/**\n\t * Error message, or text of the response returned by OSM\n\t * if the request completed\n\t */\n\tprivate String errorMsg;\n\n\t/**\n\t * Either the HTTP result code, or -1 for an internal error\n\t */\n\tprivate int resultCode = -1;\n\tprivate final int authorizationErrorResultCode = -2;\n\tprivate final int anotherErrorResultCode = -3;\n\tprivate final int okResultCode = 1;\n\n\t\n\tpublic UploadToOpenStreetMapTask(Activity activity, String accessToken, long trackId,\n\t\t\t\t\t\t\t\t\t File gpxFile, String filename, String description, String tags,\n\t\t\t\t\t\t\t\t\t Track.OSMVisibility visibility) {\n\t\tthis.activity = activity;\n\t\tthis.accessToken = accessToken;\n\t\tthis.trackId = trackId;\n\t\tthis.filename = filename;\n\t\tthis.gpxFile = gpxFile;\n\t\tthis.description = (description == null) ? \"test\" : description;\n\t\tthis.tags = (tags == null) ? \"test\" : tags;\n\t\tthis.visibility = (visibility == null) ? Track.OSMVisibility.Private : visibility;\n\t}\n\t\n\t@Override\n\tprotected void onPreExecute() {\n\t\ttry {\n\t\t\t// Display progress dialog\n\t\t\tdialog = new ProgressDialog(activity);\n\t\t\tdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);\n\t\t\tdialog.setIndeterminate(true);\n\t\t\tdialog.setTitle(\n\t\t\t\t\tactivity.getResources().getString(R.string.osm_upload_sending)\n\t\t\t\t\t.replace(\"{0}\", Long.toString(trackId)));\n\t\t\tdialog.setCancelable(false);\n\t\t\tdialog.show();\n\n\t\t} catch (Exception e) {\n\t\t\tLog.e(TAG, \"onPreExecute() failed\", e);\n\t\t\terrorMsg = e.getLocalizedMessage();\n\t\t\tcancel(true);\n\t\t}\n\t}\n\t\n\t@Override\n\tprotected void onPostExecute(Void result) {\n\t\tswitch (resultCode) {\n\t\tcase -1:\n\t\t\tdialog.dismiss();\n\t\t\t// Internal error, the request didn't start at all\n\t\t\tDialogUtils.showErrorDialog(activity,\n\t\t\t\t\tactivity.getResources().getString(R.string.osm_upload_error)\n\t\t\t\t\t\t+ \": \" + errorMsg);\n\t\t\tbreak;\n\t\tcase okResultCode:\n\t\t\tdialog.dismiss();\n\t\t\t// Success ! Update database and close activity\n\t\t\tDataHelper.setTrackUploadDate(trackId, System.currentTimeMillis(), activity.getContentResolver());\n\t\t\t\n\t\t\tnew AlertDialog.Builder(activity)\n\t\t\t\t.setIcon(android.R.drawable.ic_dialog_info)\n\t\t\t\t.setMessage(R.string.osm_upload_sucess)\n\t\t\t\t.setCancelable(true)\n\t\t\t\t.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\tactivity.finish();\n\t\t\t\t\t}\n\t\t\t\t}).create().show();\n\t\t\t\n\t\t\tbreak;\n\t\tcase authorizationErrorResultCode:\n\t\t\tdialog.dismiss();\n\t\t\t// Authorization issue. Provide a way to clear credentials\n\t\t\tnew AlertDialog.Builder(activity)\n\t\t\t\t\t.setTitle(android.R.string.dialog_alert_title)\n\t\t\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\n\t\t\t\t\t.setMessage(R.string.osm_upload_unauthorized)\n\t\t\t\t\t.setCancelable(true)\n\t\t\t\t\t.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t@Override\n\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\tdialog.dismiss();\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {\n\t\t\t\t\t\t@Override\n\t\t\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\t\t\tEditor editor = PreferenceManager.getDefaultSharedPreferences(activity).edit();\n\t\t\t\t\t\t\teditor.remove(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN);\n\t\t\t\t\t\t\teditor.commit();\n\n\t\t\t\t\t\t\tdialog.dismiss();\n\t\t\t\t\t\t}\n\t\t\t\t\t}).create().show();\n\n\t\tdefault:\n\t\t\t// Another error. Display OSM response\n\t\t\tdialog.dismiss();\n\t\t\t// Internal error, the request didn't start at all\n\t\t\tDialogUtils.showErrorDialog(activity,\n\t\t\t\t\tactivity.getResources().getString(R.string.osm_upload_error)\n\t\t\t\t\t\t\t+ \": \" + errorMsg);\n\t\t}\n\t}\n\n\t@Override\n\tprotected Void doInBackground(Void... params) {\n\t\tOsmConnection osm = new OsmConnection(OpenStreetMapConstants.Api.OSM_API_URL_PATH,\n\t\t\t\tOpenStreetMapConstants.OAuth2.USER_AGENT, accessToken);\n\n\t\tList<String> tags = new ArrayList<>();\n\t\ttags.add(this.tags);\n\t\ttry (InputStream is = new FileInputStream(gpxFile)) {\n\t\t\tlong gpxAPI = new GpsTracesApi(osm).create(filename, getVisibilityForOsmapi(visibility),\n\t\t\t\t\tdescription, tags, is);\n\t\t\tLog.v(TAG, \"Gpx file uploaded. GPX id: \" + gpxAPI);\n\t\t\tresultCode = okResultCode;\n\t\t} catch (IOException | IllegalArgumentException | OsmBadUserInputException e) {\n\t\t\tLog.d(TAG, e.getMessage());\n\t\t\tresultCode = -1; //internal error.\n\t\t} catch (OsmAuthorizationException oae) {\n\t\t\tLog.d(TAG, \"OsmAuthorizationException\");\n\t\t\tresultCode = authorizationErrorResultCode;\n\t\t} catch (Exception e) {\n\t\t\tLog.e(TAG, e.getMessage());\n\t\t\tresultCode = anotherErrorResultCode;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\tprivate GpsTraceDetails.Visibility getVisibilityForOsmapi(Track.OSMVisibility visibility) {\n\t\tswitch (visibility) {\n\t\t\tcase Private: return GpsTraceDetails.Visibility.PRIVATE;\n\t\t\tcase Public: return GpsTraceDetails.Visibility.PUBLIC;\n\t\t\tcase Trackable: return GpsTraceDetails.Visibility.TRACKABLE;\n\t\t\tcase Identifiable: return GpsTraceDetails.Visibility.IDENTIFIABLE;\n\t\t}\n\t\treturn null;\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/overlay/WayPointsOverlay.java",
    "content": "package net.osmtracker.overlay;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport org.osmdroid.api.IMapView;\nimport org.osmdroid.util.GeoPoint;\nimport org.osmdroid.views.overlay.ItemizedOverlay;\nimport org.osmdroid.views.overlay.OverlayItem;\n\nimport android.content.Context;\nimport android.content.ContentResolver;\nimport android.database.Cursor;\nimport android.graphics.Point;\nimport android.graphics.drawable.Drawable;\n\npublic class WayPointsOverlay extends ItemizedOverlay<OverlayItem> {\n\n\t/**\n\t * List of waypoints to display on the map.\n\t */\n\tprivate List<OverlayItem> wayPointItems = new ArrayList<OverlayItem>();\n\t\n\tprivate long trackId;\n\t\n\tprivate ContentResolver pContentResolver;\n\t\n\tpublic WayPointsOverlay(\n\t\t\tfinal Drawable pDefaultMarker,\n\t\t\tfinal Context pContext,\n\t\t\tfinal long trackId\n\t\t\t)\n\t{\n\t\tsuper(pDefaultMarker);\n\t\t\n\t\tthis.trackId = trackId;\n\t\tthis.pContentResolver = pContext.getContentResolver();\n\t\trefresh();\n\t}\n\t\n\tpublic WayPointsOverlay(\n\t\t\tfinal Context pContext,\n\t\t\tfinal long trackId\n\t\t\t)\n\t{\n\t\tthis(pContext.getResources().getDrawable(R.drawable.star), pContext, trackId);\n\t}\n\n\t@Override\n\tpublic boolean onSnapToItem(final int pX, final int pY, final Point pSnapPoint, final IMapView pMapView) {\n\t\t// TODO Implement this!\n\t\treturn false;\n\t}\n\t\n\t@Override\n\tprotected OverlayItem createItem(final int index) {\n\t\treturn wayPointItems.get(index);\n\t}\n\t\n\t@Override\n\tpublic int size() {\n\t\treturn wayPointItems.size();\n\t}\n\t\n\tpublic void refresh() {\n\t\twayPointItems.clear();\n\t\t\n\t\tCursor c = this.pContentResolver.query(\n\t\t\t\tTrackContentProvider.waypointsUri(trackId),\n\t\t\t\tnull, null, null, TrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\n \n\t\tfor(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {\n\t\t\tOverlayItem i = new OverlayItem(\n\t\t\t\t\tc.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_NAME)),\n\t\t\t\t\tc.getString(c.getColumnIndex(TrackContentProvider.Schema.COL_NAME)),\n\t\t\t\t\tnew GeoPoint(\n\t\t\t\t\t\t\tc.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE)),\n\t\t\t\t\t\t\tc.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE)))\n\t\t\t\t\t);\n\t\t\twayPointItems.add(i);\n\t\t}\n\t\tc.close();\n\t\tpopulate();\n\t}\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/receiver/MediaButtonReceiver.java",
    "content": "package net.osmtracker.receiver;\n\nimport net.osmtracker.activity.TrackLogger;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\n\npublic class MediaButtonReceiver extends BroadcastReceiver {\n\n\t@Override\n\tpublic void onReceive(Context context, Intent intent) {\n\t\tIntent intent2 = new Intent(context, TrackLogger.class);\n\t\tintent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n\t\tintent2.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);\n\t\tcontext.startActivity(intent2.putExtra(\"mediaButton\", Boolean.TRUE));\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/service/gps/GPSLogger.java",
    "content": "package net.osmtracker.service.gps;\n\nimport android.Manifest;\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.app.Service;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.pm.PackageManager;\nimport android.location.Location;\nimport android.location.LocationListener;\nimport android.location.LocationManager;\nimport android.os.Binder;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.IBinder;\nimport android.util.Log;\n\nimport androidx.core.app.NotificationCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.TrackLogger;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider;\nimport net.osmtracker.listener.PressureListener;\nimport net.osmtracker.listener.SensorListener;\n\n/**\n * GPS logging service.\n * \n * @author Nicolas Guillaumin\n *\n */\npublic class GPSLogger extends Service implements LocationListener {\n\n\tprivate static final String TAG = GPSLogger.class.getSimpleName();\n\n\t/**\n\t * Data helper.\n\t */\n\tprivate DataHelper dataHelper;\n\n\t/**\n\t * Are we currently tracking ?\n\t */\n\tprivate boolean isTracking = false;\n\t\n\t/**\n\t * Is GPS enabled ?\n\t */\n\tprivate boolean isGpsEnabled = false;\n\n\t/**\n\t * Use barometer yes/no ?\n\t */\n\tprivate boolean use_barometer = false;\n\t\n\t/**\n\t * System notification id.\n\t */\n\tprivate static final int NOTIFICATION_ID = 1;\n\tprivate static String CHANNEL_ID = \"GPSLogger_Channel\";\n\t\n\t/**\n\t * Last known location\n\t */\n\tprivate Location lastLocation;\n\t\n\t/**\n\t * LocationManager\n\t */\n\tprivate LocationManager lmgr;\n\t\n\t/**\n\t * Current Track ID\n\t */\n\tprivate long currentTrackId = -1;\n\n\t/**\n\t * the timestamp of the last GPS fix we used\n\t */\n\tprivate long lastGPSTimestamp = 0;\n\t\n\t/**\n\t * the interval (in ms) to log GPS fixes defined in the preferences\n\t */\n\tprivate long gpsLoggingInterval;\n\tprivate long gpsLoggingMinDistance;\n\t\n\t/**\n\t * sensors for magnetic orientation\n\t */\n\tprivate SensorListener sensorListener = new SensorListener();\n\n\t/**\n\t * sensor for atmospheric pressure\n\t */\n\tprivate PressureListener pressureListener = new PressureListener();\n\n\t/**\n\t * Receives Intent for way point and notes tracking, and stop/start logging.\n\t */\n\tprivate BroadcastReceiver receiver = new BroadcastReceiver() {\n\n\t\t@Override\n\t\tpublic void onReceive(Context context, Intent intent) {\n\t\t\tLog.v(TAG, \"Received intent \" + intent.getAction());\n\n\t\t\tif (OSMTracker.INTENT_TRACK_WP.equals(intent.getAction())) {\n\t\t\t\t// Track a way point\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\t// because of the gps logging interval our last fix could be very old\n\t\t\t\t\t// so we'll request the last known location from the gps provider\n\t\t\t\t\tif (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\n\t\t\t\t\t\tlastLocation = lmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);\n\t\t\t\t\t\tif (lastLocation != null) {\n\t\t\t\t\t\t\tLong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\t\t\tString uuid = extras.getString(OSMTracker.INTENT_KEY_UUID);\n\t\t\t\t\t\t\tString name = extras.getString(OSMTracker.INTENT_KEY_NAME);\n\t\t\t\t\t\t\tString link = extras.getString(OSMTracker.INTENT_KEY_LINK);\n\n\t\t\t\t\t\t\tdataHelper.wayPoint(trackId, lastLocation, name, link, uuid, sensorListener.getAzimuth(), sensorListener.getAccuracy(), pressureListener.getPressure());\n\n\t\t\t\t\t\t\t// If there is a waypoint in the track, there should also be a trackpoint\n\t\t\t\t\t\t\tdataHelper.track(currentTrackId, lastLocation, sensorListener.getAzimuth(), sensorListener.getAccuracy(), pressureListener.getPressure());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_UPDATE_WP.equals(intent.getAction())) {\n\t\t\t\t// Update an existing waypoint\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\tLong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\tString uuid = extras.getString(OSMTracker.INTENT_KEY_UUID);\n\t\t\t\t\tString name = extras.getString(OSMTracker.INTENT_KEY_NAME);\n\t\t\t\t\tString link = extras.getString(OSMTracker.INTENT_KEY_LINK);\n\t\t\t\t\tdataHelper.updateWayPoint(trackId, uuid, name, link);\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_DELETE_WP.equals(intent.getAction())) {\n\t\t\t\t// Delete an existing waypoint\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\tLong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\tString uuid = extras.getString(OSMTracker.INTENT_KEY_UUID);\n\t\t\t\t\tString link = extras.getString(OSMTracker.INTENT_KEY_LINK);\n\t\t\t\t\tString filePath = null;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfilePath = link.equals(\"null\") ? null : DataHelper.getTrackDirectory(trackId, context) + \"/\" + link;\n\t\t\t\t\t}\n\t\t\t\t\tcatch(NullPointerException ne){}\n\t\t\t\t\tdataHelper.deleteWayPoint(uuid, filePath);\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_TRACK_NOTE.equals(intent.getAction())) {\n\t\t\t\t// Track a note\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\t// because of the gps logging interval our last fix could be very old\n\t\t\t\t\t// so we'll request the last known location from the gps provider\n\t\t\t\t\tif (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\n\t\t\t\t\t\tlastLocation = lmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);\n\t\t\t\t\t\tif (lastLocation != null) {\n\t\t\t\t\t\t\t//TODO: CHECK THIS\n\t\t\t\t\t\t\tlong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\t\t\tString uuid = extras.getString(OSMTracker.INTENT_KEY_UUID);\n\t\t\t\t\t\t\tString name = extras.getString(OSMTracker.INTENT_KEY_NAME);\n\n\t\t\t\t\t\t\tdataHelper.trackNote(trackId, lastLocation, name, uuid);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_UPDATE_NOTE.equals(intent.getAction())) {\n\t\t\t\t// Update an existing note\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\tlong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\tString uuid = extras.getString(OSMTracker.INTENT_KEY_UUID);\n\t\t\t\t\tString name = extras.getString(OSMTracker.INTENT_KEY_NAME);\n\t\t\t\t\tdataHelper.updateNote(trackId, uuid, name);\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_START_TRACKING.equals(intent.getAction())) {\n\t\t\t\tBundle extras = intent.getExtras();\n\t\t\t\tif (extras != null) {\n\t\t\t\t\tLong trackId = extras.getLong(TrackContentProvider.Schema.COL_TRACK_ID);\n\t\t\t\t\tstartTracking(trackId);\n\t\t\t\t}\n\t\t\t} else if (OSMTracker.INTENT_STOP_TRACKING.equals(intent.getAction())) {\n\t\t\t\tstopTrackingAndSave();\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * Binder for service interaction\n\t */\n\tprivate final IBinder binder = new GPSLoggerBinder();\n\n\t@Override\n\tpublic IBinder onBind(Intent intent) {\n\t\tLog.v(TAG, \"Service onBind()\");\n\t\treturn binder;\n\t}\n\t\n\t@Override\n\tpublic boolean onUnbind(Intent intent) {\n\t\tLog.v(TAG, \"Service onUnbind()\");\n\t\t// If we aren't currently tracking we can\n\t\t// stop ourselves\n\t\tif (! isTracking ) {\n\t\t\tLog.v(TAG, \"Service self-stopping\");\n\t\t\tstopSelf();\n\t\t}\n\t\t\n\t\t// We don't want onRebind() to be called, so return false.\n\t\treturn false;\n\t}\n\n\t/**\n\t * Bind interface for service interaction\n\t */\n\tpublic class GPSLoggerBinder extends Binder {\n\n\t\t/**\n\t\t * Called by the activity when binding.\n\t\t * Returns itself.\n\t\t * @return the GPS Logger service\n\t\t */\n\t\tpublic GPSLogger getService() {\t\t\t\n\t\t\treturn GPSLogger.this;\n\t\t}\n\t}\n\t\n\t@Override\n\tpublic void onCreate() {\n\t\tLog.v(TAG, \"Service onCreate()\");\n\t\tdataHelper = new DataHelper(this);\n\n\t\t//read the logging interval from preferences\n\t\tgpsLoggingInterval = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_GPS_LOGGING_INTERVAL, OSMTracker.Preferences.VAL_GPS_LOGGING_INTERVAL)) * 1000;\n\t\tgpsLoggingMinDistance = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getString(\n\t\t\t\tOSMTracker.Preferences.KEY_GPS_LOGGING_MIN_DISTANCE, OSMTracker.Preferences.VAL_GPS_LOGGING_MIN_DISTANCE));\n\t\tuse_barometer = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getBoolean(\n\t\t\t\tOSMTracker.Preferences.KEY_USE_BAROMETER, OSMTracker.Preferences.VAL_USE_BAROMETER);\n\n\t\t// Register our broadcast receiver\n\t\tIntentFilter filter = new IntentFilter();\n\t\tfilter.addAction(OSMTracker.INTENT_TRACK_WP);\n\t\tfilter.addAction(OSMTracker.INTENT_UPDATE_WP);\n\t\tfilter.addAction(OSMTracker.INTENT_TRACK_NOTE);\n\t\tfilter.addAction(OSMTracker.INTENT_UPDATE_NOTE);\n\t\tfilter.addAction(OSMTracker.INTENT_DELETE_WP);\n\t\tfilter.addAction(OSMTracker.INTENT_START_TRACKING);\n\t\tfilter.addAction(OSMTracker.INTENT_STOP_TRACKING);\n\t\tif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n\t\t\tregisterReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED);\n\t\t} else {\n\t\t\tregisterReceiver(receiver, filter);\n\t\t}\n\n\t\t// Register ourselves for location updates\n\t\tlmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);\n\n\t\tif (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\n\t\t\tlmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gpsLoggingInterval, gpsLoggingMinDistance, this);\n\t\t}\n\t\t\n\t\t//register for Orientation updates\n\t\tsensorListener.register(this);\n\n\t\t// register for atmospheric pressure updates\n\t\tpressureListener.register(this, use_barometer);\n\n\t\tsuper.onCreate();\n\t}\n\t\n\t@Override\n\tpublic int onStartCommand(Intent intent, int flags, int startId) {\n\t\tLog.v(TAG, \"Service onStartCommand(-,\"+flags+\",\"+startId+\")\");\n\t\tcreateNotificationChannel();\n\t\tstartForeground(NOTIFICATION_ID, getNotification());\n\t\treturn Service.START_STICKY;\n\t}\n\n\t@Override\n\tpublic void onDestroy() {\n\t\tLog.v(TAG, \"Service onDestroy()\");\n\t\tif (isTracking) {\n\t\t\t// If we're currently tracking, save user data.\n\t\t\tstopTrackingAndSave();\n\t\t}\n\n\t\t// Unregister listener\n\t\tlmgr.removeUpdates(this);\n\t\t\n\t\t// Unregister broadcast receiver\n\t\tunregisterReceiver(receiver);\n\t\t\n\t\t// Cancel any existing notification\n\t\tstopNotifyBackgroundService();\n\t\t\n\t\t// stop sensors\n\t\tsensorListener.unregister();\n\t\tpressureListener.unregister();\n\n\t\tsuper.onDestroy();\n\t}\n\n\t/**\n\t * Start GPS tracking.\n\t */\n\tprivate void startTracking(long trackId) {\n\t\tcurrentTrackId = trackId;\n\t\tLog.v(TAG, \"Starting track logging for track #\" + trackId);\n\t\t// Refresh notification with correct Track ID\n\t\tNotificationManager nmgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);\n\t\tnmgr.notify(NOTIFICATION_ID, getNotification());\n\t\tisTracking = true;\n\t}\n\n\t/**\n\t * Stops GPS Logging\n\t */\n\tprivate void stopTrackingAndSave() {\n\t\tisTracking = false;\n\t\tdataHelper.stopTracking(currentTrackId);\n\t\tcurrentTrackId = -1;\n\t\tthis.stopSelf();\n\t}\n\n\t@Override\n\tpublic void onLocationChanged(Location location) {\t\t\n\t\t// We're receiving location, so GPS is enabled\n\t\tisGpsEnabled = true;\n\t\t\n\t\t// first of all we check if the time from the last used fix to the current fix is greater than the logging interval\n\t\tif((lastGPSTimestamp + gpsLoggingInterval) < System.currentTimeMillis()){\n\t\t\tlastGPSTimestamp = System.currentTimeMillis(); // save the time of this fix\n\t\t\n\t\t\tlastLocation = location;\n\t\t\t\n\t\t\tif (isTracking) {\n\t\t\t\tdataHelper.track(currentTrackId, location, sensorListener.getAzimuth(), sensorListener.getAccuracy(), pressureListener.getPressure());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Builds the notification to display when tracking in background.\n\t */\n    private Notification getNotification() {\n\n\t\tIntent startTrackLogger = new Intent(this, TrackLogger.class);\n\t\tstartTrackLogger.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, currentTrackId);\n\t\tPendingIntent contentIntent = PendingIntent.getActivity(this, 0, startTrackLogger, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);\n\n\n\t\tNotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)\n\t\t\t\t.setSmallIcon(R.drawable.ic_stat_track)\n\t\t\t\t.setContentTitle(getResources().getString(R.string.notification_title).replace(\"{0}\", (currentTrackId > -1) ? Long.toString(currentTrackId) : \"?\"))\n\t\t\t\t.setContentText(getResources().getString(R.string.notification_text))\n\t\t\t\t.setPriority(NotificationCompat.PRIORITY_DEFAULT)\n\t\t\t\t.setContentIntent(contentIntent)\n\t\t\t\t.setAutoCancel(true);\n\t\treturn mBuilder.build();\n\t}\n\n\tprivate void createNotificationChannel() {\n\t\t// Create the NotificationChannel, but only on API 26+ because\n\t\t// the NotificationChannel class is new and not in the support library\n\t\tif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n\t\t\t// FIXME: following two strings must be obtained from 'R.string' to support translations\n\t\t\tCharSequence name = \"GPS Logger\";\n\t\t\tString description = \"Display when tracking in Background\";\n\t\t\tint importance = NotificationManager.IMPORTANCE_LOW;\n\t\t\tNotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);\n\t\t\tchannel.setDescription(description);\n\t\t\t// Register the channel with the system; you can't change the importance\n\t\t\t// or other notification behaviors after this\n\t\t\tNotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);\n\t\t\tnotificationManager.createNotificationChannel(channel);\n\t\t}\n\t}\n\n\n\t/**\n\t * Stops notifying the user that we're tracking in the background\n\t */\n\tprivate void stopNotifyBackgroundService() {\n\t\tNotificationManager nmgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);\n\t\tnmgr.cancel(NOTIFICATION_ID);\n\t}\n\t\n\t@Override\n\tpublic void onProviderDisabled(String provider) {\n\t\tisGpsEnabled = false;\n\t}\n\n\t@Override\n\tpublic void onProviderEnabled(String provider) {\n\t\tisGpsEnabled = true;\n\t}\n\n\t@Override\n\tpublic void onStatusChanged(String provider, int status, Bundle extras) {\n\t\t// Not interested in provider status\t\t\t\n\t}\n\n\t/**\n\t * Getter for gpsEnabled\n\t * @return true if GPS is enabled, otherwise false.\n\t */\n\tpublic boolean isGpsEnabled() {\n\t\treturn isGpsEnabled;\n\t}\n\t\n\t/**\n\t * Setter for isTracking\n\t * @return true if we're currently tracking, otherwise false.\n\t */\n\tpublic boolean isTracking() {\n\t\treturn isTracking;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/service/gps/GPSLoggerServiceConnection.java",
    "content": "package net.osmtracker.service.gps;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.TrackLogger;\nimport net.osmtracker.layout.GpsStatusRecord;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport android.content.ComponentName;\nimport android.content.Intent;\nimport android.content.ServiceConnection;\nimport android.os.IBinder;\n\n/**\n * Handles the bind to the GPS Logger service\n * \n * @author Nicolas Guillaumin\n *\n */\npublic class GPSLoggerServiceConnection implements ServiceConnection {\n\n\t/**\n\t * Reference to TrackLogger activity\n\t */\n\tprivate TrackLogger activity;\n\t\n\tpublic GPSLoggerServiceConnection(TrackLogger tl) {\n\t\tactivity = tl;\n\t}\n\t\n\t@Override\n\tpublic void onServiceDisconnected(ComponentName name) {\n\t\tactivity.setEnabledActionButtons(false);\n\t\tactivity.setGpsLogger(null);\n\t}\n\n\t@Override\n\tpublic void onServiceConnected(ComponentName name, IBinder service) {\n\t\t\n\t\tactivity.setGpsLogger( ((GPSLogger.GPSLoggerBinder) service).getService());\n\n\t\t// Update record status regarding of current tracking state\n\t\tGpsStatusRecord gpsStatusRecord = (GpsStatusRecord) activity.findViewById(R.id.gpsStatus);\n\t\tif (gpsStatusRecord != null) {\n\t\t\tgpsStatusRecord.manageRecordingIndicator(activity.getGpsLogger().isTracking());\n\t\t}\n\t\t\n\t\t// If not already tracking, start tracking\n\t\tif (!activity.getGpsLogger().isTracking()) {\n\t\t\tactivity.setEnabledActionButtons(false);\n\t\t\tIntent intent = new Intent(OSMTracker.INTENT_START_TRACKING);\n\t\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, activity.getCurrentTrackId());\n\t\t\tintent.setPackage(activity.getPackageName());\n\t\t\tactivity.sendBroadcast(intent);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/service/resources/AppResourceIconResolver.java",
    "content": "package net.osmtracker.service.resources;\r\n\r\nimport android.content.res.Resources;\r\nimport android.graphics.drawable.Drawable;\r\n\r\n/**\r\n * {@link IconResolver} implementation which gets the icon in the\r\n * drawable/ resouces.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class AppResourceIconResolver implements IconResolver {\r\n\r\n\t/**\r\n\t * Access to app resources.\r\n\t */\r\n\tprivate Resources resources;\r\n\t\r\n\t/**\r\n\t * Packages for accessing resources\r\n\t */\r\n\tprivate String resourcesPackage;\r\n\t\r\n\t/**\r\n\t * Name of the drawabe resource type.\r\n\t */\r\n\tprivate static final String DRAWABLE_TYPE = \"drawable\";\r\n\t\r\n\tpublic AppResourceIconResolver(Resources r, String defPackage) {\r\n\t\tresources = r;\r\n\t\tresourcesPackage = defPackage;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic Drawable getIcon(String key) {\r\n\t\tif (key != null) {\r\n\t\t\tint resId = resources.getIdentifier(key, DRAWABLE_TYPE, resourcesPackage);\r\n\t\t\tif(resId != 0) {\r\n\t\t\t\treturn resources.getDrawable(resId);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/service/resources/ExternalDirectoryIconResolver.java",
    "content": "package net.osmtracker.service.resources;\r\n\r\nimport java.io.File;\r\n\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.graphics.drawable.BitmapDrawable;\r\nimport android.graphics.drawable.Drawable;\r\n\r\n/**\r\n * Implementation of {@link IconResolver} which reads icon\r\n * from an external directory.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic class ExternalDirectoryIconResolver implements IconResolver {\r\n\t\r\n\t/**\r\n\t * Base directory to read icon files.\r\n\t */\r\n\tprivate File directory;\r\n\t\t\r\n\tpublic ExternalDirectoryIconResolver(File baseDir) {\r\n\t\tif (!baseDir.isDirectory()) {\r\n\t\t\tthrow new IllegalArgumentException(\"baseDir must be a directory. \" + baseDir + \" is not.\");\r\n\t\t}\r\n\t\t\r\n\t\tdirectory = baseDir;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic Drawable getIcon(String key) {\r\n\t\tif (key == null) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tFile iconFile = new File(directory, key);\r\n\t\t\tif (iconFile.exists() && iconFile.canRead()) {\r\n\t\t\t\tBitmap iconBitmap = BitmapFactory.decodeFile(iconFile.getAbsolutePath());\r\n\t\t\t\tBitmapDrawable iconDrawable = new BitmapDrawable(iconBitmap);\r\n\t\t\t\treturn iconDrawable;\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/service/resources/IconResolver.java",
    "content": "package net.osmtracker.service.resources;\r\n\r\nimport android.graphics.drawable.Drawable;\r\n\r\n/**\r\n * Resolver for finding button icons.\r\n * \r\n * @author Nicolas Guillaumin\r\n *\r\n */\r\npublic interface IconResolver {\r\n\r\n\t/**\r\n\t * @param key Key for icon\r\n\t * @return The {@link Drawable} for the key.\r\n\t */\r\n\tpublic Drawable getIcon(String key);\r\n\t\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/ArrayUtils.java",
    "content": "package net.osmtracker.util;\r\n\r\n/**\r\n * Array utilities.\r\n * \r\n * @author Nicolas Guillaumin\r\n */\r\npublic final class ArrayUtils {\r\n\r\n\t/**\r\n\t * Finds minimum value of an 2-dim array\r\n\t * \r\n\t * @param in\r\n\t *\t\t\t\tInput array\r\n\t * @param offset\r\n\t *\t\t\t\tOffset to use for second dimension\r\n\t * @return minimum value of the offset column for this array\r\n\t */\r\n\tpublic static double findMin(double[][] in, int offset) {\r\n\t\tdouble out = in[0][offset];\r\n\t\tfor (int i = 0; i < in.length; i++) {\r\n\t\t\tif (in[i][offset] < out) {\r\n\t\t\t\tout = in[i][offset];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\t/**\r\n\t * Finds maximum value of an 2-dim array\r\n\t * \r\n\t * @param in\r\n\t *\t\t\t\tInput array\r\n\t * @param offset\r\n\t *\t\t\t\tOffset to use for second dimension\r\n\t * @return maximum value of the offset column for this array\r\n\t */\r\n\tpublic static double findMax(double[][] in, int offset) {\r\n\t\tdouble out = in[0][offset];\r\n\t\tfor (int i = 0; i < in.length; i++) {\r\n\t\t\tif (in[i][offset] > out) {\r\n\t\t\t\tout = in[i][offset];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/Callback.java",
    "content": "package net.osmtracker.util;\n\n/**\n * A generic callback interface used for asynchronous operations.\n * Implementations of this interface should define how to handle the result\n * of an asynchronous task.\n */\npublic interface Callback {\n    /**\n     * Called when the asynchronous operation is completed.\n     * Implementations should handle the provided result accordingly.\n     *\n     * @param result The result of the operation, which may be {@code null} if an error occurs.\n     * @return A string value that may be used by the calling function, if applicable.\n     */\n    String onResult(String result);\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/CustomLayoutsUtils.java",
    "content": "package net.osmtracker.util;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.activity.AvailableLayouts;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.layout.GetStringResponseTask;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.io.Reader;\nimport java.io.StringWriter;\nimport java.io.Writer;\nimport java.nio.charset.StandardCharsets;\n\n/**\n * Created by adma9717 on 12/8/17.\n */\n\npublic class CustomLayoutsUtils {\n    //File Extension for the layouts in different languages\n    public final static String LAYOUT_EXTENSION_ISO = \"_xx.xml\";\n\n    /**\n     * @param fileName is the name of a .xml that you want to convert to presentation name\n     * @return a String presentation name, if the type isn't valid returns the same fileName parameter\n     */\n    public static String convertFileName(String fileName) {\n        //Remove de file extension\n        String subname = fileName.replace(DataHelper.LAYOUT_FILE_EXTENSION,\"\");\n\n        //Check if it has iso:\n        if(subname.matches(\"\\\\w+_..\")){\n            //Remove \"_es\"\n            subname = subname.substring(0,subname.length() - (AvailableLayouts.ISO_CHARACTER_LENGTH+1));\n        }\n\n        //Replace \"_\" to \" \"\n        return subname.replace(\"_\",\" \");\n    }\n\n    /**\n     * @param representation is the layout name shown in the UI\n     * @return Layout filename.\n     */\n    public static String unconvertFileName(String representation){\n        return representation.replace(\" \",\"_\") + DataHelper.LAYOUT_FILE_EXTENSION;\n    }\n\n    /**\n     * Creates a layoutFileName for installing or updating the layout\n     *\n     * @param layoutName String shown in the UI (human readable).\n     * @param iso String language code of the layout (ISO 639-1)\n     * @return layout file name as String.\n     */\n    public static String createFileName(String layoutName, String iso) {\n        String fileName = layoutName.replace(\" \", \"_\");\n        fileName = fileName + LAYOUT_EXTENSION_ISO.replace(\"xx\", iso);\n        return fileName;\n    }\n\n    /**\n     * FIXME: Create a util class with this method. This method is a copy&paste of the one in {@link GetStringResponseTask}\n     * Converts an InputStream to a String using the UTF-8 charset.\n     *\n     * @param stream the InputStream to read from\n     * @return a String containing all characters read from the stream\n     * @throws IOException if an I/O error occurs\n     */\n    public static String getStringFromStream(InputStream stream) throws IOException {\n        if (stream != null) {\n            Writer writer = new StringWriter();\n            char[] buffer = new char[2048];\n            try {\n                Reader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8));\n                int counter;\n                while ((counter = reader.read(buffer)) != -1) {\n                    writer.write(buffer, 0, counter);\n                }\n            }finally {\n                stream.close();\n            }\n            return writer.toString();\n        } else {\n            throw new  IOException();\n        }\n    }\n\n    /**\n     * Obtain the current inflated layout name and returns it.\n     *\n     * @param context current activity where this method is invoke\n     * @return the inflated layout name like a string = name_layout_xx.xml\n     */\n    public static String getCurrentLayoutName(Context context){\n        String layoutName = \"\";\n        try {\n            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);\n            layoutName = sharedPreferences.getString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT, OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT);\n        }\n        catch (Exception e){\n            e.printStackTrace();\n        }\n        return layoutName;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/DialogUtils.java",
    "content": "package net.osmtracker.util;\n\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\n\npublic class DialogUtils {\n\n\t/**\n\t * Display a standard alert dialog \n\t * @param ctx\n\t * @param msg\n\t */\n\tpublic static void showErrorDialog(Context ctx, CharSequence msg) {\n\t\tnew AlertDialog.Builder(ctx)\n\t\t\t.setTitle(android.R.string.dialog_alert_title)\n\t\t\t.setIcon(android.R.drawable.ic_dialog_alert)\n\t\t\t.setMessage(msg)\n\t\t\t.setCancelable(true)\n\t\t\t.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {\n\t\t\t\t@Override\n\t\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\t\tdialog.dismiss();\n\t\t\t\t}\n\t\t\t}).create().show();\n\t}\n\n\t/**\n\t * Displays a standard success alert dialog.\n\t *\n\t * @param context The application context.\n\t * @param message The message to display in the dialog.\n\t */\n\tpublic static void showSuccessDialog(Context context, int message) {\n\t\tif (context == null) {\n\t\t\tthrow new IllegalArgumentException(\"Context cannot be null\");\n\t\t}\n\n\t\tAlertDialog.Builder builder = new AlertDialog.Builder(context);\n\t\tbuilder.setTitle(\"Success\")\n\t\t\t\t.setIcon(android.R.drawable.ic_dialog_info)\n\t\t\t\t.setMessage(message)\n\t\t\t\t.setCancelable(true)\n\t\t\t\t.setNeutralButton(android.R.string.ok, (dialog, which) -> dialog.dismiss());\n\n\t\tAlertDialog dialog = builder.create();\n\t\tdialog.show();\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/FileSystemUtils.java",
    "content": "package net.osmtracker.util;\n\nimport android.util.Log;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileNotFoundException;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic final class FileSystemUtils {\n\t\n\tprivate static final String TAG = FileSystemUtils.class.getSimpleName();\n\t\n\t/**\n\t * The maximum recursion depth we allow when deleting directories\n\t */\n\tprivate static final int DELETE_MAX_RECURSION_DEPTH = 1;\n\t\n\t/**\n\t * <p>Copies file sourceFile to the directory destination directory.</p>\n\t * \n\t * <p>After this method returns, the caller should trigger a media scan to ensure the copied files\n\t * are known to the media scanner and visible over MTP. This can be done by broadcasting an\n\t * {@code Intent.ACTION_MEDIA_SCANNER_SCAN_FILE} with the URI of the new file, or by calling\n\t * {@code MediaScannerConnection.scanFile(file, null)}, passing the full path to the newly added\n\t * file as the {@code file} argument.</p>\n\t * \n\t * @param destinationDirectory location where the file to be copied\n\t * @param sourceFile the location of the file to copy\n\t * @param targetFileName name of the target file\n\t * @return true if the file was copied successfully, false otherwise\n\t */\t\n\tpublic static boolean copyFile(final File destinationDirectory, final File sourceFile, final String targetFileName) {\n\t\tboolean _return = false;\n\t\t\n\t\tif (null != destinationDirectory && null != sourceFile) {\n\t\t\tFileInputStream inputStream = null;\n\t\t\tFileOutputStream outputStream = null;\n\t\t\tbyte[] dataBuffer = new byte[1024];\n\t\t\tFile outputFile = new File(destinationDirectory.getAbsoluteFile()\n\t\t\t\t\t+ File.separator + targetFileName); \n\t\t\ttry {\n\t\t\t\tinputStream = new FileInputStream(sourceFile);\n\t\t\t\toutputStream = new FileOutputStream(outputFile);\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tint bytesRead = inputStream.read(dataBuffer); \n\t\t\t\t\twhile (-1 != bytesRead) {\n\t\t\t\t\t\toutputStream.write(dataBuffer, 0, bytesRead);\n\t\t\t\t\t\tbytesRead = inputStream.read(dataBuffer); \n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// No errors copying the file, look like we're good\n\t\t\t\t\t_return = true;\n\t\t\t\t} catch (IOException e) {\n\t\t\t\t\tLog.w(TAG,\"IOException trying to write copy file [\" \n\t\t\t\t\t\t\t+ sourceFile.getAbsolutePath() + \"] to [\" \n\t\t\t\t\t\t\t+ destinationDirectory.getAbsolutePath() +\"]: [\" \n\t\t\t\t\t\t\t+ e.getMessage() + \"]\");\n\t\t\t\t}\t\t\t\t\n\t\t\t} catch (FileNotFoundException e) {\n\t\t\t\tLog.w(TAG,\"File not found exception trying to write copy file [\" \n\t\t\t\t\t\t+ sourceFile.getAbsolutePath() + \"] to [\" \n\t\t\t\t\t\t+ destinationDirectory.getAbsolutePath() +\"]: [\" \n\t\t\t\t\t\t+ e.getMessage() + \"]\");\n\t\t\t}\n\t\t}\t\t\n\t\treturn _return;\n\t}\n\n\t/**\n\t * <p>Copies all files within a directory to another directory</p>\n\t * \n\t * <p>After this method returns, the caller should trigger a media scan to ensure the copied files\n\t * are known to the media scanner and visible over MTP. This can be done by calling\n\t * {@code MediaScannerConnection.scanFile(context, files, null, null)}, passing an array of the\n\t * newly added files as the {@code files} argument.</p>\n\t * \n\t * @param destinationDirectory the target directory\n\t * @param sourceDirectory the source directory \n\t * @return true if all contents were copied successfully, false otherwise\n\t */\n\tpublic static boolean copyDirectoryContents(File destinationDirectory, File sourceDirectory){\n\t\tif(destinationDirectory == null){\n\t\t\tLog.e(TAG, \"Unable to copy: destinationDirectory is null\");\n\t\t\treturn false;\n\t\t}\n\t\tif(sourceDirectory == null){\n\t\t\tLog.e(TAG, \"Unable to copy: sourceDirectory is null\");\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If the source and destination directories exist then copy the files \n\t\tif (sourceDirectory.exists() && sourceDirectory.isDirectory() \n\t\t\t\t&& destinationDirectory.exists() && destinationDirectory.isDirectory() \n\t\t\t\t&& destinationDirectory.canWrite()) {\n\n\t\t\tList<String> failedCopy = null;\n\t\t\tfor (File fileToCopy: sourceDirectory.listFiles()) {\n\t\t\t\t// Find and copy the file to the output directory\n\t\t\t\tLog.i(TAG,\"Copying link file [\" + fileToCopy.getName() + \"] from [\"\n\t\t\t\t\t\t+ sourceDirectory.getAbsolutePath() + \"] to [\" + destinationDirectory + \"]\");\n\t\t\t\t\n\t\t\t\tif (! copyFile(destinationDirectory, fileToCopy, fileToCopy.getName()) ) {\n\t\t\t\t\tif (failedCopy == null) {\n\t\t\t\t\t\tfailedCopy = new ArrayList<String>();\n\t\t\t\t\t}\n\t\t\t\t\tfailedCopy.add(fileToCopy.getName());\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (failedCopy != null) {\n\t\t\t\t// Report on the files that could not be copied\n\t\t\t\tLog.w(TAG,\"Failed to copy the following files: \");\n\t\t\t\tfor(String fileName: failedCopy) {\n\t\t\t\t\tLog.w(TAG,\"\\t [\" + fileName + \"]\");\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else {\n\t\t\tLog.w(TAG,\"Unable to copy:\\n\\tInput dir Exists? [\" + sourceDirectory.exists() \n\t\t\t\t\t+ \"]\\n\\tInput dir is directory? [\" + sourceDirectory.isDirectory()\n\t\t\t\t\t+ \"]\\n\\tOutput dir Exists? [\" + destinationDirectory.exists()\n\t\t\t\t\t+ \"]\\n\\tOutput dir is directory [\" + destinationDirectory.isDirectory()\n\t\t\t\t\t+ \"]\\n\\tOutput dir is writable [\" + destinationDirectory.canWrite() \n\t\t\t\t\t+ \"]\"); \n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\n\t/**\n\t * Delete a file/directory\n\t * @param fileToDelete the file/directory to be deleted\n\t * @param recursive if a directory needs to be deleted with all of it's content, set this to true. please note, that recursion is currently limited to a depth of 1 subfolder\n\t * @return true if the file/directory was completely deleted, false otherwise\n\t */\n\tpublic static boolean delete(File fileToDelete, boolean recursive) {\n\t\treturn delete(fileToDelete, recursive, 0);\n\t}\n\t\n\t/**\n\t * Delete a file/directory\n\t * @param fileToDelete the file/directory to be deleted\n\t * @param recursive if the deletion should be recursive\n\t * @param recursionDepth takes care of the depth of recursion and aborts deletion if DELETE_MAX_RECURSION_DEPTH is reached\n\t * @return true if file was deleted\n\t */\n\tprivate static boolean delete(File fileToDelete, boolean recursive, int recursionDepth){\n\t\t// if we're deeper than one recursion/subfolder, we'll cancel deletion\n\t\tif(recursionDepth > DELETE_MAX_RECURSION_DEPTH){\n\t\t\tLog.w(TAG, \"DELETE_MAX_RECURSION_DEPTH (\"+DELETE_MAX_RECURSION_DEPTH+\") reached. Directory deletion aborted.\");\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tboolean deleted = false;\n\t\t\n\t\t//If it's a directory and we should delete it recursively, try to delete all childs\n\t\tif(fileToDelete.isDirectory() && recursive){\n\t\t\tfor(File child:fileToDelete.listFiles()){\n\t\t\t\tif(!delete(child, true, recursionDepth+1)){\n\t\t\t\t\tLog.w(TAG, \"deletion of [\"+child+\"] failed, aborting now...\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tdeleted = fileToDelete.delete();\n\t\tboolean isDir = fileToDelete.isDirectory();\n\t\tif(deleted){\n\t\t\tLog.i(TAG, \"deleted \"+(isDir ? \"directory\" : \"file\")+\" [\"+fileToDelete+\"]\");\n\t\t}else{\n\t\t\tLog.w(TAG, \"unable to delete \"+(isDir ? \"directory\" : \"file\")+\" [\"+fileToDelete+\"]\");\n\t\t}\n\n\t\treturn deleted;\t\t\n\t}\n\n\n\t/**\n\t * Return an unique name for a child in the parent Directory\n\t * If there's a child in the parent with the received name + extension then will return name{i} + extension\n\t * extension can be \"\" for folders or a real extension (like \".gpx\") for files and {i} would be a serial number\n\t */\n\tpublic static String getUniqueChildNameFor(File parentDirectory, String childName, String childExtension) {\n\t\tint serial = 0;\n\t\tString suffix = \"\";\n\t\tString currentName;\n\t\tFile testFile;\n\t\tdo{\n\t\t\tcurrentName = childName + suffix + childExtension;\n\t\t\ttestFile = new File(parentDirectory, currentName);\n\t\t\tserial++;\n\t\t\tsuffix = \"\" + serial;\n\n\t\t}while(testFile.exists());\n\n\t\treturn currentName;\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/GitHubUtils.java",
    "content": "package net.osmtracker.util;\n\nimport android.os.AsyncTask;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\n/**\n * Utility class for interacting with the GitHub API.\n * Provides methods to retrieve file information and manage file uploads.\n *\n * <p>This class includes methods to:\n * <ul>\n *   <li>Generate a unique filename within a GitHub repository.</li>\n *   <li>Retrieve the SHA hash of a file stored in a GitHub repository.</li>\n * </ul>\n * </p>\n *\n * <p>It requires a valid GitHub authentication token for API requests.</p>\n */\npublic class GitHubUtils {\n    /**\n     * Retrieves the SHA hash of a file in a GitHub repository.\n     * If the file does not exist, it returns {@code null}.\n     *\n     * @param repoOwner   The owner of the repository (user or organization).\n     * @param repoName    The name of the GitHub repository.\n     * @param repoFilePath The file path in the repository.\n     * @param token       The GitHub authentication token with appropriate permissions.\n     * @return The SHA hash of the file if it exists, or {@code null} if the file is not found.\n     * @throws IOException   If an I/O error occurs while making the request.\n     * @throws JSONException If an error occurs while parsing the JSON response.\n     */\n    public static void getFileSHAAsync(String repoOwner, String repoName, String repoFilePath, String token, Callback callback) {\n        new AsyncTask<Void, Void, String>() {\n            @Override\n            protected String doInBackground(Void... voids) {\n                try {\n                    String apiUrl = \"https://api.github.com/repos/\" + repoOwner + \"/\" + repoName + \"/contents/\" + repoFilePath;\n                    System.out.println(\"Fetching SHA: \" + apiUrl);\n                    HttpURLConnection connection = (HttpURLConnection) new URL(apiUrl).openConnection();\n                    connection.setRequestMethod(\"GET\");\n                    connection.setRequestProperty(\"Authorization\", \"Bearer \" + token);\n                    connection.setRequestProperty(\"Accept\", \"application/vnd.github.v3+json\");\n\n                    if (connection.getResponseCode() == 200) {\n                        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));\n                        StringBuilder response = new StringBuilder();\n                        String line;\n                        while ((line = reader.readLine()) != null) {\n                            response.append(line);\n                        }\n                        reader.close();\n                        JSONObject jsonResponse = new JSONObject(response.toString());\n                        return jsonResponse.getString(\"sha\");\n                    }\n                } catch (Exception e) {\n                    e.printStackTrace();\n                }\n                return null;\n            }\n\n            @Override\n            protected void onPostExecute(String sha) {\n                callback.onResult(sha); // Return result via callback\n            }\n        }.execute();\n    }\n\n    /**\n     * Asynchronously generates a unique filename in a GitHub repository.\n     * If the file already exists, a number is appended before the extension.\n     *\n     * @param repoOwner   The owner of the repository.\n     * @param repoName    The name of the GitHub repository.\n     * @param repoFilePath The initial file path in the repository.\n     * @param token       The GitHub authentication token.\n     * @param callback    Callback to return the generated filename.\n     */\n    public static void getGHFilenameAsync(String repoOwner, String repoName, final String repoFilePath, String token, Callback callback) {\n        String filename = repoFilePath.substring(0, repoFilePath.lastIndexOf(\".\"));\n        String extension = repoFilePath.substring(repoFilePath.lastIndexOf(\".\"));\n        checkFileExists(repoOwner, repoName, filename, extension, 0, token, callback);\n    }\n\n    /**\n     * Recursively checks if a file exists and generates a unique filename.\n     *\n     * @param repoOwner  The owner of the repository.\n     * @param repoName   The GitHub repository name.\n     * @param filename   The base filename (without extension).\n     * @param extension  The file extension.\n     * @param count      The current attempt number for uniqueness.\n     * @param token      The GitHub authentication token.\n     * @param callback   Callback to return the final unique filename.\n     */\n    private static void checkFileExists(String repoOwner, String repoName, String filename, String extension, int count, String token, Callback callback) {\n        String newFilename;// (count == 0) ? filename + extension : filename + \"(\" + count + \")\" + extension;\n        if (count == 0) {\n            newFilename = filename + extension;\n        } else {\n            newFilename = filename + \"(\" + count + \")\" + extension;\n        }\n\n        getFileSHAAsync(repoOwner, repoName, newFilename, token, new Callback() {\n            @Override\n            public String onResult(String sha) {\n                if (sha == null) {\n                    // File does not exist, return the new unique filename\n                    callback.onResult(newFilename);\n                } else {\n                    // File exists, recursively try with the next count\n                    checkFileExists(repoOwner, repoName, filename, extension, count + 1, token, callback);\n                }\n                return null;\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/MercatorProjection.java",
    "content": "package net.osmtracker.util;\r\n\r\n\r\n/**\r\n * Geopoint to 2D projection using Mercator system.\r\n * \r\n * @author Nicolas Guillaumin\r\n * \r\n */\r\npublic class MercatorProjection {\r\n\r\n\t/**\r\n\t * Maximum latitude useable with Mercator projection.\r\n\t */\r\n\tprivate static final double MAX_LATITUDE = 85.0511f;\r\n\r\n\t/**\r\n\t * X & longitude offset in used 2-dim arrays.\r\n\t */\r\n\tpublic static final byte X = 0, LONGITUDE = 0;\r\n\r\n\t/**\r\n\t * Y & latitude offsets in used 2-dim arrays.\r\n\t */\r\n\tpublic static final byte Y = 1, LATITUDE = 1;\r\n\r\n\t/**\r\n\t * Width & Height of the projection (pixels)\r\n\t */\r\n\tprivate int width, height;\r\n\t\r\n\t/**\r\n\t * Scale of the projection\r\n\t */\r\n\tprivate double scale;\r\n\r\n\t/**\r\n\t * Four corners of the projection, in converted coordinates\r\n\t */\r\n\tprivate double topX, topY, bottomX, bottomY;\r\n\r\n\t/**\r\n\t * Dimensions of projected space.\r\n\t */\r\n\tprivate double dimX, dimY;\r\n\r\n\tpublic MercatorProjection(double minLat, double minLon, double maxLat, double maxLon, int w, int h) {\r\n\t\twidth = w;\r\n\t\theight = h;\r\n\r\n\t\t// Get data range for X and Y\r\n\t\tdouble rangeX = Math.abs(convertLongitude(maxLon) - convertLongitude(minLon));\r\n\t\tdouble rangeY = Math.abs(convertLatitude(maxLat) - convertLatitude(minLat));\r\n\r\n\t\t// Determine scale for each axis\r\n\t\tdouble scaleX = rangeX / width;\r\n\t\tdouble scaleY = rangeY / height;\r\n\r\n\t\t// Determine which scale to use. We take the greater to\r\n\t\t// be able to fit in width AND height\r\n\t\tscale = (scaleX > scaleY) ? scaleX : scaleY;\r\n\r\n\t\t// Determine offset for X & Y, to translate\r\n\t\t// lon/lat into screen center\r\n\t\tdouble offsetX = (width * scale) - rangeX;\r\n\t\tdouble offsetY = (height * scale) - rangeY;\r\n\r\n\t\t// Determine 4 corners of projection\r\n\t\ttopX = convertLongitude(minLon) - (offsetX / 2);\r\n\t\ttopY = convertLatitude(minLat) - (offsetY / 2);\r\n\t\tbottomX = convertLongitude(maxLon) + (offsetX / 2);\r\n\t\tbottomY = convertLatitude(maxLat) + (offsetY / 2);\r\n\r\n\t\t// Calculate projection dimensions\r\n\t\tdimX = bottomX - topX;\r\n\t\tdimY = bottomY - topY;\r\n\t}\r\n\r\n\t/**\r\n\t * Projects lon/lat coordinates into this projection.\r\n\t * \r\n\t * @param longitude\r\n\t *\t\t\t\tLongitude to project\r\n\t * @param latitude\r\n\t *\t\t\t\tLatitude to project\r\n\t * @return An array of 2 int projected coordinates (use\r\n\t *\t\t\t{@link MercatorProjection}.X and {@link MercatorProjection}.Y for\r\n\t *\t\t\taccess.\r\n\t */\r\n\tpublic int[] project(double longitude, double latitude) {\r\n\t\tint[] out = new int[2];\r\n\r\n\t\tout[X] = (int) Math.round(((convertLongitude(longitude) - topX) / dimX) * width);\r\n\t\tout[Y] = (int) Math.round(height - (((convertLatitude(latitude) - topY) / dimY) * height));\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\t/**\r\n\t * Convert longitude to X coordinate.\r\n\t * \r\n\t * @param longitude\r\n\t *\t\t\t\tLongitude to convert.\r\n\t * @return Converted X coordinate.\r\n\t */\r\n\tprivate double convertLongitude(double longitude) {\r\n\t\treturn longitude;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts latitude to Y coordinate.\r\n\t * \r\n\t * @param latitude\r\n\t *\t\t\t\tLatitude to convert.\r\n\t * @return Converted Y coordinate.\r\n\t */\r\n\tprivate double convertLatitude(double latitude) {\r\n\t\tif (latitude < -MAX_LATITUDE) {\r\n\t\t\tlatitude = -MAX_LATITUDE;\r\n\t\t} else if (latitude > MAX_LATITUDE) {\r\n\t\t\tlatitude = MAX_LATITUDE;\r\n\t\t}\r\n\r\n\t\treturn Math.log(Math.tan(Math.PI / 4 + (latitude * Math.PI / 180 / 2))) / (Math.PI / 180);\r\n\t}\r\n\r\n\tpublic double getScale() {\r\n\t\treturn scale;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Given a float degree value (latitude or longitude), format it to Degrees/Minutes/Seconds.\r\n\t * @param degrees  The value, such as 43.0438\r\n\t * @param isLatitude  Is this latitude, not longitude?\r\n\t * @return  The Degrees,Minutes,Seconds, such as: 43° 2' 38\" N\r\n\t */\r\n\tpublic static String formatDegreesAsDMS(Float degrees, final boolean isLatitude) {\t\t\r\n\t\tif (degrees == null) {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\t\r\n\t\tfinal boolean neg;\r\n\t\tif (degrees > 0) {\r\n\t\t\tneg = false;\r\n\t\t} else {\r\n\t\t\tneg = true;\r\n\t\t\tdegrees = -degrees;\r\n\t\t}\r\n\t\tStringBuffer dms = new StringBuffer();\r\n\r\n\t\tint n = degrees.intValue();\r\n\t\tdms.append(n);\r\n\t\tdms.append(\"\\u00B0 \");\r\n\r\n\t\tdegrees = (degrees - n) * 60.0f;\r\n\t\tn = degrees.intValue();\r\n\t\tdms.append(n);\r\n\t\tdms.append(\"' \");\r\n\r\n\t\tdegrees = (degrees - n) * 60.0f;\r\n\t\tn = degrees.intValue();\r\n\t\tdms.append(n);\r\n\t\tdms.append(\"\\\" \");\r\n\r\n\t\tif (isLatitude)\r\n\t\t\tdms.append(neg ? 'S' : 'N');\r\n\t\telse\r\n\t\t\tdms.append(neg ? 'W' : 'E');\r\n\r\n\t\treturn dms.toString();\r\n\t}\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/ThemeValidator.java",
    "content": "package net.osmtracker.util;\n\nimport java.util.Arrays;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport android.content.SharedPreferences;\nimport android.content.SharedPreferences.Editor;\nimport android.content.res.Resources;\n\n/**\n * <p>Validates the theme from the preferences\n * and update it to the default value if necessary.</p>\n * \n * <p>That's required since the theme references have\n * changed to support Android 3+. Users that have upgrade\n * from previous version were still referencing the old\n * theme, causing the menu to disappear.</p>\n *\n */\npublic class ThemeValidator {\n\n\t/**\n\t * Return a valid theme, possibly fixing the preference value if needed\n\t * @param prefs\n\t * @param res\n\t * @return\n\t */\n\tpublic static String getValidTheme(SharedPreferences prefs, Resources res) {\n\t\tString theme = prefs.getString(\n\t\t\t\tOSMTracker.Preferences.KEY_UI_THEME, OSMTracker.Preferences.VAL_UI_THEME);\n\t\t\n\t\tif (! Arrays.asList(res.getStringArray(R.array.prefs_theme_values)).contains(theme)) {\n\t\t\ttheme = OSMTracker.Preferences.VAL_UI_THEME;\n\t\t\tEditor e = prefs.edit();\n\t\t\te.putString(OSMTracker.Preferences.KEY_UI_THEME, OSMTracker.Preferences.VAL_UI_THEME);\n\t\t\te.commit();\n\t\t}\n\t\t\n\t\treturn theme;\n\t}\n\t\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/URLCreator.java",
    "content": "package net.osmtracker.util;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.db.DataHelper;\n\n/**\n * Created by labexp on 13/12/17.\n */\npublic class URLCreator {\n    /*\n    Create different URLs for accessing contents using the Github API (https://developer.github.com/v3/)\n    or for downloading files.\n    */\n\n    private static String API_BASE = \"https://api.github.com/repos/\";\n\n    private static String RAW_CONTENT = \"https://raw.githubusercontent.com/\";\n\n    private static final int USERNAME = 0;\n    private static final int REPO = 1;\n    private static final int BRANCH = 2;\n\n    /**\n     * Returns the URL used to get the contents of the folder `/layouts/metadata`.\n     *\n     * @param context {@link Context} to lookup for the preferences values\n     * @return String\n     */\n    public static String createMetadataDirUrl(Context context) {\n    \tString[] ghParams = getGithubParams(context);\n        String url = API_BASE + ghParams[USERNAME] + \"/\" + ghParams[REPO]\n                     + \"/contents/layouts/metadata?ref=\" + ghParams[BRANCH];\n        return url;\n    }\n\n    /**\n     * Return a URL to download a file in the `/layouts/metadata/` folder.\n     *\n     * @param context {@link Context} to lookup for the preferences values\n     * @param layoutName The name of the layout to be included in the URL for download the file.\n     * @return String\n     */\n    public static String createMetadataFileURL(Context context, String layoutName) {\n\n        String layoutFileName = CustomLayoutsUtils.unconvertFileName(layoutName);\n\n        String[] ghParams = getGithubParams(context);\n        String url = RAW_CONTENT + ghParams[USERNAME] + \"/\" + ghParams[REPO] + \"/\" + ghParams[BRANCH]\n                + \"/layouts/metadata/\" + layoutFileName;\n\n        return url;\n    }\n\n    /**\n     * Return a URL to download a file in the `/layouts/metadata/` folder.\n     * ghParams = {username, repo, branch};\n     * @param context {@link Context} to lookup for the preferences values\n     * @param layoutFolderName The name of the layout folder to be included in the URL for download the file.\n     * @param iso String language code of the layout (ISO 639-1)\n     * @return String\n     */\n    public static String createLayoutFileURL(Context context, String layoutFolderName, String iso){\n        String[] ghParams = getGithubParams(context);\n\n        String url = RAW_CONTENT + ghParams[USERNAME] + \"/\" + ghParams[REPO] + \"/\" + ghParams[BRANCH]\n                + \"/layouts/\" + layoutFolderName + \"/\" + iso + DataHelper.LAYOUT_FILE_EXTENSION;\n        return url;\n    }\n\n    /**\n     * Return a URL to download icon files in the `/layouts/$layoutName/` folder.\n     *\n     * @param context {@link Context} to lookup for the preferences values\n     * @param layoutFolderName The name of the layout folder to be included in the URL\n     * @return String\n     */\n    public static String createIconsDirUrl(Context context, String layoutFolderName) {\n        String[] ghParams = getGithubParams(context);\n\n        //example:  https://api.github.com/repos/labexp/osmtracker-android-layouts/contents/layouts/hidrantes/icons?ref=master\n        String url = API_BASE + ghParams[USERNAME] + \"/\" + ghParams[REPO]\n                + \"/contents/layouts/\" + layoutFolderName + \"/\" + layoutFolderName +\"_icons\" + \"?ref=\" + ghParams[BRANCH];\n        return url;\n    }\n\n    /**\n     * The method params describe a Github repository with custom layouts (username, repository\n     * and branch). The test URL will be used to test is the repository has layouts on it. Because\n     * the `metadata` folder is mandatory on the server, the URL returned is the one used for\n     * getting the contents of that folder.\n     *\n     * @param ghUsername String\n     * @param repositoryName String\n     * @param branchName String\n     * @return String with the test URL.\n     */\n    public static String createTestURL(String ghUsername, String repositoryName, String branchName){\n\n        String url = API_BASE + ghUsername + \"/\" + repositoryName + \"/contents/layouts/metadata?ref=\" + branchName;\n        return url;\n    }\n\n    /**\n     * Get custom layots server configuration values from the SharedPreferences.\n     *\n     * @param context {@link Context} to lookup for the preferences values\n     * @return String array with the following values:\n     *           [0] = Github Username\n     *           [1] = Repository Name\n     *           [2] = Branch Name\n     */\n    private static String[] getGithubParams(Context context) {\n        //the shared preferences file where the values are saved\n        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);\n\n        String username = preferences.getString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, OSMTracker.Preferences.VAL_GITHUB_USERNAME);\n        String repo = preferences.getString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, OSMTracker.Preferences.VAL_REPOSITORY_NAME);\n        String branch = preferences.getString(OSMTracker.Preferences.KEY_BRANCH_NAME, OSMTracker.Preferences.VAL_BRANCH_NAME);\n\n        String[] params = {username, repo, branch};\n        return params;\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/util/UserDefinedLayoutReader.java",
    "content": "package net.osmtracker.util;\n\nimport java.io.IOException;\nimport java.util.HashMap;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.activity.TrackLogger;\nimport net.osmtracker.layout.DisablableTableLayout;\nimport net.osmtracker.layout.UserDefinedLayout;\nimport net.osmtracker.listener.PageButtonOnClickListener;\nimport net.osmtracker.listener.StillImageOnClickListener;\nimport net.osmtracker.listener.TagButtonOnClickListener;\nimport net.osmtracker.listener.TextNoteOnClickListener;\nimport net.osmtracker.listener.VoiceRecOnClickListener;\nimport net.osmtracker.service.resources.IconResolver;\n\nimport org.xmlpull.v1.XmlPullParser;\nimport org.xmlpull.v1.XmlPullParserException;\n\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.graphics.drawable.Drawable;\nimport android.view.ViewGroup;\nimport android.widget.Button;\nimport android.widget.LinearLayout;\nimport android.widget.TableLayout;\nimport android.widget.TableRow;\n\n/**\n * Reads an user defined layout, using a pull parser,\n * and instantiate corresponding objects (Layouts, Buttons)\n * \n * @author Nicolas Guillaumin\n * \n */\npublic class UserDefinedLayoutReader {\n\n\t@SuppressWarnings(\"unused\")\n\tprivate static final String TAG = UserDefinedLayoutReader.class.getSimpleName();\n\n\t/**\n\t * Map containing parsed layouts\n\t */\n\tprivate HashMap<String, ViewGroup> layouts = new HashMap<String, ViewGroup>();\n\n\t/**\n\t * Source parser\n\t */\n\tprivate XmlPullParser parser;\n\n\t/**\n\t * Context for accessing resources\n\t */\n\tprivate Context context;\n\n\t/**\n\t * The user defined Layout\n\t */\n\tprivate UserDefinedLayout userDefinedLayout;\n\t\n\t/**\n\t * {@link IconResolver} to retrieve button icons.\n\t */\n\tprivate IconResolver iconResolver;\n\n\t/**\n\t * Listener bound to text note buttons\n\t */\n\tprivate TextNoteOnClickListener textNoteOnClickListener;\n\t\n\t/**\n\t * Listener bound to voice record buttons\n\t */\n\tprivate VoiceRecOnClickListener voiceRecordOnClickListener;\n\t\n\t/**\n\t * Lister bound to picture buttons\n\t */\n\tprivate StillImageOnClickListener stillImageOnClickListener;\n\t\n\t/**\n\t * {@link Resources} to retrieve String resources\n\t */\n\tprivate Resources resources;\n\t\n\t/** \n\t * representing ScreenOrientation\n\t * see {@link Configuration}.orientation\n\t */\n\tprivate int orientation;\n\t\n\tprivate static final int ICON_POS_AUTO = 0;\n\tprivate static final int ICON_POS_TOP = 1;\n\tprivate static final int ICON_POS_RIGHT = 2;\n\tprivate static final int ICON_POS_BOTTOM = 3;\n\tprivate static final int ICON_POS_LEFT = 4;\n\t\n\t/**\n\t * the icon position for the current layout\n\t */\n\tprivate int currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_AUTO;\n\n\t/**\n\t * Current track id\n\t */\n\tprivate long currentTrackId;\n\t\n\t/**\n\t * Constructor\n\t * \n\t * @param udl\n\t *\t\t\t\tUser defined layout\n\t * @param c\n\t *\t\t\t\tContext for accessing resources\n\t * @param tl\n\t *\t\t\t\tTrackLogger activity\n\t * @param trackId\n\t * \t\t\t  Current track id\n\t * @param input\n\t *\t\t\t\tParser for reading layout\n\t * @param ir\n\t * \t\t\t  Icon resolver to use to fetch icons \n\t */\n\tpublic UserDefinedLayoutReader(UserDefinedLayout udl, Context c, TrackLogger tl, long trackId, XmlPullParser input, IconResolver ir) {\n\t\tparser = input;\n\t\tcontext = c;\n\t\tresources = context.getResources();\n\t\tuserDefinedLayout = udl;\n\t\ticonResolver = ir;\n\t\tcurrentTrackId = trackId;\n\t\torientation = resources.getConfiguration().orientation;\n\t\t\n\t\t// Initialize listeners which will be bound to buttons\n\t\ttextNoteOnClickListener = new TextNoteOnClickListener(tl);\n\t\tvoiceRecordOnClickListener = new VoiceRecOnClickListener(tl);\n\t\tstillImageOnClickListener = new StillImageOnClickListener(tl);\n\t}\n\n\t/**\n\t * Parses an XML layout\n\t * \n\t * @return An HashMap of {@link ViewGroup} with layout name as key.\n\t * @throws XmlPullParserException\n\t * @throws IOException\n\t */\n\tpublic HashMap<String, ViewGroup> parseLayout() throws XmlPullParserException, IOException {\n\t\tint eventType = parser.getEventType();\n\t\twhile (eventType != XmlPullParser.END_DOCUMENT) {\n\t\t\tswitch (eventType) {\n\t\t\tcase XmlPullParser.START_TAG:\n\t\t\t\tString tagName = parser.getName();\n\t\t\t\tif (XmlSchema.TAG_LAYOUT.equals(tagName)) {\n\t\t\t\t\t// <layout> tag has been encountered. Inflate this layout\n\t\t\t\t\tinflateLayout();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase XmlPullParser.END_TAG:\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\teventType = parser.next();\n\t\t\t\n\t\t}\n\n\t\treturn layouts;\n\t}\n\n\t/**\n\t * Inflates a <layout> into a {@link TableLayout}\n\t * \n\t * @throws IOException\n\t * @throws XmlPullParserException\n\t */\n\tprivate void inflateLayout() throws IOException, XmlPullParserException {\n\t\tString layoutName = parser.getAttributeValue(null, XmlSchema.ATTR_NAME);\n\t\tString layoutIconPosValue = parser.getAttributeValue(null, XmlSchema.ATTR_ICONPOS);\n\n\t\t// find out the correct icon position for this layout\n\t\tif(XmlSchema.ATTR_VAL_ICONPOS_TOP.equals(layoutIconPosValue)){\n\t\t\t// TOP position\n\t\t\tthis.currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_TOP;\n\t\t} else if (XmlSchema.ATTR_VAL_ICONPOS_RIGHT.equals(layoutIconPosValue)){\n\t\t\t// RIGHT position\n\t\t\tthis.currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_RIGHT;\n\t\t} else if (XmlSchema.ATTR_VAL_ICONPOS_BOTTOM.equals(layoutIconPosValue)){\n\t\t\t// BOTTOM position\n\t\t\tthis.currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_BOTTOM;\n\t\t} else if (XmlSchema.ATTR_VAL_ICONPOS_LEFT.equals(layoutIconPosValue)){\n\t\t\t// LEFT position\n\t\t\tthis.currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_LEFT;\n\t\t} else {\n\t\t\t// if no or an undefined value is given for the current layout\n\t\t\t// AUTO position depending on screen orientation\n\t\t\tthis.currentLayoutIconPos = UserDefinedLayoutReader.ICON_POS_AUTO;\n\t\t}\n\n\t\t// Create a new table layout and set default parameters\n\t\tDisablableTableLayout tblLayout = new DisablableTableLayout(context);\n\t\ttblLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,\n\t\t\t\tLinearLayout.LayoutParams.FILL_PARENT, 1));\n\n\t\tString currentTagName = null;\n\t\twhile (!XmlSchema.TAG_LAYOUT.equals(currentTagName)) {\n\t\t\tint eventType = parser.next();\n\t\t\tswitch (eventType) {\n\t\t\tcase XmlPullParser.START_TAG:\n\t\t\t\tString name = parser.getName();\n\t\t\t\tif (XmlSchema.TAG_ROW.equals(name)) {\n\t\t\t\t\t// <row> tag has been encountered, inflates it\n\t\t\t\t\tinflateRow(tblLayout);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase XmlPullParser.END_TAG:\n\t\t\t\tcurrentTagName = parser.getName();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Add the new inflated layout to the list\n\t\tlayouts.put(layoutName, tblLayout);\n\t}\n\n\t/**\n\t * Inflates a <row> into a {@link TableRow}\n\t * \n\t * @param layout\n\t *\t\t\t\t{@link TableLayout} to rattach the row to\n\t * @throws XmlPullParserException\n\t * @throws IOException\n\t */\n\tprivate void inflateRow(TableLayout layout) throws XmlPullParserException, IOException {\n\t\tTableRow tblRow = new TableRow(layout.getContext());\n\t\ttblRow.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,\n\t\t\t\tTableLayout.LayoutParams.FILL_PARENT, 1));\n\n\t\tString currentTagName = null;\n\t\t// int eventType = parser.next();\n\t\twhile (!XmlSchema.TAG_ROW.equals(currentTagName)) {\n\t\t\tint eventType = parser.next();\n\t\t\tswitch (eventType) {\n\t\t\tcase XmlPullParser.START_TAG:\n\t\t\t\tString name = parser.getName();\n\t\t\t\tif (XmlSchema.TAG_BUTTON.equals(name)) {\n\t\t\t\t\t// <button> tag has been encountered, inflates it.\n\t\t\t\t\tinflateButton(tblRow);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase XmlPullParser.END_TAG:\n\t\t\t\tcurrentTagName = parser.getName();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t\t// Add the inflated table row to the current layout\n\t\tlayout.addView(tblRow);\n\t}\n\n\t/**\n\t * Inflates a <button>\n\t * \n\t * @param row\n\t *\t\t\t\tThe table row to attach the button to\n\t */\n\tpublic void inflateButton(TableRow row) {\n\t\tButton button = new Button(row.getContext());\n\t\tbutton.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT,\n\t\t\t\tTableRow.LayoutParams.FILL_PARENT, 1));\n\n\t\t// TODO Use kind of ButtonFactory here\n\n\t\tString buttonType = parser.getAttributeValue(null, XmlSchema.ATTR_TYPE);\n\t\tDrawable buttonIcon = null;\n\t\tif (XmlSchema.ATTR_VAL_PAGE.equals(buttonType)) {\n\t\t\t// Page button\n\t\t\tbutton.setText(findLabel(parser.getAttributeValue(null, XmlSchema.ATTR_LABEL), resources));\t\t\t\t\n\t\t\tbuttonIcon = iconResolver.getIcon(parser.getAttributeValue(null, XmlSchema.ATTR_ICON));\n\t\t\tbutton.setOnClickListener(new PageButtonOnClickListener(userDefinedLayout, parser.getAttributeValue(null,\n\t\t\t\t\tXmlSchema.ATTR_TARGETLAYOUT)));\n\t\t} else if (XmlSchema.ATTR_VAL_TAG.equals(buttonType)) {\n\t\t\t// Standard tag button\n\t\t\tbutton.setText(findLabel(parser.getAttributeValue(null, XmlSchema.ATTR_LABEL), resources));\t\t\t\n\t\t\tbuttonIcon = iconResolver.getIcon(parser.getAttributeValue(null, XmlSchema.ATTR_ICON));\n\t\t\tbutton.setOnClickListener(new TagButtonOnClickListener(currentTrackId));\n\t\t} else if (XmlSchema.ATTR_VAL_VOICEREC.equals(buttonType)) {\n\t\t\t// Voice record button\n\t\t\tbutton.setText(resources.getString(R.string.gpsstatus_record_voicerec));\n\t\t\tbuttonIcon = resources.getDrawable(R.drawable.voice_32x32);\n\t\t\tbutton.setOnClickListener(voiceRecordOnClickListener);\n\t\t} else if (XmlSchema.ATTR_VAL_TEXTNOTE.equals(buttonType)) {\n\t\t\t// Text note button\n\t\t\tbutton.setText(resources.getString(R.string.gpsstatus_record_textnote));\n\t\t\tbuttonIcon = resources.getDrawable(R.drawable.text_32x32);\n\t\t\tbutton.setOnClickListener(textNoteOnClickListener);\n\t\t} else if (XmlSchema.ATTR_VAL_PICTURE.equals(buttonType)) {\n\t\t\t// Picture button\n\t\t\tbutton.setText(resources.getString(R.string.gpsstatus_record_stillimage));\n\t\t\tbuttonIcon = resources.getDrawable(R.drawable.camera_32x32);\n\t\t\tbutton.setOnClickListener(stillImageOnClickListener);\n\t\t}\n\t\t\n\t\t// Where to draw the button's icon (depending on the current layout)\n\t\tswitch(this.currentLayoutIconPos){\n\t\tcase UserDefinedLayoutReader.ICON_POS_TOP:\n\t\t\t// TOP position\n\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(null, buttonIcon, null, null);\n\t\t\tbreak;\n\t\tcase UserDefinedLayoutReader.ICON_POS_RIGHT:\n\t\t\t// RIGHT position\n\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(null, null, buttonIcon, null);\n\t\t\tbreak;\n\t\tcase UserDefinedLayoutReader.ICON_POS_BOTTOM:\n\t\t\t// BOTTOM position\n\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, buttonIcon);\n\t\t\tbreak;\n\t\tcase UserDefinedLayoutReader.ICON_POS_LEFT:\n\t\t\t// LEFT position\n\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(buttonIcon, null, null, null);\n\t\t\tbreak;\n\t\tcase UserDefinedLayoutReader.ICON_POS_AUTO:\n\t\tdefault:\n\t\t\t// if no or an undefined value is given for the current layout\n\t\t\t// AUTO position depending on screen orientation\n\t\t\tif(orientation == Configuration.ORIENTATION_LANDSCAPE){\n\t\t\t\t// in landscape mode draw icon to the LEFT\n\t\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(buttonIcon, null, null,null);\n\t\t\t}else{\n\t\t\t\t// in portrait mode draw icon to the TOP\n\t\t\t\tbutton.setCompoundDrawablesWithIntrinsicBounds(null, buttonIcon, null, null);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\n\t\trow.addView(button);\n\t}\n\t\n\t/**\n\t * Finds a label if it's a reference to an internal resource (@string/label) \n\t * @param text Resource reference or plain label\n\t * @param r {@link Resources} to lookup from\n\t * @return Plain label, or corresponding text extracted from {@link Resources}\n\t */\n\tprivate String findLabel(String text, Resources r) {\n\t\tif (text != null) {\n\t\t\tif (text.startsWith(\"@\")) {\n\t\t\t\t// Check if it's a resource identifier\n\t\t\t\tint resId = resources.getIdentifier(text.replace(\"@\", \"\"), null, OSMTracker.PACKAGE_NAME);\n\t\t\t\tif (resId != 0) {\n\t\t\t\t\treturn resources.getString(resId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn text;\n\t}\n\n\t/**\n\t * XML Schema\n\t */\n\tprivate static final class XmlSchema {\n\t\tpublic static final String TAG_LAYOUT = \"layout\";\n\t\tpublic static final String TAG_ROW = \"row\";\n\t\tpublic static final String TAG_BUTTON = \"button\";\n\n\t\tpublic static final String ATTR_NAME = \"name\";\n\t\tpublic static final String ATTR_TYPE = \"type\";\n\t\tpublic static final String ATTR_LABEL = \"label\";\n\t\tpublic static final String ATTR_TARGETLAYOUT = \"targetlayout\";\n\t\tpublic static final String ATTR_ICON = \"icon\";\n\t\tpublic static final String ATTR_ICONPOS = \"iconpos\";\n\n\t\tpublic static final String ATTR_VAL_TAG = \"tag\";\n\t\tpublic static final String ATTR_VAL_PAGE = \"page\";\n\t\tpublic static final String ATTR_VAL_VOICEREC = \"voicerec\";\n\t\tpublic static final String ATTR_VAL_TEXTNOTE = \"textnote\";\n\t\tpublic static final String ATTR_VAL_PICTURE = \"picture\";\n\t\t\n\t\tpublic static final String ATTR_VAL_ICONPOS_TOP = \"top\";\n\t\tpublic static final String ATTR_VAL_ICONPOS_RIGHT = \"right\";\n\t\tpublic static final String ATTR_VAL_ICONPOS_BOTTOM = \"bottom\";\n\t\tpublic static final String ATTR_VAL_ICONPOS_LEFT = \"left\";\n\t}\n\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/view/DisplayTrackView.java",
    "content": "package net.osmtracker.view;\r\n\r\nimport java.text.DecimalFormat;\r\n\r\nimport net.osmtracker.R;\r\nimport net.osmtracker.db.TrackContentProvider;\r\nimport net.osmtracker.util.ArrayUtils;\r\nimport net.osmtracker.util.MercatorProjection;\r\n\r\nimport android.content.Context;\r\nimport android.database.ContentObserver;\r\nimport android.database.Cursor;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.graphics.Canvas;\r\nimport android.graphics.Paint;\r\nimport android.graphics.Paint.Align;\r\nimport android.os.Handler;\r\nimport android.util.Log;\r\nimport android.widget.TextView;\r\n\r\npublic class DisplayTrackView extends TextView {\r\n\r\n\tprivate static final String TAG = DisplayTrackView.class.getSimpleName();\r\n\r\n\t/**\r\n\t * Padding (in pixels) for drawing track, to prevent touching the borders.\r\n\t */\r\n\tprivate static final int PADDING = 5;\r\n\r\n\t/**\r\n\t * Width of the scale bar, in pixels.\r\n\t */\r\n\tprivate static final int SCALE_WIDTH = 50;\r\n\t\r\n\t/**\r\n\t * Height of left & right small lines to delimit scale (pixels)\r\n\t */\r\n\tprivate static final int SCALE_DELIM_HEIGHT = 10;\r\n\r\n\t/**\r\n\t * Formatter for scale information\r\n\t */\r\n\tprivate static final DecimalFormat SCALE_FORMAT = new DecimalFormat(\"0\");\r\n\r\n\t/**\r\n\t * Coordinates to draw (before projection)\r\n\t */\r\n\tprivate double[][] coords;\r\n\r\n\t/**\r\n\t * Array of pixels coordinates to display track\r\n\t */\r\n\tprivate int[][] pixels;\r\n\t\r\n\t/**\r\n\t * Coordinates of waypoints\r\n\t */\r\n\tprivate double[][] wayPointsCoords;\r\n\t\r\n\t/**\r\n\t * Pixels coordinates to display waypoints\r\n\t */\r\n\tprivate int[][] wayPointsPixels;\r\n\r\n\t/**\r\n\t * The projection used to convert coordinates to pixels.\r\n\t */\r\n\tprivate MercatorProjection projection;\r\n\r\n\t/**\r\n\t * Paint used for drawing track.\r\n\t */\r\n\tprivate Paint trackPaint = new Paint();\r\n\t\r\n\t/**\r\n\t * Compass bitmap\r\n\t */\r\n\tprivate Bitmap compass;\r\n\t\r\n\t/**\r\n\t * Position marker bitmap\r\n\t */\r\n\tprivate Bitmap marker;\r\n\t\r\n\t/**\r\n\t * Way point marker Bitmap\r\n\t */\r\n\tprivate Bitmap wayPointMarker;\r\n\t\r\n\t/**\r\n\t * Letter to use for meter unit (taken from resources)\r\n\t */\r\n\tprivate String meterLabel;\r\n\r\n\t/**\r\n\t * Letter to use for indicating North (taken from resources)\r\n\t */\r\n\tprivate String northLabel;\r\n\t\r\n\t/**\r\n\t * Current track id\r\n\t */\r\n\tprivate long currentTrackId;\r\n\t\r\n\t/**\r\n\t * ContentObserver to be notified about any new trackpoint and\r\n\t * redraw screen\r\n\t */\r\n\tprivate class TrackPointContentObserver extends ContentObserver {\r\n\r\n\t\tpublic TrackPointContentObserver(Handler handler) {\r\n\t\t\tsuper(handler);\r\n\t\t}\r\n\t\t\r\n\t\t@Override\r\n\t\tpublic void onChange(boolean selfChange) {\r\n\t\t\t// width & height could be = 0 if the view had\r\n\t\t\t// not been attached to window & measured when onChange()\r\n\t\t\t// is fired.\r\n\t\t\tif (getWidth() > 0 && getHeight() > 0) {\r\n\t\t\t\t// Populate new data, and recompute projection\r\n\t\t\t\tpopulateCoords();\r\n\t\t\t\tprojectData(getWidth(), getHeight());\r\n\t\t\t\t// Force view redraw\r\n\t\t\t\tinvalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\t/**\r\n\t * Instance of TrackpointContentObserver\r\n\t */\r\n\tprivate TrackPointContentObserver trackpointContentObserver;\r\n\r\n\tpublic DisplayTrackView(Context context) {\r\n\t\tsuper(context);\r\n\t}\r\n\t\r\n\tpublic DisplayTrackView(Context context, long trackId) {\r\n\t\tsuper(context);\r\n\r\n\t\tcurrentTrackId = trackId;\r\n\t\t\r\n\t\t// Set text align to center\r\n\t\tgetPaint().setTextAlign(Align.CENTER);\r\n\t\t\r\n\t\t// Setup track drawing paint\r\n\t\ttrackPaint.setColor(getCurrentTextColor());\r\n\t\ttrackPaint.setStyle(Paint.Style.FILL_AND_STROKE);\r\n\t\t\r\n\t\t// Retrieve some resources that will be used in drawing\r\n\t\tmeterLabel = getResources().getString(R.string.various_unit_meters);\r\n\t\tnorthLabel = getResources().getString(R.string.displaytrack_north);\r\n\t\tmarker = BitmapFactory.decodeResource(getResources(), R.drawable.marker);\r\n\t\tcompass = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_compass);\r\n\t\twayPointMarker = BitmapFactory.decodeResource(getResources(), R.drawable.star);\r\n\t\t\r\n\t\ttrackpointContentObserver = new TrackPointContentObserver(new Handler());\r\n\t\tcontext.getContentResolver().registerContentObserver(\r\n\t\t\t\tTrackContentProvider.trackPointsUri(currentTrackId),\r\n\t\t\t\ttrue, trackpointContentObserver);\r\n\t}\r\n\r\n\t@Override\r\n\tprotected void onSizeChanged(int w, int h, int oldw, int oldh) {\r\n\t\tLog.v(TAG, \"onSizeChanged: \" + w + \",\" + h + \". Old: \" + oldw + \",\" + oldh);\r\n\t\t\r\n\t\t// Populate data from content provider\r\n\t\tpopulateCoords();\r\n\t\t// Project coordinates into 2D screen\r\n\t\tprojectData(w, h);\r\n\t\r\n\t\tsuper.onSizeChanged(w, h, oldw, oldh);\r\n\t}\r\n\r\n\t@Override\r\n\tprotected void onDetachedFromWindow() {\r\n\t\t// Unregister content observer\r\n\t\tgetContext().getContentResolver().unregisterContentObserver(trackpointContentObserver);\r\n\t\tsuper.onDetachedFromWindow();\r\n\t}\r\n\t\r\n\t@Override\r\n\tprotected void onDraw(Canvas canvas) {\r\n\t\tsuper.onDraw(canvas);\r\n\r\n\t\t// If we have data to paint\r\n\t\tif (pixels != null && pixels.length > 0) {\r\n\t\t\tint length = pixels.length;\r\n\t\t\tfor (int i = 1; i < length; i++) {\r\n\t\t\t\t// Draw a line between each point\r\n\t\t\t\tcanvas.drawLine(\r\n\t\t\t\t\t\tPADDING + pixels[i - 1][MercatorProjection.X],\r\n\t\t\t\t\t\tPADDING\t+ pixels[i - 1][MercatorProjection.Y],\r\n\t\t\t\t\t\tPADDING + pixels[i][MercatorProjection.X],\r\n\t\t\t\t\t\tPADDING\t+ pixels[i][MercatorProjection.Y], trackPaint);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Draw a marker for each waypoint\r\n\t\t\tif (wayPointsPixels != null && wayPointsPixels.length > 0) {\r\n\t\t\t\tint wpLength = wayPointsPixels.length;\r\n\t\t\t\tfor (int i = 0; i < wpLength; i++) {\r\n\t\t\t\t\tcanvas.drawBitmap(wayPointMarker,\r\n\t\t\t\t\t\t\tPADDING + wayPointsPixels[i][MercatorProjection.X],\r\n\t\t\t\t\t\t\tPADDING + wayPointsPixels[i][MercatorProjection.Y],\r\n\t\t\t\t\t\t\tthis.getPaint());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Draw current position marker\r\n\t\t\tcanvas.drawBitmap(marker, pixels[length - 1][MercatorProjection.X],\r\n\t\t\t\t\tpixels[length - 1][MercatorProjection.Y], this.getPaint());\r\n\r\n\t\t\t// Draw scale information\r\n\t\t\tdrawScale(canvas);\r\n\t\t}\r\n\t\t// Draw static resources\r\n\t\tdrawStatic(canvas);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draw scale information.\r\n\t * \r\n\t * @param canvas\r\n\t *\t\t\t\tCanvas used to draw\r\n\t */\r\n\tprivate void drawScale(Canvas canvas) {\r\n\t\tdouble scale = projection.getScale();\r\n\t\tLog.v(TAG, \"Scale is: \" + scale);\r\n\r\n\t\t// Draw horizontal line\r\n\t\tcanvas.drawLine(getWidth() - PADDING - SCALE_WIDTH, PADDING+SCALE_DELIM_HEIGHT/2, getWidth() - PADDING, PADDING+SCALE_DELIM_HEIGHT/2, this.getPaint());\r\n\t\t\r\n\t\t// Draw 2 small vertical lines for the bounds\r\n\t\tcanvas.drawLine(getWidth() - PADDING - SCALE_WIDTH, PADDING, getWidth() - PADDING - SCALE_WIDTH,\r\n\t\t\t\tPADDING + SCALE_DELIM_HEIGHT, this.getPaint());\r\n\t\tcanvas.drawLine(getWidth() - PADDING, PADDING, getWidth() - PADDING, PADDING + SCALE_DELIM_HEIGHT, this.getPaint());\r\n\t\t\r\n\t\t// Draw scale\r\n\t\tcanvas.drawText(SCALE_FORMAT.format(100*1000*scale*SCALE_WIDTH) + meterLabel, getWidth() - PADDING - SCALE_WIDTH / 2,\r\n\t\t\t\tPADDING + SCALE_DELIM_HEIGHT + getPaint().getTextSize(), this.getPaint());\r\n\t}\r\n\r\n\t/**\r\n\t * Draw various static gfx (Compass ...)\r\n\t * \r\n\t * @param canvas\r\n\t *\t\t\t\tCanvas used to draw\r\n\t */\r\n\tprivate void drawStatic(Canvas canvas) {\r\n\t\tcanvas.drawBitmap(compass, PADDING, getHeight() - PADDING - compass.getHeight(), null);\r\n\t\tcanvas.drawText(northLabel, PADDING + compass.getWidth() / 2, getHeight() - PADDING - compass.getHeight() - 5,\r\n\t\t\t\tthis.getPaint());\r\n\t}\r\n\t\r\n\t/**\r\n\t * Populate coordinates from a cursor to current track Database\r\n\t */\r\n\tpublic void populateCoords() {\t\t\r\n\t\tCursor c = getContext().getContentResolver().query(\r\n\t\t\t\tTrackContentProvider.trackPointsUri(currentTrackId),\r\n\t\t\t\tnull, null, null, TrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\r\n\t\tcoords = new double[c.getCount()][2];\r\n\t\tint i=0;\r\n\t\t\r\n\t\tfor(c.moveToFirst(); !c.isAfterLast(); c.moveToNext(), i++) {\r\n\t\t\tcoords[i][MercatorProjection.LONGITUDE] = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE));\r\n\t\t\tcoords[i][MercatorProjection.LATITUDE] = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE));\r\n\t\t}\r\n\t\tc.close();\r\n\t\t\r\n\t\tLog.v(TAG, \"Extracted \" + coords.length + \" track points from DB.\");\r\n\t\t\r\n\t\tc = getContext().getContentResolver().query(\r\n\t\t\t\tTrackContentProvider.waypointsUri(currentTrackId),\r\n\t\t\t\tnull, null, null, TrackContentProvider.Schema.COL_TIMESTAMP + \" asc\");\r\n\t\twayPointsCoords = new double[c.getCount()][2];\r\n\t\t\r\n\t\tfor(c.moveToFirst(), i=0; !c.isAfterLast(); c.moveToNext(), i++) {\r\n\t\t\twayPointsCoords[i][MercatorProjection.LONGITUDE] = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LONGITUDE));\r\n\t\t\twayPointsCoords[i][MercatorProjection.LATITUDE] = c.getDouble(c.getColumnIndex(TrackContentProvider.Schema.COL_LATITUDE));\r\n\t\t}\r\n\t\tc.close();\r\n\t\t\r\n\t\tLog.v(TAG, \"Extracted \" + wayPointsCoords.length + \" way points from DB.\");\r\n\t}\r\n\t\r\n\t/**\r\n\t * Project current coordinates into a 2D screen\r\n\t * @param width Width of the display screen\r\n\t * @param height Height of the display screen\r\n\t */\r\n\tpublic void projectData(int width, int height) {\r\n\t\t// If we got coordinates, start projecting.\r\n\t\tif (coords != null && coords.length > 0) {\r\n\t\t\tprojection = new MercatorProjection(\r\n\t\t\t\t\tArrayUtils.findMin(coords, MercatorProjection.LATITUDE),\r\n\t\t\t\t\tArrayUtils.findMin(coords, MercatorProjection.LONGITUDE),\r\n\t\t\t\t\tArrayUtils.findMax(coords, MercatorProjection.LATITUDE),\r\n\t\t\t\t\tArrayUtils.findMax(coords, MercatorProjection.LONGITUDE),\r\n\t\t\t\t\twidth - PADDING * 2, height - PADDING * 2);\r\n\r\n\t\t\t// Project each coordinate into pixels.\r\n\t\t\tpixels = new int[coords.length][2];\r\n\t\t\t\r\n\t\t\tint length = pixels.length;\r\n\t\t\tfor (int i = 0; i < length; i++) {\r\n\t\t\t\tpixels[i] = projection.project(coords[i][MercatorProjection.LONGITUDE],\r\n\t\t\t\t\t\tcoords[i][MercatorProjection.LATITUDE]);\r\n\t\t\t}\r\n\t\t\r\n\t\t\t// Same thing for way points, using same projection\r\n\t\t\tif (wayPointsCoords != null && wayPointsCoords.length > 0) {\r\n\t\r\n\t\t\t\t// Project each coordinate into pixels.\r\n\t\t\t\twayPointsPixels = new int[wayPointsCoords.length][2];\r\n\t\t\t\t\r\n\t\t\t\tlength = wayPointsPixels.length;\r\n\t\t\t\tfor (int i = 0; i < length; i++) {\r\n\t\t\t\t\twayPointsPixels[i] = projection.project(wayPointsCoords[i][MercatorProjection.LONGITUDE],\r\n\t\t\t\t\t\t\twayPointsCoords[i][MercatorProjection.LATITUDE]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/view/TextNoteDialog.java",
    "content": "package net.osmtracker.view;\n\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.os.Bundle;\nimport android.view.WindowManager.LayoutParams;\nimport android.widget.EditText;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.TrackContentProvider;\n\nimport java.util.UUID;\n\npublic class TextNoteDialog extends AlertDialog {\n\t\n\t/**\n\t * bundle key for text of input field\n\t */\n\tprivate static final String KEY_INPUT_TEXT = \"INPUT_TEXT\";\n\n\t/**\n\t * bundle key for waypoint uuid\n\t */\n\tprivate static final String KEY_WAYPOINT_UUID = \"WAYPOINT_UUID\";\n\tprivate static final String KEY_NOTE_UUID = \"NOTE_UUID\";\n\t\n\t/**\n\t * bundle key for waypoints track id\n\t */\n\tprivate static final String KEY_WAYPOINT_TRACKID = \"WAYPOINT_TRACKID\";\n\t\n\t/**\n\t * the input box displayed in the dialog\n\t */\n\tEditText input = null;\n\t\n\t/**\n\t * Unique identifier of the waypoint this dialog working on\n\t */\n\tprivate String wayPointUuid = null;\n\n\t// Unique identifier of the note this dialog working on\n\tprivate String noteUuid = null;\n\n\t/**\n\t * Id of the track the dialog will add this waypoint to\n\t */\n\tprivate long wayPointTrackId;\n\n\t/**\n\t * Id of the track the dialog will add this OSM Text note to\n\t */\n\tprivate long noteTrackId;\n\n\tboolean saveAsWayPoint, saveAsNote = false;\n\n\tprivate Context context;\n\n\tpublic TextNoteDialog(Context context, long trackId) {\n\t\tsuper(context);\n\n\t\tthis.context = context;\n\t\tthis.wayPointTrackId = trackId;\n\t\tthis.noteTrackId = trackId;\n\n\t\t// Text edit control for user input\n\t\tinput = new EditText(context);\n\n\t\t// default settings\n\t\tthis.setTitle(R.string.gpsstatus_record_textnote);\n\t\tthis.setCancelable(true);\n\t\tthis.setView(input);\n\n\t\tthis.setButton(DialogInterface.BUTTON_POSITIVE,\n\t\t\t\tcontext.getString(android.R.string.ok),\n\t\t\t\t(dialog, which) -> {\n\n\n\t\t\tString noteText = input.getText().toString();\n\n\t\t\tif (saveAsWayPoint) {\n\t\t\t\t// Track waypoint with user input text\n\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_UPDATE_WP);\n\t\t\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, wayPointTrackId);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, noteText);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, TextNoteDialog.this.wayPointUuid);\n\t\t\t\tintent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(intent);\n\t\t\t}\n\n\t\t\tif (saveAsNote) {\n\t\t\t\tIntent noteIntent = new Intent(OSMTracker.INTENT_UPDATE_NOTE);\n\t\t\t\tnoteIntent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, noteTrackId);\n\t\t\t\tnoteIntent.putExtra(OSMTracker.INTENT_KEY_NAME, noteText);\n\t\t\t\tnoteIntent.putExtra(OSMTracker.INTENT_KEY_UUID, noteUuid);\n\t\t\t\tnoteIntent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(noteIntent);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.setButton(DialogInterface.BUTTON_NEGATIVE,\n\t\t\t\tcontext.getResources().getString(android.R.string.cancel),\n\t\t\t\t(dialog, which) -> {\n\t\t\t\t\t// cancel the dialog\n\t\t\t\t\tdialog.cancel();\n\t\t\t\t});\n\t\t\n\t\tthis.setOnCancelListener(new DialogInterface.OnCancelListener() {\n\t\t\t@Override\n\t\t\tpublic void onCancel(DialogInterface dialog) {\n\t\t\t\t// delete the waypoint because user canceled this dialog\n\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_DELETE_WP);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, TextNoteDialog.this.wayPointUuid);\n\t\t\t\tintent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(intent);\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n\t/**\n\t * @link android.app.Dialog#onStart()\n\t */\n\t@Override\n\tprotected void onStart() {\n\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tString prefSaveAs = prefs.getString(\n\t\t\t\tOSMTracker.Preferences.KEY_USE_NOTES,\n\t\t\t\tOSMTracker.Preferences.VAL_USE_NOTES);\n\t\tswitch (prefSaveAs) {\n\t\t\tcase \"waypoint\":\n\t\t\t\tsaveAsWayPoint = true;\n\t\t\t\tsaveAsNote = false;\n\t\t\t\tbreak;\n\t\t\tcase \"osm_note\":\n\t\t\t\tsaveAsWayPoint = false;\n\t\t\t\tsaveAsNote = true;\n\t\t\t\tbreak;\n\t\t\tdefault: // Assuming \"both\" is the default\n\t\t\t\tsaveAsWayPoint = true;\n\t\t\t\tsaveAsNote = true;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (saveAsWayPoint) {\n\t\t\tif (wayPointUuid == null) {\n\t\t\t\t// there is no UUID set for the waypoint we're working on\n\t\t\t\t// so we need to generate a UUID and track this point\n\t\t\t\twayPointUuid = UUID.randomUUID().toString();\n\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_TRACK_WP);\n\t\t\t\tintent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, wayPointTrackId);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, wayPointUuid);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, context.getResources().getString(R.string.gpsstatus_record_textnote));\n\t\t\t\tintent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(intent);\n\t\t\t}\n\t\t}\n\n\t\tif (saveAsNote) {\n\t\t\tif (noteUuid == null) {\n\t\t\t\t// there is no UUID set for the note we're working on\n\t\t\t\t// so we need to generate a UUID and track this note\n\t\t\t\tnoteUuid = UUID.randomUUID().toString();\n\t\t\t\tIntent noteIntent = new Intent(OSMTracker.INTENT_TRACK_NOTE);\n\t\t\t\tnoteIntent.putExtra(TrackContentProvider.Schema.COL_TRACK_ID, noteTrackId);\n\t\t\t\tnoteIntent.putExtra(OSMTracker.INTENT_KEY_UUID, noteUuid);\n\t\t\t\tnoteIntent.putExtra(OSMTracker.INTENT_KEY_NAME, context.getResources().getString(R.string.gpsstatus_record_textnote));\n\t\t\t\tnoteIntent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(noteIntent);\n\t\t\t}\n\t\t}\n\n\t\tgetWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);\n\t\t\n\t\tsuper.onStart();\n\t}\n\n\t/**\n\t * resets values of this dialog\n\t * such as the input fields text and the waypoints uuid\n\t */\n\tpublic void resetValues() {\n\t\twayPointUuid = null;\n\t\tnoteUuid = null;\n\t\tinput.setText(\"\");\n\t}\n\n\t/**\n\t * restoring values from the savedInstanceState\n\t */\n\t@Override\n\tpublic void onRestoreInstanceState(Bundle savedInstanceState) {\n\t\tString text = savedInstanceState.getString(KEY_INPUT_TEXT);\n\t\tif (text != null) {\n\t\t\tinput.setText(text);\n\t\t}\n\t\twayPointUuid = savedInstanceState.getString(KEY_WAYPOINT_UUID);\n\t\twayPointTrackId = savedInstanceState.getLong(KEY_WAYPOINT_TRACKID);\n\t\tnoteUuid = savedInstanceState.getString(KEY_NOTE_UUID);\n\t\tsuper.onRestoreInstanceState(savedInstanceState);\n\t}\n\n\t/**\n\t * save values to bundle that we'll need later\n\t */\n\t@Override\n\tpublic Bundle onSaveInstanceState() {\n\t\tBundle extras = super.onSaveInstanceState();\n\t\textras.putString(KEY_INPUT_TEXT, input.getText().toString());\n\t\tif (saveAsWayPoint) {\n\t\t\textras.putLong(KEY_WAYPOINT_TRACKID, wayPointTrackId);\n\t\t\textras.putString(KEY_WAYPOINT_UUID, wayPointUuid);\n\t\t}\n\t\tif (saveAsNote) {\n\t\t\textras.putString(KEY_NOTE_UUID, noteUuid);\n\t\t}\n\t\treturn extras;\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/net/osmtracker/view/VoiceRecDialog.java",
    "content": "package net.osmtracker.view;\n\nimport android.app.ProgressDialog;\nimport android.content.Context;\nimport android.content.DialogInterface;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.media.AudioManager;\nimport android.media.MediaPlayer;\nimport android.media.MediaRecorder;\nimport android.media.MediaRecorder.OnInfoListener;\nimport android.os.SystemClock;\nimport android.util.Log;\nimport android.view.KeyEvent;\nimport android.widget.Toast;\n\nimport androidx.preference.PreferenceManager;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.TrackContentProvider.Schema;\n\nimport java.io.File;\nimport java.util.Date;\nimport java.util.UUID;\n\npublic class VoiceRecDialog extends ProgressDialog implements OnInfoListener{\n\t\n\tprivate final static String TAG = VoiceRecDialog.class.getSimpleName();\n\t\n\t/**\n\t * Id of the track the dialog will add this waypoint to\n\t */\n\tprivate long wayPointTrackId;\n\t\n\t/**\n\t * Unique identifier of the waypoint this dialog working on\n\t */\n\tprivate String wayPointUuid = null;\n\t\n\t/**\n\t * AudioManager, to unmute microphone\n\t */\n\tprivate AudioManager audioManager;\n\t\n\t/**\n\t * the duration of a voice recording in seconds\n\t */\n\tprivate int recordingDuration = -1;\n\n\t/**\n\t * Indicates if we are currently recording, to prevent double click.\n\t */\n\tprivate boolean isRecording = false;\n\t\n\t/**\n\t * MediaRecorder used to record audio\n\t */\n\tprivate MediaRecorder mediaRecorder;\n\t\n\t/**\n\t * MediaPlayer used to play a short beepbeep when recording starts\n\t */\n\tprivate MediaPlayer mediaPlayerStart = null;\n\n\t/**\n\t * MediaPlayer used to play a short beep when recording stops\n\t */\n\tprivate MediaPlayer mediaPlayerStop = null;\n\t\n\t/**\n\t * the context for this dialog\n\t */\n\tprivate Context context;\n\t\n\t/**\n\t * saves the orientation at the time when the dialog was started\n\t */\n\tprivate int currentOrientation = -1;\n\t\n\t/**\n\t * saves the requested orientation at the time when the dialog was started to restore it when we stop recording\n\t */\n\tprivate int currentRequestedOrientation = -1;\n\t\n\t/**\n\t * saves the time when this dialog was started.\n\t * This is needed to check if a key was pressed before the dialog was shown \n\t */\n\tprivate long dialogStartTime = 0;\n\t\n\tpublic VoiceRecDialog(Context context, long trackId) {\n\t\tsuper(context);\n\t\tthis.context = context;\n\t\tthis.wayPointTrackId = trackId;\n\t\t\n\t\t// Try to un-mute microphone, just in case\n\t\taudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);\n\n\t\tthis.setTitle(context.getResources().getString(R.string.tracklogger_voicerec_title));\n\t\t\n\t\tthis.setButton(context.getResources().getString(R.string.tracklogger_voicerec_stop), new DialogInterface.OnClickListener() {\n\t\t\t@Override\n\t\t\tpublic void onClick(DialogInterface dialog, int which) {\n\t\t\t\tmediaRecorder.stop();\n\t\t\t\tVoiceRecDialog.this.dismiss();\n\t\t\t}\n\t\t});\t\t\n\t}\n\t\n\t\n\t/**\n\t * @link android.app.Dialog#onStart()\n\t */\n\t@Override\n\tpublic void onStart() {\n\t\t// we'll need the start time of this dialog to check if a key has been pressed before the dialog was opened\n\t\tdialogStartTime = SystemClock.uptimeMillis();\n\n\t\tSharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);\n\n\t\tif (!isRecording)\n\t\t\trecordingDuration = Integer.parseInt(\n\t\t\t\t\tpreferences.getString(OSMTracker.Preferences.KEY_VOICEREC_DURATION,\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_VOICEREC_DURATION));\n\t\telse {\n\t\t\tif (recordingDuration <= 0)\n\t\t\t\trecordingDuration = Integer.parseInt(OSMTracker.Preferences.VAL_VOICEREC_DURATION);\n\t\t}\n\n\t\tthis.setMessage(\n\t\t\t\tcontext.getResources().getString(R.string.tracklogger_voicerec_text)\n\t\t\t\t.replace(\"{0}\", String.valueOf(recordingDuration)));\n\t\t\n\t\t// we need to avoid screen orientation change during recording because this causes some strange behavior\n\t\ttry{\n\t\t\tthis.currentOrientation = context.getResources().getConfiguration().orientation;\n\t\t\tthis.currentRequestedOrientation = this.getOwnerActivity().getRequestedOrientation();\n\t\t\tthis.getOwnerActivity().setRequestedOrientation(currentOrientation);\n\t\t}catch(Exception e){\n\t\t\tLog.w(TAG, \"No OwnerActivity found for this Dialog. Use showDialog method within the activity to handle this Dialog and to avoid voice recording problems.\");\n\t\t}\n\t\t\n\t\tLog.d(TAG,\"onStart() called\");\n\t\tif(wayPointUuid == null){\n\t\t\tLog.d(TAG,\"onStart() no UUID set, generating a new UUID\");\n\t\t\t// there is no UUID set for the waypoint we're working on\n\t\t\t// so we need to generate a UUID and track this point\n\t\t\twayPointUuid = UUID.randomUUID().toString();\n\t\t\tIntent intent = new Intent(OSMTracker.INTENT_TRACK_WP);\n\t\t\tintent.putExtra(Schema.COL_TRACK_ID, wayPointTrackId);\n\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, wayPointUuid);\n\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_NAME, context.getResources().getString(R.string.wpt_voicerec));\n\t\t\tintent.setPackage(getContext().getPackageName());\n\t\t\tcontext.sendBroadcast(intent);\n\t\t}\n\t\t\n\t\tif (!isRecording) {\n\t\t\tLog.d(TAG,\"onStart() currently not recording, start a new one\");\n\t\t\t\n\t\t\tisRecording = true;\n\t\t\t// Get a new audio filename\n\t\t\tFile audioFile = getAudioFile();\n\n\t\t\tif (audioFile != null) {\n\n\t\t\t\tboolean playSound = preferences.getBoolean(OSMTracker.Preferences.KEY_SOUND_ENABLED,\n\t\t\t\t\t\tOSMTracker.Preferences.VAL_SOUND_ENABLED);\n\n\t\t\t\t// Some workaround for record problems\n\t\t\t\tunMuteMicrophone();\n\t\t\t\t\n\t\t\t\t// prepare the media players\t\t\n\t\t\t\tif (playSound) {\n\t\t\t\t\tmediaPlayerStart = MediaPlayer.create(context, R.raw.beepbeep);\n\t\t\t\t\tif (mediaPlayerStart != null) {\n\t\t\t\t\t\tmediaPlayerStart.setLooping(false);\n\t\t\t\t\t}\n\t\t\t\t\tmediaPlayerStop = MediaPlayer.create(context, R.raw.beep);\n\t\t\t\t\tif (mediaPlayerStop != null) {\n\t\t\t\t\t\tmediaPlayerStop.setLooping(false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmediaRecorder = new MediaRecorder();\n\t\t\t\ttry {\n\t\t\t\t\t// MediaRecorder configuration\n\t\t\t\t\tmediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);\n\t\t\t\t\tmediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);\n\t\t\t\t\tmediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);\n\t\t\t\t\tmediaRecorder.setOutputFile(audioFile.getAbsolutePath());\n\t\t\t\t\tmediaRecorder.setMaxDuration(recordingDuration * 1000);\n\t\t\t\t\tmediaRecorder.setOnInfoListener(this);\n\t\n\t\t\t\t\tLog.d(TAG, \"onStart() starting mediaRecorder...\");\n\t\t\t\t\tmediaRecorder.prepare();\n\t\t\t\t\tmediaRecorder.start();\n\n\t\t\t\t\tif (mediaPlayerStart != null) {\n\t\t\t\t\t\t// short \"beep-beep\" to notify that recording started\n\t\t\t\t\t\tmediaPlayerStart.start();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tLog.d(TAG,\"onStart() mediaRecorder started...\");\n\t\t\t\t} catch (Exception ioe) {\n\t\t\t\t\tLog.w(TAG, \"onStart() voice recording has failed\", ioe);\n\t\t\t\t\tthis.dismiss();\n\t\t\t\t\tToast.makeText(context, context.getResources().getString(R.string.error_voicerec_failed),\n\t\t\t\t\t\t\tToast.LENGTH_SHORT).show();\n\t\n\t\t\t\t}\n\t\n\t\t\t\t// Still update waypoint, could be useful even without\n\t\t\t\t// the voice file.\n\t\t\t\tIntent intent = new Intent(OSMTracker.INTENT_UPDATE_WP);\n\t\t\t\tintent.putExtra(Schema.COL_TRACK_ID, wayPointTrackId);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_UUID, wayPointUuid);\n\t\t\t\tintent.putExtra(OSMTracker.INTENT_KEY_LINK, audioFile.getName());\n\t\t\t\tintent.setPackage(getContext().getPackageName());\n\t\t\t\tcontext.sendBroadcast(intent);\n\t\t\t} else {\n\t\t\t\tLog.w(TAG,\"onStart() no suitable audioFile could be created\");\n\t\t\t\t// The audio file could not be created on the file system\n\t\t\t\t// let the user know\n\t\t\t\tToast.makeText(context, \n\t\t\t\t\t\tcontext.getResources().getString(R.string.error_voicerec_failed),\n\t\t\t\t\t\tToast.LENGTH_SHORT).show();\n\t\t\t}\n\t\t}\n\n\t\tsuper.onStart();\n\t}\n\t\n\t@Override\n\tpublic void onInfo(MediaRecorder mr, int what, int extra) {\n\t\tLog.d(TAG, \"onInfo() received mediaRecorder info (\"+String.valueOf(what)+\")\");\n\t\tswitch(what){\n\t\tcase MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN:\n\t\tcase MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED:\n\t\tcase MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:\n\t\t\tif (mediaPlayerStop != null) {\n\t\t\t\t// short \"beep\" when we stop to record\n\t\t\t\tmediaPlayerStop.start();\n\t\t\t}\n\t\t\t// MediaRecorder has been stopped by system\n\t\t\t// we're done, so we can dismiss the dialog\n\t\t\tthis.dismiss();\n\t\t\tbreak;\n\t\t}\n\t}\n\t\n\t/**\n\t * called when the dialog disappears\n\t */\n\t@Override\n\tprotected void onStop() {\n\t\tLog.d(TAG, \"onStop() called\");\n\t\t \n\t\tsafeClose(mediaRecorder, false);\n\t\tsafeClose(mediaPlayerStart);\n\t\tsafeClose(mediaPlayerStop);\n\t\t\n\t\twayPointUuid = null;\n\t\tisRecording = false;\n\t\t\n\t\ttry {\n\t\t\tthis.getOwnerActivity().setRequestedOrientation(currentRequestedOrientation);\n\t\t} catch(Exception e) {\n\t\t\tLog.w(TAG, \"No OwnerActivity found for this Dialog. Use showDialog method within the activity to handle this Dialog and to avoid voice recording problems.\");\n\t\t}\n\t\t\n\t\tsuper.onStop();\n\t}\n\t\n\t/* (non-Javadoc)\n\t * @see android.app.AlertDialog#onKeyDown(int, android.view.KeyEvent)\n\t */\n\t@Override\n\tpublic boolean onKeyDown(int keyCode, KeyEvent event) {\n\t\t// only handle this event if it was raised after the dialog was shown\n\t\tif(event.getDownTime() > dialogStartTime){\n\t\t\tswitch (keyCode) {\n\t\t\tcase KeyEvent.KEYCODE_DPAD_CENTER:\n\t\t\tcase KeyEvent.KEYCODE_HEADSETHOOK:\n\t\t\t\t// stop recording / dismiss the dialog\n\t\t\t\tthis.dismiss();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn super.onKeyDown(keyCode, event);\n\t}\n\n\t\n\t/**\n\t * Un-mute the microphone, to prevent a blank-recording\n\t * on certain devices (Acer Liquid ?)\n\t */\n\tprivate void unMuteMicrophone() {\n\t\tLog.v(TAG, \"unMuteMicrophone()\");\n\t\tif (audioManager.isMicrophoneMute()) {\n\t\t\taudioManager.setMicrophoneMute(false);\n\t\t}\n\t}\n\t\n\t/**\n\t * @return a new File in the current track directory.\n\t */\n\tpublic File getAudioFile() {\n\t\tFile audioFile = null;\n\t\t\n\t\t// Query for current track directory\n\t\tFile trackDir = DataHelper.getTrackDirectory(wayPointTrackId, context);\n\t\t\n\t\t// Create the track storage directory if it does not yet exist\n\t\tif (!trackDir.exists()) {\n\t\t\tif ( !trackDir.mkdirs() ) {\n\t\t\t\tLog.w(TAG, \"Directory [\" + trackDir.getAbsolutePath() + \"] does not exist and cannot be created\");\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that this location can be written to \n\t\tif (trackDir.exists() && trackDir.canWrite()) {\n\t\t\taudioFile = new File(trackDir, \n\t\t\t\t\tDataHelper.FILENAME_FORMATTER.format(new Date()) + DataHelper.EXTENSION_3GPP);\n\t\t\t} else {\n\t\t\tLog.w(TAG, \"The directory [\" + trackDir.getAbsolutePath() + \"] will not allow files to be created\");\n\t\t}\n\t\t\n\t\treturn audioFile;\n\t}\n\n\t/**\n\t * Safely close a {@link MediaPlayer} without throwing\n\t * exceptions\n\t * @param mp\n\t */\n\tprivate void safeClose(MediaPlayer mp) {\n\t\tif (mp != null) {\n\t\t\ttry {\n\t\t\t\tmp.stop();\n\t\t\t} catch (Exception e) {\n\t\t\t\tLog.w(TAG, \"Failed to stop media player\",e);\n\t\t\t} finally {\n\t\t\t\tmp.release();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Safely close a {@link MediaRecorder} without throwing\n\t * exceptions\n\t * @param mr\n\t */\n\tprivate void safeClose(MediaRecorder mr, boolean stopIt) {\n\t\tif (mr != null) {\n\t\t\ttry {\n\t\t\t\tif (stopIt) {\n\t\t\t\t\tmr.stop();\n\t\t\t\t}\n\t\t\t} catch (Exception e) {\n\t\t\t\tLog.w(TAG, \"Failed to stop media recorder\",e);\n\t\t\t} finally {\n\t\t\t\tmr.release();\n\t\t\t}\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/divider.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <size android:height=\"2dp\" />\n    <solid android:color=\"#fff\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/ic_fab_add_track.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\"\n    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"@android:color/white\"\n      android:pathData=\"M12,2C8.14,2 5,5.14 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.86 -3.14,-7 -7,-7zM16,10h-3v3h-2v-3L8,10L8,8h3L11,5h2v3h3v2z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/map_btn_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ripple xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:color=\"@color/map_onClickBackground\"\n    >\n    <item>\n        <shape android:shape=\"oval\">\n            <solid android:color=\"@color/map_btnBackground\" />\n            <stroke android:width=\"1dp\" android:color=\"@color/btnBorder\" />\n        </shape>\n    </item>\n</ripple>\n"
  },
  {
    "path": "app/src/main/res/drawable-mdpi/theme_highcontrast_btn.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item android:state_window_focused=\"false\" android:state_enabled=\"true\"\tandroid:drawable=\"@drawable/theme_highcontrast_btn_normal\" />\n\t<item android:state_window_focused=\"false\" android:state_enabled=\"false\" android:drawable=\"@drawable/theme_highcontrast_btn_focused\" />\n\t<item android:state_pressed=\"true\" android:drawable=\"@drawable/theme_highcontrast_btn_pressed\" />\n\t<item android:state_focused=\"true\" android:state_enabled=\"true\" android:drawable=\"@drawable/theme_highcontrast_btn_focused\" />\n\t<item android:state_enabled=\"true\" android:drawable=\"@drawable/theme_highcontrast_btn_normal\" />\n\t<item android:state_focused=\"true\" android:drawable=\"@drawable/theme_highcontrast_btn_disable\" />\n\t<item android:drawable=\"@drawable/theme_highcontrast_btn_disable\" />\n\n</selector>\n"
  },
  {
    "path": "app/src/main/res/layout/about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/about_root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:padding=\"10dp\"\n    android:fitsSystemWindows=\"true\">\n\n    <LinearLayout\n        android:id=\"@+id/about_header\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentTop=\"true\">\n\n        <ImageView\n            android:id=\"@+id/about_logo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:contentDescription=\"@string/acc.osmtracker_logo\"\n            android:src=\"@drawable/icon_100x100\" />\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@+id/about_appname\"\n                style=\"@android:style/TextAppearance.Large\"\n                android:layout_width=\"fill_parent\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"@string/app_name\" />\n\n            <TextView\n                android:id=\"@+id/about_version\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"v{versionName}\" />\n        </LinearLayout>\n\n    </LinearLayout>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_above=\"@+id/about_footer\"\n        android:layout_below=\"@+id/about_header\"\n        android:fillViewport=\"true\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@+id/about_text\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center\"\n                android:text=\"@string/about_text\" />\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:autoLink=\"all\"\n                android:gravity=\"center\"\n                android:text=\"@string/about_link\" />\n\n            <TextView\n                android:id=\"@+id/about_translate_text\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"20dp\"\n                android:gravity=\"center\"\n                android:text=\"@string/about_translate_text\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:autoLink=\"all\"\n                android:gravity=\"center\"\n                android:text=\"@string/about_translate_link\" />\n\n        </LinearLayout>\n\n    </ScrollView>\n\n    <LinearLayout\n        android:id=\"@+id/about_footer\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:orientation=\"horizontal\">\n\n        <Button\n            android:id=\"@+id/about_debug_info_button\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/about_debug_info\" />\n\n        <Button\n            android:id=\"@+id/about_export_db_button\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/about_export_db\" />\n    </LinearLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/available_layouts.xml",
    "content": "<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fillViewport=\"true\"\n    android:fitsSystemWindows=\"true\">\n\n    <LinearLayout\n        android:id=\"@+id/root_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:paddingTop=\"5dp\" />\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/buttons_presets.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:id=\"@+id/buttons_presets\"\n    android:paddingTop=\"4dp\"\n    android:fitsSystemWindows=\"true\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/prefs_ui_buttons_layout_default_section\"\n        android:padding=\"7dp\"\n        android:layout_marginLeft=\"10dp\"/>\n\n    <CheckBox\n        android:id=\"@+id/def_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"7dp\"\n        android:text=\"@string/prefs_ui_buttons_layout_defaut\"\n        android:layout_marginLeft=\"20dp\"\n        android:textSize=\"20sp\"/>\n\n    <TextView\n        android:id=\"@+id/down_sec\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/prefs_ui_buttons_layout_downloaded_section\"\n        android:padding=\"7dp\"\n        android:layout_marginLeft=\"10dp\"/>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\"\n        android:id=\"@+id/list_layouts\"\n        android:layout_marginBottom=\"25dp\">\n\n        <!--This text only appear when the user don't have any files downloaded-->\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/prefs_ui_buttons_layout_empty_section\"\n            android:id=\"@+id/btnpre_empty\"\n            android:gravity=\"center\"\n            android:padding=\"7dp\"/>\n\n    </LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/displaytrackmap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <org.osmdroid.views.MapView\n            android:id=\"@+id/displaytrackmap_osmView\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"fill_parent\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"1.0\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_bias=\"1.0\"/>\n\n        <ImageView\n            android:id=\"@+id/displaytrackmap_imgZoomCenter\"\n            android:layout_width=\"50sp\"\n            android:layout_height=\"50sp\"\n            android:layout_marginEnd=\"20dp\"\n            android:padding=\"10dp\"\n            android:layout_marginBottom=\"200dp\"\n            android:contentDescription=\"@string/acc.zoom_center\"\n            android:background=\"@drawable/map_btn_style\"\n            android:src=\"@drawable/gps_center\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\" />\n\n        <ImageView\n            android:id=\"@+id/displaytrackmap_imgZoomIn\"\n            android:layout_width=\"50sp\"\n            android:layout_height=\"50sp\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_marginTop=\"10sp\"\n            android:padding=\"10dp\"\n            android:contentDescription=\"@string/acc.zoom_in\"\n            android:src=\"@drawable/zoom_in\"\n            android:background=\"@drawable/map_btn_style\"\n            app:layout_constraintEnd_toEndOf=\"@+id/displaytrackmap_imgZoomCenter\"\n            app:layout_constraintTop_toBottomOf=\"@+id/displaytrackmap_imgZoomCenter\" />\n\n        <ImageView\n            android:id=\"@+id/displaytrackmap_imgZoomOut\"\n            android:layout_width=\"50sp\"\n            android:layout_height=\"50sp\"\n            android:layout_marginTop=\"10sp\"\n            android:padding=\"10dp\"\n            android:contentDescription=\"@string/acc.zoom_out\"\n            android:src=\"@drawable/zoom_out\"\n            android:background=\"@drawable/map_btn_style\"\n            app:layout_constraintEnd_toEndOf=\"@+id/displaytrackmap_imgZoomIn\"\n            app:layout_constraintTop_toBottomOf=\"@+id/displaytrackmap_imgZoomIn\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/edit_note_dialog.xml",
    "content": "<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fillViewport=\"true\"\n    android:padding=\"16dp\">\n\n        <LinearLayout\n            android:orientation=\"vertical\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\">\n\n                <!-- Note Text Label -->\n                <TextView\n                    android:id=\"@+id/edit_note_tv_name\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:text=\"@string/note_name_label\" />\n\n                <!-- EditText -->\n                <EditText\n                    android:id=\"@+id/edit_note_et_name\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:inputType=\"text\"\n                    android:padding=\"10dp\"\n                    android:background=\"@android:drawable/editbox_background\"\n                    android:textColor=\"@color/colorPrimaryDark\"\n                    android:textSize=\"16sp\"\n                    android:maxWidth=\"600dp\" />\n\n                <!-- Buttons Row -->\n                <LinearLayout\n                    android:orientation=\"horizontal\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center\"\n                    android:layout_marginTop=\"8dp\">\n\n                        <Button\n                            android:id=\"@+id/edit_note_button_update\"\n                            style=\"?android:attr/borderlessButtonStyle\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginEnd=\"8dp\"\n                            android:layout_weight=\"1\"\n                            android:text=\"@string/edit_note_bt_update\" />\n\n                        <Button\n                            android:id=\"@+id/edit_note_button_delete\"\n                            style=\"?android:attr/borderlessButtonStyle\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            android:text=\"@string/edit_note_bt_delete\" />\n\n                        <Button\n                            android:id=\"@+id/edit_note_button_osm_upload\"\n                            style=\"?android:attr/borderlessButtonStyle\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            android:text=\"@string/osm_note_bt_upload\" />\n                </LinearLayout>\n\n                <!-- Cancel Button -->\n                <Button\n                    android:id=\"@+id/edit_note_button_cancel\"\n                    android:layout_width=\"160dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/edit_note_bt_cancel\"\n                    android:gravity=\"center\" />\n\n        </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/edit_waypoint_dialog.xml",
    "content": "<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fillViewport=\"true\"\n    android:padding=\"16dp\">\n\n        <LinearLayout\n            android:orientation=\"vertical\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center\">\n\n                <Button\n                    android:id=\"@+id/edit_waypoint_button_preview\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:text=\"@string/edit_waypoint_bt_preview\"\n                    android:visibility=\"gone\"/>\n\n\n                <!-- Waypoint Name Label -->\n                <TextView\n                    android:id=\"@+id/edit_waypoint_tv_name\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textAppearance=\"?android:attr/textAppearanceMedium\"\n                    android:text=\"@string/waypoint_name_label\" />\n\n                <!-- EditText -->\n                <EditText\n                    android:id=\"@+id/edit_waypoint_et_name\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:inputType=\"text\"\n                    android:padding=\"10dp\"\n                    android:background=\"@android:drawable/editbox_background\"\n                    android:textColor=\"@color/colorPrimaryDark\"\n                    android:textSize=\"16sp\"\n                    android:maxWidth=\"600dp\" />\n\n                <!-- Buttons Row -->\n                <LinearLayout\n                    android:orientation=\"horizontal\"\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center\"\n                    android:layout_marginTop=\"8dp\">\n\n                        <Button\n                            android:id=\"@+id/edit_waypoint_button_update\"\n                            style=\"?android:attr/borderlessButtonStyle\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginEnd=\"8dp\"\n                            android:layout_weight=\"1\"\n                            android:text=\"@string/edit_waypoint_bt_save\" />\n\n                        <Button\n                            android:id=\"@+id/edit_waypoint_button_delete\"\n                            style=\"?android:attr/borderlessButtonStyle\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_weight=\"1\"\n                            android:text=\"@string/edit_waypoint_bt_delete\" />\n                </LinearLayout>\n\n\n                <!-- Cancel Button -->\n                <Button\n                    android:id=\"@+id/edit_waypoint_button_cancel\"\n                    android:layout_width=\"160dp\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"8dp\"\n                    android:text=\"@string/edit_waypoint_bt_cancel\"\n                    android:gravity=\"center\" />\n\n        </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/git_configuration_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <EditText\n        android:id=\"@+id/git_configuration_user_name\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:hint=\"@string/github_repository_settings_username\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n    <EditText\n        android:id=\"@+id/git_configuration_user_token\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:layout_below=\"@id/git_configuration_user_name\"\n        android:hint=\"@string/github_token_placeholder\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_gide_text\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_title\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step1\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_gide_text\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_1\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n        <Button\n            android:id=\"@+id/git_link_create_token_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"2\"\n            android:text=\"@string/github_get_token_btn\" />\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step2\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step1\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_2\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step3\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step2\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_3\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step4\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step3\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_4\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step5\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step4\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_5\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step6\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step5\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_6\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_step7\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step6\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_step_7\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:id=\"@+id/git_configuration_user_token_note\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_configuration_user_token_step7\"\n        android:layout_margin=\"10dp\"\n        android:orientation=\"horizontal\">\n\n        <TextView\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/how_to_get_ghToken_guide_note\"\n            android:layout_weight=\"1\"\n            android:gravity=\"left\"/>\n\n    </LinearLayout>\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/git_create_fork.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:orientation=\"vertical\" >\n\n    <LinearLayout\n        android:id=\"@+id/git_newfork_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/git_create_newfork_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/create\" />\n\n        <Button\n            android:id=\"@+id/git_back_newfork_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/tracklogger_btnBack\" />\n    </LinearLayout>\n\n    <include\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        layout=\"@layout/git_create_fork_fields\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/git_create_fork_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <EditText\n        android:id=\"@+id/git_username_to_fork_editText_user\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n    <EditText\n        android:id=\"@+id/git_repo_to_fork_editText_name\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:layout_below=\"@id/git_username_to_fork_editText_user\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/git_create_pullrequest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:orientation=\"vertical\" >\n\n    <LinearLayout\n        android:id=\"@+id/git_pullrequest_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/git_create_pullrequest_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/create\" />\n\n        <Button\n            android:id=\"@+id/git_back_pullrequest_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/menu_cancel\" />\n    </LinearLayout>\n\n    <include\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        layout=\"@layout/git_create_pullrequest_fields\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/git_create_pullrequest_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <EditText\n        android:id=\"@+id/git_title_pullrequest_editText\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"@string/upload_to_github_pr_title\"\n        android:layout_margin=\"5dp\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n    <EditText\n        android:id=\"@+id/git_body_pullrequest_editText\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"@string/upload_to_github_pr_description\"\n        android:layout_margin=\"5dp\"\n        android:layout_below=\"@id/git_title_pullrequest_editText\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/git_newrepo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:orientation=\"vertical\" >\n\n    <LinearLayout\n        android:id=\"@+id/git_newrepo_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/git_create_newrepo_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/create\" />\n\n        <Button\n            android:id=\"@+id/git_back_newrepo_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/tracklogger_btnBack\" />\n    </LinearLayout>\n\n    <include\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        layout=\"@layout/git_newrepo_fields\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/git_newrepo_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <EditText\n        android:id=\"@+id/git_newrepo_name\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:hint=\"@string/github_repository_settings_repository_name\"\n        android:inputType=\"text\"\n        android:singleLine=\"true\" />\n\n    <Switch\n        android:id=\"@+id/git_newrepo_privacy\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"10dp\"\n        android:layout_below=\"@+id/git_newrepo_name\"\n        android:text=\"@string/github_repository_private\" />\n\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/git_trackdetail_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <EditText\n        android:id=\"@+id/git_trackdetail_item_description\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"5dp\"\n        android:hint=\"@string/upload_to_github_description\"\n        android:inputType=\"text\"\n        android:singleLine=\"false\" />\n\n    <Spinner\n        android:id=\"@+id/item_git_spinner_repos\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/git_trackdetail_item_description\"\n        android:layout_margin=\"15dp\"\n        android:layout_weight=\"1\"/>\n\n<LinearLayout\n    android:id=\"@+id/git_repo_buttons\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_below=\"@+id/item_git_spinner_repos\"\n    android:layout_margin=\"15dp\"\n    android:orientation=\"horizontal\">\n\n\n    <Button\n        android:id=\"@+id/git_create_fork_btn_ok\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1\"\n        android:text=\"@string/upload_to_github_create_fork\" />\n\n    <Button\n        android:id=\"@+id/git_create_repo_btn_ok\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1\"\n        android:text=\"@string/upload_to_github_create_repository\" />\n\n    <Button\n        android:id=\"@+id/git_open_pull_request\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1\"\n        android:text=\"@string/upload_to_github_open_pull_request\" />\n</LinearLayout>\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/github_configuration_token.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_above=\"@id/git_trackdetail_buttons\"\n        android:fillViewport=\"true\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\">\n\n            <include\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                layout=\"@layout/git_configuration_fields\" />\n\n        </LinearLayout>\n\n    </ScrollView>\n\n    <LinearLayout\n        android:id=\"@+id/git_trackdetail_buttons\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\">\n\n        <Button\n            android:id=\"@+id/git_save_credentials_btn_ok\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/menu_save\" />\n\n        <Button\n            android:id=\"@+id/git_back_credentials_btn_cancel\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/tracklogger_btnBack\" />\n    </LinearLayout>\n\n</RelativeLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/github_repository_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\" android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" android:padding=\"7dp\" android:fitsSystemWindows=\"true\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"10dp\"\n        android:layout_marginBottom=\"10dp\"\n        android:padding=\"7dp\">\n\n        <CheckBox\n            android:id=\"@+id/default_server\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"50\"\n            android:text=\"@string/github_repository_settings_default_checkbox\" />\n\n        <CheckBox\n            android:id=\"@+id/custom_server\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"50\"\n            android:text=\"@string/github_repository_settings_custom_checkbox\" />\n\n    </LinearLayout>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"7dp\"\n        android:layout_marginBottom=\"10dp\">\n\n        <TextView\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/github_repository_settings_username\"\n            android:layout_weight=\"30\"\n            android:gravity=\"center\"/>\n\n        <EditText\n            android:id=\"@+id/github_username\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:inputType=\"text\"\n            android:layout_weight=\"70\"\n            android:gravity=\"center\"/>\n    </LinearLayout>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"7dp\"\n        android:layout_marginBottom=\"10dp\">\n\n        <TextView\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/github_repository_settings_repository_name\"\n            android:layout_weight=\"30\"\n            android:gravity=\"center\"/>\n\n        <EditText\n            android:id=\"@+id/repository_name\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:inputType=\"text\"\n            android:layout_weight=\"70\"\n            android:gravity=\"center\"/>\n    </LinearLayout>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"7dp\"\n        android:layout_marginBottom=\"10dp\">\n\n        <TextView\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:text=\"@string/github_repository_settings_branch_name\"\n            android:layout_weight=\"30\"\n            android:gravity=\"center\"/>\n\n        <EditText\n            android:id=\"@+id/branch_name\"\n            android:layout_width=\"0dip\"\n            android:layout_height=\"match_parent\"\n            android:inputType=\"text\"\n            android:layout_weight=\"70\"\n            android:gravity=\"center\"/>\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/gpsstatus_record.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\" \n    android:fitsSystemWindows=\"true\">\n\n    <TextView\n        android:id=\"@+id/gpsstatus_record_tvHeading\"\n        android:layout_width=\"0dip\"\n        android:layout_height=\"fill_parent\"\n        android:layout_gravity=\"center_vertical|center_horizontal\"\n        android:layout_weight=\".5\"\n        android:gravity=\"center\"\n        android:text=\"@string/various_heading\" >\n    </TextView>\n    \n    <TextView\n        android:id=\"@+id/gpsstatus_record_tvAccuracy\"\n        android:layout_width=\"0dip\"\n        android:layout_height=\"fill_parent\"\n        android:layout_gravity=\"center_vertical|center_horizontal\"\n        android:layout_weight=\"1\"\n        android:gravity=\"center\"\n        android:text=\"@string/various_waiting_gps_fix\" >\n    </TextView>\n\n    <ImageView\n        android:id=\"@+id/gpsstatus_record_imgSatIndicator\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"fill_parent\"\n        android:layout_gravity=\"center_vertical|center_horizontal\"\n        android:src=\"@drawable/sat_indicator_off\"\n        android:contentDescription=\"@string/acc.sat_indicator\">\n    </ImageView>\n\n    <ImageView\n        android:id=\"@+id/gpsstatus_record_animRec\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"fill_parent\"\n        android:layout_gravity=\"center_vertical|center_horizontal\"\n        android:src=\"@drawable/record_grey\"\n        android:contentDescription=\"@string/acc.record_indicator\">\n    </ImageView>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/notelist.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.recyclerview.widget.RecyclerView\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/notelist_rv\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n</androidx.recyclerview.widget.RecyclerView>"
  },
  {
    "path": "app/src/main/res/layout/notelist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:minHeight=\"72dp\"\n    android:padding=\"5dp\">\n\n    <TextView\n        android:id=\"@+id/notelist_item_name\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"4\"\n        android:text=\"{name}\"\n        android:textAppearance=\"?android:attr/textAppearanceLarge\"\n        android:textColor=\"@android:color/holo_green_light\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/notelist_item_location\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"4dp\"\n        android:gravity=\"start\"\n        android:orientation=\"horizontal\"\n        android:text=\"{location}\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/notelist_item_name\" />\n\n    <TextView\n        android:id=\"@+id/notelist_item_timestamp\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:text=\"{timestamp}\"\n        android:gravity=\"end\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"4dp\"\n        app:layout_constraintTop_toBottomOf=\"@id/notelist_item_name\"\n        app:layout_constraintLeft_toRightOf=\"@id/notelist_item_location\"/>\n\n    <ImageView\n        android:id=\"@+id/notelist_item_upload_status_icon\"\n        android:layout_width=\"24dp\"\n        android:layout_height=\"24dp\"\n        android:background=\"@null\"\n        android:contentDescription=\"@string/acc.upload_status\"\n        android:duplicateParentState=\"false\"\n        android:padding=\"2dp\"\n        android:src=\"@android:drawable/stat_sys_upload_done\"\n        android:stateListAnimator=\"@null\"\n        app:layout_constraintBaseline_toBaselineOf=\"@id/notelist_item_name\"\n        app:layout_constraintEnd_toEndOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/osm_note_upload.xml",
    "content": "<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fillViewport=\"true\"\n    android:padding=\"16dp\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\">\n\n        <!-- Note Name Label -->\n        <TextView\n            android:id=\"@+id/osm_note_upload_tv_name\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/osm_note_label\"\n            android:textAppearance=\"?android:attr/textAppearanceLarge\"\n            android:textStyle=\"bold\" />\n\n        <!-- Note text content-->\n        <TextView\n            android:id=\"@+id/wplist_item_name\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center_horizontal\"\n            android:text=\"{name}\"\n            android:textAppearance=\"?android:attr/textAppearanceMedium\"\n            android:textColor=\"@android:color/holo_green_light\" />\n\n        <TextView\n            android:id=\"@+id/osm_note_footer\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:gravity=\"center_horizontal\"\n            android:textAppearance=\"?android:attr/textAppearanceSmall\"\n            android:textColor=\"@android:color/holo_green_light\" />\n\n        <!-- Buttons Row -->\n        <LinearLayout\n            style=\"?android:attr/buttonBarStyle\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"8dp\"\n            android:gravity=\"center\"\n            android:orientation=\"horizontal\">\n\n            <Button\n                android:id=\"@+id/osm_note_upload_button_ok\"\n                style=\"?android:attr/buttonBarButtonStyle\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"@string/osm_note_upload_ok\" />\n\n            <Button\n                android:id=\"@+id/osm_note_upload_button_cancel\"\n                style=\"?android:attr/buttonBarButtonStyle\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"8dp\"\n                android:layout_weight=\"1\"\n                android:text=\"@string/osm_note_upload_cancel\" />\n        </LinearLayout>\n\n    </LinearLayout>\n\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/osm_upload.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:orientation=\"vertical\" \n    android:fitsSystemWindows=\"true\">\n\n    <LinearLayout\n        android:id=\"@+id/trackdetail_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/osm_upload_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/osm_upload_ok\" />\n\n        <Button\n            android:id=\"@+id/osm_upload_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/tracklogger_btnBack\" />\n    </LinearLayout>\n\n    <LinearLayout\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"fill_parent\"\n            android:layout_above=\"@id/trackdetail_buttons\"\n            android:orientation=\"vertical\" >\n\n        <include\n                android:layout_width=\"fill_parent\"\n                android:layout_height=\"wrap_content\"\n                layout=\"@layout/trackdetail_fields\" />\n    </LinearLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/osmtracker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    >\n<TextView  \n    android:layout_width=\"fill_parent\" \n    android:layout_height=\"wrap_content\" \n    android:text=\"Empty for the moment. Will be used in future releases as a general menu\"\n    />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/settings_activity.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <FrameLayout\n        android:id=\"@+id/settings\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/trackdetail.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <LinearLayout\n        android:id=\"@+id/trackdetail_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/trackdetail_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/trackdetail_save\" />\n\n        <Button\n            android:id=\"@+id/trackdetail_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/menu_cancel\" />\n    </LinearLayout>\n\n    <LinearLayout\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"fill_parent\"\n        android:layout_above=\"@id/trackdetail_buttons\"\n        android:orientation=\"vertical\" >\n\n        <include\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            layout=\"@layout/trackdetail_fields\" />\n\n        <ListView\n            android:id=\"@+id/trackdetail_list\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"fill_parent\"\n            android:layout_marginBottom=\"5dp\" >\n        </ListView>\n    </LinearLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/trackdetail_fields.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:orientation=\"vertical\"\n    tools:parentTag=\"android.widget.LinearLayout\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/trackdetail_name\" />\n\n    <EditText\n        android:id=\"@+id/trackdetail_item_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginEnd=\"5dp\"\n        android:hint=\"@string/trackdetail_name\"\n        android:inputType=\"text\"\n        android:minHeight=\"48dp\"\n        android:singleLine=\"true\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/trackdetail_description\" />\n\n    <EditText\n        android:id=\"@+id/trackdetail_item_description\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginEnd=\"5dp\"\n        android:hint=\"@string/trackdetail_description\"\n        android:inputType=\"text\"\n        android:minHeight=\"48dp\"\n        android:singleLine=\"false\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/trackdetail_tags\" />\n\n    <EditText\n        android:id=\"@+id/trackdetail_item_tags\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginEnd=\"5dp\"\n        android:hint=\"@string/trackdetail_tags\"\n        android:inputType=\"text\"\n        android:minHeight=\"48dp\"\n        android:singleLine=\"true\" />\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"5dp\"\n        android:layout_marginTop=\"8dp\"\n        android:text=\"@string/trackdetail_visibility\" />\n\n    <Spinner\n        android:id=\"@+id/trackdetail_item_osm_visibility\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"8dp\"\n        android:minHeight=\"48dp\"\n        android:entries=\"@array/prefs_osm_visibility_keys\"\n        style=\"@style/Widget.AppCompat.Spinner.Underlined\" />\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/trackdetail_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:layout_width=\"fill_parent\" android:layout_height=\"wrap_content\"\n\tandroid:orientation=\"vertical\">\n\t<TextView android:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\" style=\"@android:style/TextAppearance.Large\"\n\t\tandroid:text=\"{key}\" android:id=\"@+id/trackdetail_item_key\" android:textColor=\"@android:color/secondary_text_dark\"></TextView>\n\t<TextView android:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\" android:id=\"@+id/trackdetail_item_value\"\n\t\tandroid:text=\"{value}\"></TextView>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/tracklist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n\txmlns:android=\"http://schemas.android.com/apk/res/android\"\n\txmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\txmlns:tools=\"http://schemas.android.com/tools\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:minHeight=\"72dp\"\n\tandroid:padding=\"5dp\"\n\tandroid:stateListAnimator=\"@null\"\n\tandroid:background=\"?android:attr/selectableItemBackground\">\n\n\t<LinearLayout\n\t\tandroid:id=\"@+id/id_container\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:orientation=\"horizontal\"\n\t\tandroid:gravity=\"center_vertical\"\n\t\tapp:layout_constraintStart_toStartOf=\"parent\"\n\t\tapp:layout_constraintTop_toTopOf=\"parent\">\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/trackmgr_item_id_symbol\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:text=\"#\"\n\t\t\tandroid:padding=\"2dp\"\n\t\t\tandroid:textAppearance=\"?android:attr/textAppearanceMedium\"\n\t\t\tandroid:duplicateParentState=\"false\"/>\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/trackmgr_item_id\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:text=\"{id}\"\n\t\t\tandroid:textAppearance=\"?android:attr/textAppearanceMedium\"\n\t\t\tandroid:duplicateParentState=\"false\"/>\n\t</LinearLayout>\n\n\t<TextView\n\t\tandroid:id=\"@+id/trackmgr_item_nameordate\"\n\t\tandroid:layout_width=\"0dp\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_marginStart=\"8dp\"\n\t\tandroid:layout_marginEnd=\"8dp\"\n\t\tandroid:ellipsize=\"none\"\n\t\tandroid:singleLine=\"true\"\n\t\tandroid:textAppearance=\"?android:attr/textAppearanceMedium\"\n\t\tandroid:duplicateParentState=\"false\"\n\t\tapp:layout_constraintStart_toEndOf=\"@id/id_container\"\n\t\tapp:layout_constraintEnd_toStartOf=\"@id/icons_container\"\n\t\tapp:layout_constraintTop_toTopOf=\"parent\"/>\n\n\t<LinearLayout\n\t\tandroid:id=\"@+id/waypoints_container\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_marginStart=\"8dp\"\n\t\tandroid:layout_marginTop=\"4dp\"\n\t\tandroid:orientation=\"horizontal\"\n\t\tapp:layout_constraintStart_toEndOf=\"@id/id_container\"\n\t\tapp:layout_constraintTop_toBottomOf=\"@id/trackmgr_item_nameordate\">\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/trackmgr_item_waypoints\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:text=\"@string/trackmgr_waypoints_count\"\n\t\t\tandroid:textStyle=\"bold\"\n\t\t\tandroid:textAppearance=\"?android:attr/textAppearanceSmall\"\n\t\t\tandroid:duplicateParentState=\"false\"/>\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/trackmgr_item_wps\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_marginStart=\"4dp\"\n\t\t\tandroid:text=\"{x}\"\n\t\t\tandroid:textAppearance=\"?android:attr/textAppearanceSmall\"\n\t\t\tandroid:duplicateParentState=\"false\"/>\n\t</LinearLayout>\n\n\t<TextView\n\t\tandroid:id=\"@+id/trackmgr_item_trackpoints\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_marginStart=\"8dp\"\n\t\tandroid:layout_marginTop=\"4dp\"\n\t\tandroid:text=\"@string/trackmgr_trackpoints_count\"\n\t\tandroid:textStyle=\"bold\"\n\t\tandroid:textAppearance=\"?android:attr/textAppearanceSmall\"\n\t\tandroid:duplicateParentState=\"false\"\n\t\tapp:layout_constraintStart_toEndOf=\"@id/id_container\"\n\t\tapp:layout_constraintTop_toBottomOf=\"@id/waypoints_container\"/>\n\n\t<TextView\n\t\tandroid:id=\"@+id/trackmgr_item_tps\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:layout_marginStart=\"4dp\"\n\t\tandroid:text=\"{y}\"\n\t\tandroid:textAppearance=\"?android:attr/textAppearanceSmall\"\n\t\tandroid:duplicateParentState=\"false\"\n\t\tapp:layout_constraintStart_toEndOf=\"@id/trackmgr_item_trackpoints\"\n\t\tapp:layout_constraintTop_toTopOf=\"@id/trackmgr_item_trackpoints\"\n\t\tapp:layout_constraintBottom_toBottomOf=\"@id/trackmgr_item_trackpoints\"/>\n\n    <TextView\n        android:id=\"@+id/trackmgr_item_notes\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"4dp\"\n        android:text=\"@string/trackmgr_notes_count\"\n        android:textStyle=\"bold\"\n        android:textAppearance=\"?android:attr/textAppearanceSmall\"\n        android:duplicateParentState=\"false\"\n        app:layout_constraintStart_toEndOf=\"@id/id_container\"\n        app:layout_constraintTop_toBottomOf=\"@id/trackmgr_item_trackpoints\"/>\n\n    <TextView\n        android:id=\"@+id/trackmgr_item_notes_count\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"4dp\"\n        android:text=\"{z}\"\n        android:textAppearance=\"?android:attr/textAppearanceSmall\"\n        android:duplicateParentState=\"false\"\n        app:layout_constraintStart_toEndOf=\"@id/trackmgr_item_notes\"\n        app:layout_constraintTop_toTopOf=\"@id/trackmgr_item_notes\"\n        app:layout_constraintBottom_toBottomOf=\"@id/trackmgr_item_notes\"/>\n\n\t<androidx.constraintlayout.widget.ConstraintLayout\n\t\tandroid:id=\"@+id/icons_container\"\n\t\tandroid:layout_width=\"wrap_content\"\n\t\tandroid:layout_height=\"0dp\"\n\t\tandroid:minWidth=\"32dp\"\n\t\tandroid:paddingHorizontal=\"4dp\"\n\t\tandroid:stateListAnimator=\"@null\"\n\t\tandroid:duplicateParentState=\"false\"\n\t\tapp:layout_constraintTop_toTopOf=\"parent\"\n\t\tapp:layout_constraintBottom_toBottomOf=\"parent\"\n\t\tapp:layout_constraintEnd_toEndOf=\"parent\">\n\n\t\t<ImageView\n\t\t\tandroid:id=\"@+id/trackmgr_item_statusicon\"\n\t\t\tandroid:layout_width=\"24dp\"\n\t\t\tandroid:layout_height=\"24dp\"\n\t\t\tandroid:padding=\"2dp\"\n\t\t\tandroid:contentDescription=\"@string/acc.track_status\"\n\t\t\tandroid:src=\"@android:drawable/presence_online\"\n\t\t\tandroid:background=\"@null\"\n\t\t\tandroid:stateListAnimator=\"@null\"\n\t\t\tandroid:duplicateParentState=\"false\"\n\t\t\tapp:layout_constraintTop_toTopOf=\"parent\"\n\t\t\tapp:layout_constraintBottom_toTopOf=\"@id/trackmgr_item_upload_statusicon\"\n\t\t\tapp:layout_constraintStart_toStartOf=\"parent\"\n\t\t\tapp:layout_constraintEnd_toEndOf=\"parent\"/>\n\n\t\t<ImageView\n\t\t\tandroid:id=\"@+id/trackmgr_item_upload_statusicon\"\n\t\t\tandroid:layout_width=\"24dp\"\n\t\t\tandroid:layout_height=\"24dp\"\n\t\t\tandroid:padding=\"2dp\"\n\t\t\tandroid:contentDescription=\"@string/acc.upload_status\"\n\t\t\tandroid:src=\"@android:drawable/stat_sys_upload_done\"\n\t\t\tandroid:background=\"@null\"\n\t\t\tandroid:stateListAnimator=\"@null\"\n\t\t\tandroid:duplicateParentState=\"false\"\n\t\t\tapp:layout_constraintTop_toBottomOf=\"@id/trackmgr_item_statusicon\"\n\t\t\tapp:layout_constraintBottom_toBottomOf=\"parent\"\n\t\t\tapp:layout_constraintStart_toStartOf=\"parent\"\n\t\t\tapp:layout_constraintEnd_toEndOf=\"parent\"/>\n\t</androidx.constraintlayout.widget.ConstraintLayout>\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/tracklogger.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"fill_parent\"\n\tandroid:orientation=\"vertical\" android:layout_height=\"fill_parent\" android:fitsSystemWindows=\"true\">\n\t<net.osmtracker.layout.GpsStatusRecord\n\t\tandroid:id=\"@+id/gpsStatus\" android:layout_width=\"fill_parent\"\n\t\tandroid:layout_height=\"wrap_content\" />\n\n\t<LinearLayout android:id=\"@+id/tracklogger_root\" android:layout_width=\"fill_parent\"\n\t    android:layout_height=\"fill_parent\" android:orientation=\"vertical\"></LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/trackmanager.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\txmlns:tools=\"http://schemas.android.com/tools\"\n\tandroid:orientation=\"vertical\"\n\tandroid:layout_height=\"fill_parent\"\n\tandroid:layout_width=\"fill_parent\"\n\tandroid:fitsSystemWindows=\"true\">\n\n\t<androidx.appcompat.widget.Toolbar\n\t\tandroid:id=\"@+id/my_toolbar\"\n\t\tandroid:layout_width=\"match_parent\"\n\t\tandroid:layout_height=\"?attr/actionBarSize\"\n\t\tandroid:elevation=\"4dp\"\n\t\tandroid:background=\"?attr/colorPrimary\" />\n\n\t<TextView\n\t\tandroid:layout_height=\"wrap_content\"\n\t\tandroid:gravity=\"center_horizontal\"\n\t\tandroid:layout_width=\"fill_parent\"\n\t\tstyle=\"@android:style/TextAppearance.Large\"\n\t\tandroid:text=\"@string/trackmgr_tracklist\"\n\t\tandroid:paddingBottom=\"5dp\"/>\n\n\t<androidx.coordinatorlayout.widget.CoordinatorLayout\n\t\tandroid:layout_width=\"fill_parent\"\n\t\tandroid:layout_height=\"0dp\"\n\t\tandroid:layout_weight=\"1\"\n\t\tandroid:padding=\"3dp\">\n\n\t\t<androidx.recyclerview.widget.RecyclerView\n\t\t\tandroid:id=\"@+id/recyclerview\"\n\t\t\tandroid:layout_width=\"fill_parent\"\n\t\t\tandroid:layout_height=\"fill_parent\"\n\t\t\ttools:listitem=\"@layout/tracklist_item\" />\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/trackmgr_empty\"\n\t\t\tstyle=\"@android:style/TextAppearance.Large\"\n\t\t\tandroid:layout_width=\"fill_parent\"\n\t\t\tandroid:layout_height=\"fill_parent\"\n\t\t\tandroid:gravity=\"center\"\n\t\t\tandroid:padding=\"5dp\"\n\t\t\tandroid:text=\"@string/trackmgr_empty\" />\n\n\t\t<com.google.android.material.floatingactionbutton.FloatingActionButton\n\t\t\tandroid:id=\"@+id/trackmgr_fab\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_gravity=\"end|bottom\"\n\t\t\tandroid:layout_margin=\"16dp\"\n\t\t\tandroid:contentDescription=\"@string/trackmgr_newtrack_hint\"\n\t\t\tandroid:src=\"@drawable/ic_fab_add_track\" />\n\n\t</androidx.coordinatorlayout.widget.CoordinatorLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/upload_github_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:orientation=\"vertical\" >\n\n    <LinearLayout\n        android:id=\"@+id/git_trackdetail_buttons\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/darker_gray\"\n        android:gravity=\"bottom\"\n        android:orientation=\"horizontal\"\n        android:padding=\"3dp\" >\n\n        <Button\n            android:id=\"@+id/git_upload_btn_ok\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/upload_to_github_commit_btn\" />\n\n        <Button\n            android:id=\"@+id/git_upload_btn_cancel\"\n            android:layout_width=\"fill_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_weight=\"1\"\n            android:text=\"@string/tracklogger_btnBack\" />\n    </LinearLayout>\n\n    <include\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"wrap_content\"\n        layout=\"@layout/git_trackdetail_fields\" />\n\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/waypointlist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TableLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\"\n\tandroid:stretchColumns=\"*\">\n\n\t<TableRow\n\t\tandroid:paddingStart=\"5dp\"\n\t\tandroid:paddingEnd=\"5dp\"\n\t\tandroid:layout_marginStart=\"5dp\"\n\t\tandroid:layout_marginEnd=\"5dp\">\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/wplist_item_name\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_weight=\"4\"\n\t\t\tandroid:text=\"{name}\"\n\t\t\tandroid:textColor=\"@android:color/holo_green_light\"\n\t\t\tandroid:textAppearance=\"?android:attr/textAppearanceLarge\" />\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/wplist_item_timestamp\"\n\t\t\tandroid:layout_width=\"wrap_content\"\n\t\t\tandroid:layout_height=\"wrap_content\"\n\t\t\tandroid:layout_weight=\"1\"\n\t\t\tandroid:text=\"{timestamp}\"\n\t\t\tandroid:gravity=\"end\" />\n\t</TableRow>\n\n\t<TableRow\n\t\tandroid:paddingStart=\"5dp\"\n\t\tandroid:paddingEnd=\"5dp\"\n\t\tandroid:layout_marginStart=\"5dp\"\n\t\tandroid:layout_marginEnd=\"5dp\">\n\n\t\t<TextView\n\t\t\tandroid:id=\"@+id/wplist_item_location\"\n\t\t\tandroid:layout_width=\"match_parent\"\n\t\t\tandroid:layout_height=\"match_parent\"\n\t\t\tandroid:text=\"{location}\"\n\t\t\tandroid:layout_span=\"2\"\n\t\t\tandroid:gravity=\"start\" />\n\t</TableRow>\n\n</TableLayout>"
  },
  {
    "path": "app/src/main/res/layout-iw/trackdetail_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:layout_height=\"wrap_content\"\n\tandroid:orientation=\"vertical\" android:layout_width=\"fill_parent\">\n\t<TextView android:layout_height=\"wrap_content\" style=\"@android:style/TextAppearance.Large\"\n\t\tandroid:text=\"{key}\" android:id=\"@+id/trackdetail_item_key\" android:textColor=\"@android:color/secondary_text_dark\" android:layout_gravity=\"right\" android:layout_width=\"wrap_content\"></TextView>\n\t<TextView android:layout_height=\"wrap_content\" android:id=\"@+id/trackdetail_item_value\"\n\t\tandroid:text=\"{value}\" android:layout_gravity=\"right\" android:layout_width=\"wrap_content\"></TextView>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout-iw/tracklist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:gravity=\"left|center_vertical\"\n    android:orientation=\"horizontal\"\n    android:paddingBottom=\"5dp\"\n    android:paddingLeft=\"3dp\"\n    android:paddingRight=\"3dp\"\n    android:paddingTop=\"5dp\" >\n\n    <ImageView android:id=\"@+id/trackmgr_item_upload_statusicon\"\n        android:layout_height=\"fill_parent\" android:layout_width=\"wrap_content\"\n        android:src=\"@android:drawable/stat_sys_upload_done\"\n        android:paddingLeft=\"3dp\"\n        android:layout_marginRight=\"3dp\"\n        android:layout_gravity=\"center_horizontal|center_vertical\"\n        android:paddingRight=\"3dp\"\n        android:contentDescription=\"@string/acc.upload_status\" />\n\n    <ImageView\n        android:id=\"@+id/trackmgr_item_statusicon\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"fill_parent\"\n        android:layout_gravity=\"center_horizontal|center_vertical\"\n        android:layout_marginLeft=\"3dp\"\n        android:paddingLeft=\"3dp\"\n        android:paddingRight=\"3dp\"\n        android:src=\"@android:drawable/presence_online\"\n        android:contentDescription=\"@string/acc.track_status\" >\n    </ImageView>\n\n    <RelativeLayout\n        android:layout_width=\"0dip\"\n        android:layout_height=\"fill_parent\"\n        android:layout_weight=\"1\"\n        android:gravity=\"right|center_vertical\" >\n\n        <TextView\n            android:id=\"@+id/trackmgr_item_nameordate\"\n            style=\"@android:style/TextAppearance.Large\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:text=\"{start_date}\" >\n        </TextView>\n\n        <TextView\n            android:id=\"@+id/trackmgr_item_waypoints\"\n            style=\"@android:style/TextAppearance.Small\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_below=\"@+id/trackmgr_item_nameordate\"\n            android:text=\"@string/trackmgr_waypoints_count\"\n            android:textStyle=\"bold\" >\n        </TextView>\n\n        <TextView\n            android:id=\"@+id/trackmgr_item_wps\"\n            style=\"@android:style/TextAppearance.Small\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/trackmgr_item_nameordate\"\n            android:layout_marginRight=\"3dp\"\n            android:layout_toLeftOf=\"@+id/trackmgr_item_waypoints\"\n            android:text=\"{x}\" >\n        </TextView>\n\n        <TextView\n            android:id=\"@+id/trackmgr_item_trackpoints\"\n            style=\"@android:style/TextAppearance.Small\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/trackmgr_item_nameordate\"\n            android:layout_marginRight=\"15dp\"\n            android:layout_toLeftOf=\"@+id/trackmgr_item_wps\"\n            android:text=\"@string/trackmgr_trackpoints_count\"\n            android:textStyle=\"bold\" >\n        </TextView>\n\n        <TextView\n            android:id=\"@+id/trackmgr_item_tps\"\n            style=\"@android:style/TextAppearance.Small\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@+id/trackmgr_item_nameordate\"\n            android:layout_marginRight=\"3dp\"\n            android:layout_toLeftOf=\"@+id/trackmgr_item_trackpoints\"\n            android:text=\"{y}\" >\n        </TextView>\n    </RelativeLayout>\n\n    <TextView\n        android:id=\"@+id/trackmgr_item_id\"\n        style=\"@android:style/TextAppearance.Medium\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"fill_parent\"\n        android:layout_marginLeft=\"5dp\"\n        android:gravity=\"right|center_vertical\"\n        android:text=\"{id}\" >\n    </TextView>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout-iw/waypointlist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<RelativeLayout\n\txmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:layout_width=\"match_parent\"\n\tandroid:layout_height=\"match_parent\">\n\t<TextView android:layout_width=\"wrap_content\" android:id=\"@+id/wplist_item_timestamp\" android:layout_height=\"wrap_content\" android:text=\"{timestamp}\" android:layout_below=\"@+id/wplist_item_location\" android:layout_alignParentLeft=\"true\" android:layout_marginLeft=\"10dp\"></TextView>\n\t<TextView style=\"@android:style/TextAppearance.Large\" android:layout_width=\"wrap_content\" android:id=\"@+id/wplist_item_name\" android:layout_height=\"wrap_content\" android:text=\"{name}\" android:layout_alignParentTop=\"true\" android:layout_alignParentRight=\"true\"></TextView>\n\t<TextView android:layout_width=\"wrap_content\" android:id=\"@+id/wplist_item_location\" android:layout_height=\"wrap_content\" android:text=\"{location}\" android:layout_below=\"@+id/wplist_item_name\" android:layout_alignParentLeft=\"true\" android:layout_marginLeft=\"10dp\"></TextView>\n</RelativeLayout>\n"
  },
  {
    "path": "app/src/main/res/menu/btnprecb_context_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/cb_update_and_install\"\n        android:title=\"@string/buttons_presets_context_menu_update_install\" />\n    <item\n        android:id=\"@+id/cb_delete\"\n        android:title=\"@string/buttons_presets_context_menu_delete\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/displaytrackmap_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu\n  xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item \n\t\tandroid:id=\"@+id/displaytrackmap_menu_center_to_gps\" \n\t\tandroid:icon=\"@android:drawable/ic_menu_mylocation\"\n\t\tandroid:title=\"@string/menu_center_to_gps\" />\n\t<item android:id=\"@+id/displaytrackmap_menu_settings\"\n\t\tandroid:title=\"@string/menu_settings\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_preferences\"></item>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/github_repository_settings_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\".activity.AvailableLayouts\">\n\n    <item android:id=\"@+id/github_config\"\n        android:icon=\"@android:drawable/ic_menu_manage\"\n        android:showAsAction=\"always\"\n        android:title=\"@string/prefs_ui_github_repository_settings\"\n        android:visible=\"true\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/githubupload_settings_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/git_configuration_credentials_btn\"\n        android:title=\"@string/upload_to_github_configure\"\n        android:icon=\"@android:drawable/ic_menu_preferences\"\n        app:showAsAction=\"ifRoom\"/>\n\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/launch_available_layouts_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/launch_available\"\n        android:icon=\"@android:drawable/ic_input_add\"\n        android:showAsAction=\"always\"\n        android:title=\"@string/prefs_ui_available_layout\"\n        android:visible=\"true\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/note_contextmenu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/notelist_contextmenu_osm_note_upload\"\n        android:title=\"@string/osm_note_bt_upload\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/trackdetail_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n    <item\n        android:id=\"@+id/trackdetail_menu_save\"\n        android:icon=\"@android:drawable/ic_menu_save\"\n        android:title=\"@string/menu_save\"\n        android:showAsAction=\"ifRoom|withText\">\n    </item>\n    <item\n        android:id=\"@+id/trackdetail_menu_cancel\"\n        android:icon=\"@android:drawable/ic_menu_close_clear_cancel\"\n        android:title=\"@string/menu_cancel\">\n    </item>\n    <item\n        android:id=\"@+id/trackdetail_menu_display\"\n        android:icon=\"@android:drawable/ic_menu_compass\"\n        android:title=\"@string/menu_displaytrack\"\n        android:titleCondensed=\"@string/menu_displaytrack\">\n    </item>\n    <item\n        android:id=\"@+id/trackdetail_menu_export\"\n        android:icon=\"@android:drawable/ic_menu_set_as\"\n        android:title=\"@string/menu_export\"\n        android:showAsAction=\"ifRoom|withText\">\n    </item>\n    <item\n        android:id=\"@+id/trackdetail_menu_osm_upload\"\n        android:icon=\"@android:drawable/ic_menu_upload\"\n        android:title=\"@string/menu_osm_upload\">\n    </item>\n    \n</menu>"
  },
  {
    "path": "app/src/main/res/menu/tracklogger_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\txmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item\n\t\tandroid:id=\"@+id/tracklogger_menu_stoptracking\"\n\t\tandroid:title=\"@string/menu_stoptracking\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_save\"\n\t\tandroid:showAsAction=\"ifRoom|withText\" />\n\t<item\n\t\tandroid:id=\"@+id/tracklogger_menu_waypointlist\"\n\t\tandroid:title=\"@string/menu_waypointlist\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_directions\" />\n\t<item\n\t\tandroid:id=\"@+id/tracklogger_menu_displaytrack\"\n\t\tandroid:title=\"@string/menu_displaytrack\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_compass\" />\n\t<item\n\t\tandroid:id=\"@+id/tracklogger_menu_settings\"\n\t\tandroid:title=\"@string/menu_settings\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_preferences\" />\n\t<item\n\t\tandroid:id=\"@+id/tracklogger_menu_about\"\n\t\tandroid:title=\"@string/menu_about\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_help\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/trackmgr_contextmenu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu\n  xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_stop\"\n        android:title=\"@string/trackmgr_contextmenu_stop\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_resume\"\n        android:title=\"@string/trackmgr_contextmenu_resume\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_display\"\n        android:title=\"@string/trackmgr_contextmenu_display\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_details\"\n        android:title=\"@string/trackmgr_contextmenu_details\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_export\"\n        android:title=\"@string/trackmgr_contextmenu_export\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_share\"\n        android:title=\"@string/trackmgr_contextmenu_share\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_osm_upload\"\n        android:title=\"@string/trackmgr_contextmenu_osm_upload\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_git_upload\"\n        android:title=\"@string/trackmgr_contextmenu_github_upload\" />\n    <item\n        android:id=\"@+id/trackmgr_contextmenu_delete\"\n        android:title=\"@string/trackmgr_contextmenu_delete\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/trackmgr_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n\txmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item android:id=\"@+id/trackmgr_menu_newtrack\"\n\t\tandroid:title=\"@string/menu_newtrack\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_add\"\n\t\tapp:showAsAction=\"ifRoom|withText\"/>\n\t<item android:id=\"@+id/trackmgr_menu_continuetrack\"\n\t\tandroid:title=\"@string/menu_continue\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_edit\"\n\t\tandroid:visible=\"false\"\n\t\tapp:showAsAction=\"never\"/>\n\t<item android:id=\"@+id/trackmgr_menu_stopcurrenttrack\"\n\t\tandroid:title=\"@string/menu_stopcurrenttrack\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_close_clear_cancel\"\n\t\tapp:showAsAction=\"never\"/>\n\t<item android:id=\"@+id/trackmgr_menu_deletetracks\"\n\t\tandroid:title=\"@string/menu_deletetracks\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_delete\"/>\n\t<item android:id=\"@+id/trackmgr_menu_exportall\"\n\t    android:title=\"@string/menu_exportall\"\n\t    android:icon=\"@android:drawable/ic_menu_set_as\"/>\n\t<item android:id=\"@+id/trackmgr_menu_settings\"\n\t\tandroid:title=\"@string/menu_settings\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_preferences\"\n\t\tapp:showAsAction=\"never\"/>\n\t<item android:id=\"@+id/trackmgr_menu_about\"\n\t\tandroid:title=\"@string/menu_about\"\n\t\tandroid:icon=\"@android:drawable/ic_menu_help\"\n\t\tapp:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/values/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoom in</string>\n  <string name=\"acc.zoom_out\">Zoom out</string>\n  <string name=\"acc.zoom_center\">Zoom center</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satellite signal strength indicator</string>\n  <string name=\"acc.record_indicator\">Record in progress indicator</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Track status indicator</string>\n  <string name=\"acc.upload_status\">OpenStreetMap upload status indicator</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- Base application colors -->\n    <!-- https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=004D40 -->\n    <color name=\"colorPrimary\">#004d40</color>\n    <color name=\"colorPrimaryDark\">#00251a</color>\n    <color name=\"colorAccent\">#39796b</color>\n    <color name=\"colorPrimaryText\">#ffffff</color>\n\n    <!-- Map buttons -->\n    <color name=\"btnBorder\">#000000</color>\n    <color name=\"map_btnBackground\">#19303234</color>\n    <color name=\"map_onClickBackground\">#303234</color>\n\n\n    <!-- Light Base application colors -->\n    <!-- https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=80CBC4 -->\n    <color name=\"colorPrimaryLight\">#80cbc4</color>\n    <color name=\"colorPrimaryDarkLight\">#4f9a94</color>\n    <color name=\"colorAccentLight\">#b2fef7</color>\n    <color name=\"colorPrimaryTextLight\">#000000</color>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Settings</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS settings</string>\n  <string name=\"prefs_gps_os_settings_summary\">Display system GPS settings screen</string>\n  <string name=\"prefs_check_gps_startup\">Check GPS at startup</string>\n  <string name=\"prefs_check_gps_startup_summary\">Check if GPS is disabled at startup, and offer to enable it</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignore GPS clock</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignore GPS clock and use Android clock for timestamps</string>\n  <string name=\"prefs_use_barometer\">Log barometric pressure [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Toggling requires track restart</string>\n  <string name=\"prefs_notes\">Text notes</string>\n  <string name=\"prefs_notes_summary\">Choose how the values of the Note Text button in layouts will be saved as </string>\n  <string-array name=\"prefs_notes_keys\">\n      <item>Waypoint</item>\n      <item>OSM Note</item>\n      <item>Both</item>\n  </string-array>\n  <string name=\"prefs_gps_logging_interval\">GPS logging interval</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Use 0 for the shortest possible (affects battery life)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">seconds</string>\n  <string name=\"prefs_gps_logging_interval_empty\">GPS logging interval cannot be empty</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS logging distance</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Min. distance between track points in meters, use 0 for the shortest possible</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">meters</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">Min. distance between track points cannot be empty</string>\n  <string name=\"prefs_ui\">User interface</string>\n  <string name=\"prefs_ui_picture_source\">Default photo source</string>\n  <string name=\"prefs_ui_picture_source_summary\">Take photos from camera or gallery?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Camera</item>\n    <item>Gallery</item>\n    <item>Always ask</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Buttons presets</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Choose a custom set of buttons (see docs)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">DEFAULT LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Default</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">DOWNLOADED LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">You don\\'t have downloaded layout files</string>\n  <string name=\"prefs_ui_available_layout\">Available Layouts</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github Repository Settings</string>\n  <string name=\"prefs_ui_orientation\">Orientation</string>\n  <string name=\"prefs_ui_orientation_summary\">Preferred orientation for the button screen</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatic</item>\n    <item>Portrait</item>\n    <item>Landscape</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Voice record duration</string>\n  <string name=\"prefs_voicerec_duration_seconds\">seconds</string>\n  <string name=\"prefs_theme\">Main screen graphic theme</string>\n  <string name=\"prefs_theme_summary\">Application restart required for change to take effect</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS default</item>\n    <item>OS default (dark)</item>\n    <item>OS default (light)</item>\n    <item>High contrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Screen always on</string>\n  <string name=\"prefs_display_always_on_summary\">Screen will stay on while tracking. Disable to save battery</string>\n  <string name=\"prefs_displaytrack_osm\">Background map</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Display OpenStreetMap map under track. Needs a data connection</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Always display OpenStreetMap background? Requires a data connection</string>\n  <string name=\"prefs_output\">GPX settings</string>\n  <string name=\"prefs_storage_dir\">Storage folder in documents</string>\n  <string name=\"prefs_storage_dir_hint\">Effective for the next track (not the current one)</string>\n  <string name=\"prefs_storage_dir_empty\">Storage folder value cannot be empty</string>\n  <string name=\"prefs_output_one_dir_per_track\">One directory per track</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Save each track and associated files to its own directory</string>\n  <string name=\"prefs_output_filename\">Filename for named tracks</string>\n  <string name=\"prefs_output_filename_summary\">Pattern for filename if the track has a name</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Track name</item>\n    <item>Name, start date and time</item>\n    <item>Start date and time, name</item>\n    <item>Start date and time</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Filename label</string>\n  <string name=\"prefs_output_filename_label_summary\">This label will be appended at the end of filename</string>\n  <string name=\"prefs_output_accuracy\">Accuracy in GPX file</string>\n  <string name=\"prefs_output_accuracy_summary\">Add accuracy info in the GPX file, with waypoint name or in waypoint comment</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>None</item>\n    <item>With waypoint name</item>\n    <item>In waypoint comment</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Use HDOP approximation</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Fill HDOP in GPX with an approximation value from accuracy</string>\n  <string name=\"prefs_sound_enabled\">Enable sound</string>\n  <string name=\"prefs_sound_enabled_summary\">Play sounds when voice recording starts and ends</string>\n  <string name=\"prefs_osm_visibility\">Track Visibility</string>\n  <string name=\"prefs_osm_visibility_summary\">Preferred visibility of traces uploaded to openstreetmap.org</string>\n  <string-array name=\"prefs_osm_visibility_keys\">\n    <item>Private</item>\n    <item>Trackable</item>\n    <item>Public</item>\n    <item>Identifiable</item>\n  </string-array>\n  <string name=\"prefs_osm_clear_oauth_data\">Reset OSM authentication</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Forget OSM credentials and permissions and force OSMTracker to ask them again</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">You\\'ll have to authorize OSMTracker to upload tracks again. Are you sure?</string>\n  <string name=\"prefs_map_tile\">Map tile provider</string>\n  <string name=\"prefs_map_tile_summary\">Select the tile provider for rendering the map</string>\n  <string-array name=\"prefs_map_tile_keys\" translatable=\"false\">\n    <item>Mapnik</item>\n    <item>CyclOSM</item>\n    <item>OpenTopo</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>None</item>\n    <item>in comment</item>\n    <item>in extension</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Export compass heading</string>\n  <string name=\"prefs_compass_heading_summary\">Defines if and how the compass data should be exported to the GPX file</string>\n  <string name=\"prefs_reset_default_value\">Reset default value</string>\n  <string name=\"prefs_not_set\">Not set</string>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Misc</string>\n  <string name=\"tag.restriction\">Restriction</string>\n  <string name=\"tag.car\">Car</string>\n  <string name=\"tag.tourism\">Tourism</string>\n  <string name=\"tag.amenity\">Amenity</string>\n  <string name=\"tag.amenity_more\">Amenity (+)</string>\n  <string name=\"tag.way\">Way</string>\n  <string name=\"tag.track\">Track</string>\n  <string name=\"tag.landuse\">Landuse</string>\n  <string name=\"tag.misc_bus_stop\">Bus stop</string>\n  <string name=\"tag.misc_railway\">Railway</string>\n  <string name=\"tag.misc_telephone\">Telephone</string>\n  <string name=\"tag.misc_post_box\">Post box</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">Bollard</string>\n  <string name=\"tag.misc_toilets\">Toilets</string>\n  <string name=\"tag.misc_shelter\">Shelter</string>\n  <string name=\"tag.misc_surveillance\">Surveillance</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">No exit</string>\n  <string name=\"tag.restriction_traffic_light\">Traffic light</string>\n  <string name=\"tag.restriction_one_way\">One way</string>\n  <string name=\"tag.car_fuel_station\">Fuel station</string>\n  <string name=\"tag.car_parking\">Parking</string>\n  <string name=\"tag.car_emergency_phone\">Emergency Phone</string>\n  <string name=\"tag.car_turning_circle\">Turning circle</string>\n  <string name=\"tag.car_speed_camera\">Speed camera</string>\n  <string name=\"tag.tourism_view_point\">View point</string>\n  <string name=\"tag.tourism_information\">Information</string>\n  <string name=\"tag.tourism_picnic\">Picnic site</string>\n  <string name=\"tag.tourism_attraction\">Attraction</string>\n  <string name=\"tag.tourism_theme_park\">Theme park</string>\n  <string name=\"tag.tourism_castle\">Castle</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Bench</string>\n  <string name=\"tag.amenity_water\">Water</string>\n  <string name=\"tag.amenity_pharmacy\">Pharmacy</string>\n  <string name=\"tag.amenity_shop\">Shop</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nDoctors</string>\n  <string name=\"tag.amenity_recycling\">Recycling</string>\n  <string name=\"tag.amenity_place_of_worship\">Place of\\nworship</string>\n  <string name=\"tag.amenity_post_office\">Post office</string>\n  <string name=\"tag.amenity_library\">Library</string>\n  <string name=\"tag.amenitymore_school\">School</string>\n  <string name=\"tag.amenitymore_police\">Police</string>\n  <string name=\"tag.amenitymore_fire_station\">Fire station</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Playground</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast food</string>\n  <string name=\"tag.amenitymore_camp_site\">Camp site</string>\n  <string name=\"tag.way_bridge\">Bridge</string>\n  <string name=\"tag.way_zebra_crossing\">Zebra crossing</string>\n  <string name=\"tag.way_motorway\">Motorway</string>\n  <string name=\"tag.way_trunk\">Trunk</string>\n  <string name=\"tag.way_primary\">Primary</string>\n  <string name=\"tag.way_secondary\">Secondary</string>\n  <string name=\"tag.way_tertiary\">Tertiary</string>\n  <string name=\"tag.way_residential\">Residential</string>\n  <string name=\"tag.way_service\">Service</string>\n  <string name=\"tag.track_track\">Track</string>\n  <string name=\"tag.track_cycleway\">Cycleway</string>\n  <string name=\"tag.track_footway\">Footway</string>\n  <string name=\"tag.track_bridleway\">Bridleway</string>\n  <string name=\"tag.track_steps\">Steps</string>\n  <string name=\"tag.track_living_street\">Living street</string>\n  <string name=\"tag.track_pedestrian\">Pedestrian</string>\n  <string name=\"tag.track_grade1\">Grade 1</string>\n  <string name=\"tag.track_grade2\">Grade 2</string>\n  <string name=\"tag.track_grade3\">Grade 3</string>\n  <string name=\"tag.track_grade4\">Grade 4</string>\n  <string name=\"tag.track_grade5\">Grade 5</string>\n  <string name=\"tag.landuse_farm\">Farm</string>\n  <string name=\"tag.landuse_landfill\">Landfill</string>\n  <string name=\"tag.landuse_basin\">Basin</string>\n  <string name=\"tag.landuse_reservoir\">Reservoir</string>\n  <string name=\"tag.landuse_forest\">Forest</string>\n  <string name=\"tag.landuse_allotments\">Allotments</string>\n  <string name=\"tag.landuse_cemetery\">Cemetery</string>\n  <string name=\"tag.landuse_recreation_ground\">Recreation\\nground</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspired by OSMTracker on Windows Mobile, it allows you to track your journeys, mark significant way points (Voice recording, photos), export them in GPX format for later use with Open Street Map tools like JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Track logger</string>\n  <string name=\"tracklogger_waiting_gps\">Waiting for GPS fix to enable buttons…</string>\n  <string name=\"tracklogger_voicerec_title\">Voice recording</string>\n  <string name=\"tracklogger_voicerec_text\">Recording a {0}s audio clip.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stop</string>\n  <string name=\"tracklogger_btnBack\">Back</string>\n  <string name=\"tracklogger_tracked\">Tracked: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS disabled</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS is disabled. Do you want to enable it?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Gallery or camera?</string>\n  <string name=\"tracklogger_camera\">Take photo with camera</string>\n  <string name=\"tracklogger_gallery\">Select photo from gallery</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Waypoint list</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Accur: </string>\n  <string name=\"wplist_compass\">Comp. head.:</string>\n  <string name=\"wplist_compass_accuracy\">Comp. accur.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Track manager</string>\n  <string name=\"trackmgr_tracklist\">Track list:</string>\n  <string name=\"trackmgr_waypoints_count\">Waypoints: </string>\n  <string name=\"trackmgr_trackpoints_count\">Trackpoints: </string>\n  <string name=\"trackmgr_notes_count\">Notes: </string>\n  <string name=\"trackmgr_empty\">You don\\'t have any tracks.</string>\n  <string name=\"trackmgr_newtrack_hint\">Press to record a new track.</string>\n  <string name=\"trackmgr_newtrack_error\">Unable to create a new track: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">You are currently recording <b>track #{0}</b>\\nChoose it in the list to continue</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stop tracking</string>\n  <string name=\"trackmgr_contextmenu_resume\">Resume tracking</string>\n  <string name=\"trackmgr_contextmenu_delete\">Delete</string>\n  <string name=\"trackmgr_contextmenu_export\">Export</string>\n  <string name=\"trackmgr_contextmenu_share\">Share</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Upload to OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Upload to GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Display</string>\n  <string name=\"trackmgr_contextmenu_details\">Details</string>\n  <string name=\"trackmgr_contextmenu_title\">Track #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Track #{0} will be deleted</string>\n  <string name=\"trackmgr_deleteall_confirm\">All tracks will be deleted. Are you sure?</string>\n  <string name=\"trackmgr_exporting\">Exporting track #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Preparing export…</string>\n  <string name=\"trackmgr_export_error\">Unable to export track: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">All tracks will be exported, which could take a long time. Are you sure?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Unable to process the track: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Track Details</string>\n  <string name=\"trackdetail_startdate\">Start time:</string>\n  <string name=\"trackdetail_enddate\">End time:</string>\n  <string name=\"trackdetail_startloc\">Starts at:</string>\n  <string name=\"trackdetail_endloc\">Ends at:</string>\n  <string name=\"trackdetail_exportdate\">Exported:</string>\n  <string name=\"trackdetail_osm_upload_date\">Uploaded to OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Export as GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Not exported yet)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Not uploaded yet)</string>\n  <string name=\"trackdetail_export_display\">Display</string>\n  <string name=\"trackdetail_name\">Name</string>\n  <string name=\"trackdetail_description\">Description</string>\n  <string name=\"trackdetail_tags\">Tags (comma separated)</string>\n  <string name=\"trackdetail_description_mandatory\">You must enter a description</string>\n  <string name=\"trackdetail_visibility\">Visibility</string>\n  <string name=\"osm_visibility_private\">Private</string>\n  <string name=\"osm_visibility_public\">Public</string>\n  <string name=\"osm_visibility_trackable\">Trackable</string>\n  <string name=\"osm_visibility_identifiable\">Identifiable</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap upload</string>\n  <string name=\"osm_upload_ok\">Save and upload</string>\n  <string name=\"osm_upload_tmpfile_failed\">Unable to export the track to a temporary file</string>\n  <string name=\"osm_upload_oauth_failed\">Unable to authenticate to OSM</string>\n  <string name=\"osm_upload_sending\">Sending track #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Waiting for OpenStreetMap server response…</string>\n  <string name=\"osm_upload_error\">Error while uploading track</string>\n  <string name=\"osm_upload_bad_response\">The OSM server returned an error: ({0}) message {1}</string>\n  <string name=\"osm_upload_unauthorized\">Authorization error. Would you like to clear the saved OpenStreetMap credentials?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap upload succeeded</string>\n  <!-- OSM Notes Upload -->\n  <string name=\"osm_note_upload\">OpenStreetMap notes upload</string>\n  <string name=\"osm_note_upload_error\">Error while uploading note</string>\n  <string name=\"osm_note_label\">Note text</string>\n  <string name=\"osm_note_upload_ok\">Upload</string>\n  <string name=\"osm_note_upload_cancel\">Cancel</string>\n  <string name=\"osm_note_footer\">via %1$s %2$s</string>\n  <string name=\"osm_note_upload_unauthorized\">Authorization error. If you previously granted the app permission to upload traces, you must clear your saved credentials in order to authorize the app to upload traces and <b>notes</b>. Would you like to clear your saved OpenStreetMap credentials?</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Voice record</string>\n  <string name=\"gpsstatus_record_stillimage\">Take photo</string>\n  <string name=\"gpsstatus_record_textnote\">Text note</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Waypoint Name/text</string>\n  <string name=\"waypoint_name_hint\">Enter waypoint name</string>\n  <string name=\"edit_waypoint_bt_preview\">Open file</string>\n  <string name=\"edit_waypoint_bt_save\">Save</string>\n  <string name=\"edit_waypoint_bt_delete\">Delete</string>\n  <string name=\"edit_waypoint_bt_cancel\">Cancel</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Delete waypoint</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Delete this waypoint?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Delete</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Cancel</string>\n  <!-- osm Notes-->\n  <string name=\"note_name_label\">Note Name/text</string>\n  <string name=\"edit_note_bt_update\">Save</string>\n  <string name=\"edit_note_bt_delete\">Delete</string>\n  <string name=\"edit_note_bt_cancel\">Cancel</string>\n  <string name=\"delete_note_confirm_dialog_title\">Delete note</string>\n  <string name=\"delete_note_confirm_dialog_msg\">Delete this note?</string>\n  <string name=\"delete_note_confirm_bt_ok\">Delete</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Cancel</string>\n  <string name=\"notelist\">Note list</string>\n  <string name=\"osm_note_bt_upload\">Upload as OSM note</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Settings</string>\n  <string name=\"menu_waypointlist\">Waypoints</string>\n  <string name=\"menu_about\">About</string>\n  <string name=\"menu_displaytrack\">Display track</string>\n  <string name=\"menu_stoptracking\">Stop &amp; save</string>\n  <string name=\"menu_newtrack\">New track</string>\n  <string name=\"menu_deletetracks\">Delete all tracks</string>\n  <string name=\"menu_continue\">Continue track</string>\n  <string name=\"menu_stopcurrenttrack\">Stop current track</string>\n  <string name=\"menu_save\">Save</string>\n  <string name=\"menu_cancel\">Cancel</string>\n  <string name=\"menu_export\">Export as GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap upload</string>\n  <string name=\"menu_center_to_gps\">Center to GPS</string>\n  <string name=\"menu_exportall\">Export all as GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Unable to write to external storage.</string>\n  <string name=\"error_create_track_dir\">Unable to create track folder %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Please check if ext. storage is correctly inserted and mounted.</string>\n  <string name=\"error_voicerec_failed\">Voice recording has failed</string>\n  <string name=\"error_userlayout_parsing\">Error while parsing XML layout file. Please revert to default layout.</string>\n  <string name=\"error_gh_token_lenght\">Token must be 40 characters</string>\n  <string name=\"error_gh_pr_creation\">Error while creating the PR</string>\n  <!--messages-->\n  <string name=\"permission_required\">Permission required</string>\n  <string name=\"storage_permission_for_export_GPX\">To export the GPX trace we need to write on the storage.</string>\n  <string name=\"storage_permission_for_display_track\">To display the track properly we need access to the storage.</string>\n  <string name=\"storage_permission_for_share_track\">To share the track properly we need access to the storage.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">To upload the track to OSM we need access to the storage.</string>\n  <string name=\"acccept\">Accept</string>\n  <string name=\"gps_perms_required\">Can\\'t continue without GPS permission</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracked with OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Warning: HDOP values aren\\'t the HDOP as returned by the GPS device. They\\'re approximated from the location accuracy in meters.</string>\n  <!--About screen-->\n  <string name=\"about\">About</string>\n  <string name=\"about_text\">For more information, docs and issue report, please visit the project home page:</string>\n  <string name=\"about_translate_text\">Help translating OSMTracker:</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <string name=\"about_export_db\">Export database</string>\n  <string name=\"about_exporting_db\">Exporting database…</string>\n  <string name=\"about_export_db_result\">Database export result: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker is tracking</string>\n  <string name=\"notification_title\">OSMTracker is tracking (#{0})</string>\n  <string name=\"notification_text\">Tap here to display main screen</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Display track</string>\n  <string name=\"displaytrack_map\">Display background map</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Save</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Accuracy</string>\n  <string name=\"various_accuracy_with_sats\">Accuracy {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Waiting for GPS fix… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Wait for heading…</string>\n  <string name=\"various_heading_unknown\">Heading can\\'t be determined</string>\n  <string name=\"various_export_finished\">Export process finished successfully</string>\n  <string name=\"various_waiting_position\">Position not available</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap track display</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Update &amp; Install</string>\n  <string name=\"buttons_presets_context_menu_delete\">Delete</string>\n  <string name=\"buttons_presets_updating_layout\">Updating…</string>\n  <string name=\"buttons_presets_successful_update\">Layout was updated successfully</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Layout was not updated, try again later</string>\n  <string name=\"buttons_presets_delete_message\">Are you sure to delete the {0} layout?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Yes</string>\n  <string name=\"buttons_presets_successful_delete\">The layout was deleted successfully</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">The icon directory was deleted successfully</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">This file didn\\'t have any icon directory associated</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">The layout could not be deleted</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Error: unable to connect to the Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Error: unable to connect to the default custom layouts repository</string>\n  <string name=\"available_layouts_connecting_message\">(Connecting…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Download</string>\n  <string name=\"available_layouts_not_available_language\">Your language is not available select one from the list</string>\n  <string name=\"available_layouts_language_dialog_title\">Available Languages</string>\n  <string name=\"available_layouts_checking_language_dialog\">Checking local language versions</string>\n  <string name=\"available_layouts_downloading_dialog\">Downloading…</string>\n  <string name=\"available_layouts_successful_download\">The layout was downloaded successfully</string>\n  <string name=\"available_layouts_unsuccessful_download\">The layout can\\'t be downloaded, try again later</string>\n  <string name=\"available_layouts_null_response_received\">Error retrieving data from server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Default</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Custom</string>\n  <string name=\"github_repository_settings_username\">Github username: </string>\n  <string name=\"github_repository_settings_repository_name\">Repository name: </string>\n  <string name=\"github_repository_settings_branch_name\">Branch name: </string>\n  <string name=\"github_repository_settings_valid_server\">Github Repository valid</string>\n  <string name=\"github_repository_settings_invalid_server\">Github Repository invalid</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">successfully created</string>\n  <string name=\"error_creating\">Error creating</string>\n  <string name=\"db_error\">Database error</string>\n  <string name=\"successfully_saved\">successfully saved</string>\n  <string name=\"saving_error\">Saving error</string>\n  <string name=\"pr_status\">Pull request status: </string>\n  <string name=\"repository_information_error\">Error with repository information</string>\n  <string name=\"successfully_uploaded\">Successfully uploaded</string>\n  <string name=\"error_uploading\">Error uploading</string>\n  <string name=\"gpx_file_read_error\">Error reading the GPX file</string>\n  <string name=\"gpx_file_not_found\">GPX file not found</string>\n  <string name=\"uploading_file\">Uploading file: </string>\n  <string name=\"item_selected\">Item Selected: </string>\n  <string name=\"github_repository_private\">Private: </string>\n  <string name=\"github_creating_repository\">Creating repository</string>\n  <string name=\"github_no_repository_name\">You must specify a repository name</string>\n  <string name=\"error_field_required\">You must specify a value for this field</string>\n  <string name=\"retrieving_repositories\">Retrieving repositories...</string>\n  <string name=\"error_retrieving_repositories\">Error retrieving repositories</string>\n  <string name=\"successfully_retrieved_repositories\">Successfully retrieved repositories</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Configure</string>\n  <string name=\"github_token_placeholder\">GitHub token:</string>\n  <string name=\"github_get_token_btn\">Get token</string>\n  <string name=\"how_to_get_ghToken_guide_title\">How to get a GitHub Token:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Click the button to open the GitHub website and create a token. Sign In with your GitHub account if needed.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Select \\\"Tokens (Classic)\\\" and click \\\"Generate new token\\\" button.</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Assign a descriptive name to your token.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Select an expiration date. We recommend \\\"No expiration\\\" to avoid repeating this step.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Select the scope or permissions you want to grant for this token (OSMTracker just need the repo permission).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Click the \\\"Generate token\\\" button.</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Copy the generated token and paste it in the field \\\"GitHub token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ You can save blank to delete your credentials.</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Commit message:</string>\n  <string name=\"upload_to_github_create_fork\">Create\\nfork</string>\n  <string name=\"upload_to_github_open_pull_request\">Open pull request</string>\n  <string name=\"upload_to_github_select_repo\">Select a repository</string>\n  <string name=\"upload_to_github_create_repository\">Create repository</string>\n  <string name=\"upload_to_github_commit_btn\">Commit</string>\n  <string name=\"upload_to_github_configure\">Configure</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Original Repository Username</string>\n  <string name=\"upload_to_github_forked_repo_name\">Original Repository Name</string>\n  <string name=\"create\">Create</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Pull Request Title</string>\n  <string name=\"upload_to_github_pr_description\">Pull Request Description</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker for Android™ Introduction</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Welcome to OSMTracker for Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">This App is free software that respects your freedom!</string>\n  <!--Intro - slide What's new-->\n  <string name=\"app_intro_slide_whats_new_title\">What\\'s new in this version?</string>\n  <string name=\"app_intro_slide_whats_new_description\">Now we can upload notes to OSM, and CyclOSM and OpenTopo map tiles are available again. Enjoy! </string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Happy tracking 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker for Android will use your GPS location to record trackpoints and waypoints, even when the App is running in background.\n\\nYour data is not used to support ads.</string>\n  <string name=\"no_app_to_handle_file_type\">No application was found to open this file.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.NoActionBar\">\n        <!-- Customize your theme here.\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n        -->\n\n    </style>\n\n    <!-- Base application theme. -->\n    <style name=\"AppThemeLight\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here\n        <item name=\"colorPrimary\">@color/colorPrimaryLight</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDarkLight</item>\n        <item name=\"colorAccent\">@color/colorAccentLight</item>\n        -->\n    </style>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/theme_highcontrast.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<style name=\"HighContrast\" parent=\"@android:style/Theme\">\n\t\t<!-- item name=\"android:background\">#ffffff</item -->\n\t\t<item name=\"android:buttonStyle\">@style/Widget.Button</item>\n\t\t<item name=\"android:buttonStyleToggle\">@style/Widget.Button.Toggle</item>\n\t</style>\n\n\t<style name=\"Widget.Button\" parent=\"@android:style/Widget.Button\">\n\t\t<item name=\"android:background\">@drawable/theme_highcontrast_btn</item>\n\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n\t<style name=\"Widget.Button.Toggle\" parent=\"@android:style/Widget.Button.Toggle\">\n\t\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"DefaultTheme\" parent=\"@android:style/Theme\"/>\n    <style name=\"DarkTheme\" parent=\"@android:style/Theme.Black\"/>\n    <style name=\"LightTheme\" parent=\"@android:style/Theme.Light\"/>\n    <style name=\"AppCompat\" parent=\"@style/Theme.AppCompat.Light.NoActionBar\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/values-preferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n\t<string-array name=\"prefs_ui_picture_source_values\">\n\t\t<item>camera</item>\n\t\t<item>gallery</item>\n\t\t<item>ask</item>\n\t</string-array>\n\n\t<string-array name=\"prefs_ui_orientation_options_values\">\n\t\t<item>none</item>\n\t\t<item>portrait</item>\n\t\t<item>landscape</item>\n\t</string-array>\n\n\t<string-array name=\"prefs_voicerec_durations\">\n\t\t<item>2</item>\n\t\t<item>3</item>\n\t\t<item>4</item>\n\t\t<item>5</item>\n\t\t<item>10</item>\n\t\t<item>20</item>\n\t\t<item>30</item>\n\t</string-array>\n\n\t<string-array name=\"prefs_theme_values\">\n\t\t<item>net.osmtracker:style/DefaultTheme</item>\n\t\t<item>net.osmtracker:style/DarkTheme</item>\n\t\t<item>net.osmtracker:style/LightTheme</item>\n\t\t<item>net.osmtracker:style/HighContrast</item>\n\t</string-array>\n\n\t<string-array name=\"prefs_output_filename_values\">\n\t\t<item>name</item>\n\t\t<item>name_date</item>\n\t\t<item>date_name</item>\n\t\t<item>date</item>\n\t</string-array>\n\t\n\t<string-array name=\"prefs_output_accuracy_values\">\n\t\t<item>none</item>\n\t\t<item>wpt_name</item>\n\t\t<item>wpt_cmt</item>\n\t</string-array>\n\t\n\t<string-array name=\"prefs_map_tile_values\">\n\t\t<item>Mapnik</item>\n\t\t<item>CyclOSM</item>\n\t\t<item>OpenTopoMap</item>\n\t</string-array>\n\n\t<string-array name=\"prefs_compass_heading_values\">\n\t\t<item>none</item>\n\t\t<item>comment</item>\n\t\t<item>extension</item>\n\t</string-array>\n\n    <string-array name=\"prefs_osm_visibility_values\" translatable=\"false\">\n        <item>Private</item>        <!-- Matches Track.OSMVisibility.Private -->\n        <item>Trackable</item>      <!-- Matches Track.OSMVisibility.Trackable -->\n        <item>Public</item>         <!-- Matches Track.OSMVisibility.Public -->\n        <item>Identifiable</item>   <!-- Matches Track.OSMVisibility.Identifiable -->\n    </string-array>\n\n    <string-array name=\"prefs_notes_values\" translatable=\"false\">\n        <item>waypoint</item>\n        <item>osm_note</item>\n        <item>both</item>\n    </string-array>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/values.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n\t<string name=\"about_link\"><a href=\"https://github.com/labexp/osmtracker-android\">https://github.com/labexp/osmtracker-android</a></string>\n    <string name=\"about_translate_link\">https://explore.transifex.com/labexp/osmtracker-android/</string>\n    \n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Voice recording</string>\n  <string name=\"wpt_stillimage\">Photo</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">شعار OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">تكبير</string>\n  <string name=\"acc.zoom_out\">تصغير</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">مؤشر قوة إشارة القمر الإصطناعي</string>\n  <string name=\"acc.record_indicator\">مؤشر التقدم في التسجيل</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">مؤشر حالة المسار</string>\n  <string name=\"acc.upload_status\">مؤشر حالة التحميل لـ OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">الاعدادت</string>\n  <string name=\"prefs_gps\">نظام تحديد الموقع</string>\n  <string name=\"prefs_gps_os_settings\">اعدادات نظام تحديد الموقع</string>\n  <string name=\"prefs_gps_os_settings_summary\">عرض شاشة اعدادات نظام تحديد المواقع</string>\n  <string name=\"prefs_check_gps_startup\">التحقق من تشغيل نظام تحديد المواقع عند البدأ</string>\n  <string name=\"prefs_check_gps_startup_summary\">تحقق مما إذا كان نظام تحديد المواقع معطلاً عند بدء التشغيل، ونبهني لتمكينه</string>\n  <string name=\"prefs_gps_ignore_clock\">تجاهل ساعة نظام تحديد المواقع</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">تجاهل ساعة نظام تحديد المواقع واستخدم ساعة نظام أندرويد لتسجيل الفترات الزمنية</string>\n  <string name=\"prefs_use_barometer\">سجل الضغط الجوي [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">للتغير لابد من إعادة تشغيل المسار</string>\n  <string name=\"prefs_gps_logging_interval\">الفاصل الزمني لتسجيل التتبع من نظام تحديد المواقع</string>\n  <string name=\"prefs_gps_logging_interval_summary\">استخدم 0 لأقصر وقت ممكن (يؤثر على عمر البطارية)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">ثوان</string>\n  <string name=\"prefs_gps_logging_min_distance\">مسافة تسجيل الـGPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">أقل مسافة بين النقاط المسجلة للمسار بالأمتار، استخدم 0 لأقصر مسافة ممكنة</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">متر/أمتار</string>\n  <string name=\"prefs_ui\">واجهة المستخدم</string>\n  <string name=\"prefs_ui_picture_source\">مصدر الصورة اﻹفتراضي</string>\n  <string name=\"prefs_ui_picture_source_summary\">التقاط الصور من الكاميرا أو مستكشف الصور؟</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>الكاميرا</item>\n    <item>مستكشف الصور</item>\n    <item>إسأل دائما</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">ضبط الأزرار</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">اختر مجموعة مخصصة من الأزرار (انظر المستندات والتعليمات)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">التخطيط الافتراضي</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">الافتراضي</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">التخطيط الذي تم تنزيله</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">ليس لديك ملفات تخطيط تم تنزيلها</string>\n  <string name=\"prefs_ui_available_layout\">التخطيطات المتوفرة</string>\n  <string name=\"prefs_ui_github_repository_settings\">إعدادات مستودع Github</string>\n  <string name=\"prefs_ui_orientation\">الإتجاه</string>\n  <string name=\"prefs_ui_orientation_summary\">الاتجاه المفضل لزر الشاشة</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>تلقائي</item>\n    <item>أفقي</item>\n    <item>عامودي</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">مدة التسجيل الصوتي</string>\n  <string name=\"prefs_voicerec_duration_seconds\">ثوان</string>\n  <string name=\"prefs_theme\">سمة الشاشة الرئيسية</string>\n  <string name=\"prefs_theme_summary\">لابد من إعادة تشغيل التطبيق حتى يدخل التغيير حيز التنفيذ</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>حسب نظام التشغيل</item>\n    <item>حسب نظام التشغيل (ظلام)</item>\n    <item>حسب نظام التشغيل (نهاري)</item>\n    <item>تباين عالي</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">جعل الشاشة قيد التشغيل دائمًا</string>\n  <string name=\"prefs_display_always_on_summary\">ستبقى الشاشة قيد التشغيل أثناء التتبع. عطل هذا الخيار لتوفير البطارية</string>\n  <string name=\"prefs_displaytrack_osm\">الخريطة الخلفية</string>\n  <string name=\"prefs_displaytrack_osm_summary\">اعرض خريطة الشارع المفتوحة أسفل المسار. لابد من وجود اتصال بالانترنت</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">عرض خلفية خريطة الشارع المفتوحة بشكل دائمًا؟ لابد من وجود اتصال بالانترنت</string>\n  <string name=\"prefs_output\">إعدادات GPX</string>\n  <string name=\"prefs_storage_dir_hint\">فعال للمسار التالي (ليس المسار الحالي)</string>\n  <string name=\"prefs_output_one_dir_per_track\">دليل واحد لكل مسار</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">احفظ كل مسار والملفات المرتبطة به في الدليل الخاص به</string>\n  <string name=\"prefs_output_filename\">اسم الملف للمسارات المسماة</string>\n  <string name=\"prefs_output_filename_summary\">نمط اسم الملف إذا كان للمسار اسم</string>\n  <string name=\"prefs_output_accuracy\">الدقة في ملف GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">أضف وسجل معلومات الدقة في ملف GPX ، مع اسم الإحداثية أو تعليق الإحداثية</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>لا شيء</item>\n    <item>مع اسم الإحداثية</item>\n    <item>في تعليقات الإحداثية</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">استخدم تقريب HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">قم بتعبئة بيانات HDOP في GPX بقيمة تقريبية من الدقة</string>\n  <string name=\"prefs_sound_enabled\">فعل الصوت</string>\n  <string name=\"prefs_sound_enabled_summary\">تشغيل الأصوات عندما يبدأ التسجيل الصوتي وينتهي</string>\n  <string name=\"prefs_osm_clear_oauth_data\">إعادة تعيين مصادقة الدخول إلى OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">ننسى بيانات اعتماد OSM والأذونات وأجبر OSMTracker على طلبها مرة أخرى</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">لابد من السماح لـOSMTracker برفع المسارات مرة أخرى. هل أنت متأكد؟</string>\n  <string name=\"prefs_map_tile\">مزود الصور المتجانبة للخريطة</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>لا شيء</item>\n    <item>في التعليق</item>\n    <item>في الملحق</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">تصدير بيانات البوصلة</string>\n  <string name=\"prefs_compass_heading_summary\">يحدد ما إذا كان ينبغي تصدير بيانات البوصلة إلى ملف GPX وكيفية ذلك</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">منوعات</string>\n  <string name=\"tag.restriction\">قيود</string>\n  <string name=\"tag.car\">سيارة</string>\n  <string name=\"tag.tourism\">سياحة</string>\n  <string name=\"tag.amenity\">مرفق</string>\n  <string name=\"tag.amenity_more\">مرفق (+)</string>\n  <string name=\"tag.way\">طريق</string>\n  <string name=\"tag.track\">مسلك</string>\n  <string name=\"tag.landuse\">استخدام الأراضي</string>\n  <string name=\"tag.misc_bus_stop\">محطة حافلة</string>\n  <string name=\"tag.misc_railway\">سكة حديدية</string>\n  <string name=\"tag.misc_telephone\">هاتف</string>\n  <string name=\"tag.misc_post_box\">صندوق بريد</string>\n  <string name=\"tag.misc_atm\">صراف آلي</string>\n  <string name=\"tag.misc_bollard\">مربط حبال</string>\n  <string name=\"tag.misc_toilets\">دورات مياه</string>\n  <string name=\"tag.misc_shelter\">مأوى</string>\n  <string name=\"tag.misc_surveillance\">مراقبة</string>\n  <string name=\"tag.restriction_20\">الحد الأقصى 20</string>\n  <string name=\"tag.restriction_30\">الحد الأقصى 30</string>\n  <string name=\"tag.restriction_40\">الحد الأقصى 40</string>\n  <string name=\"tag.restriction_50\">الحد الأقصى 50</string>\n  <string name=\"tag.restriction_60\">الحد الأقصى 60</string>\n  <string name=\"tag.restriction_70\">الحد الأقصى 70</string>\n  <string name=\"tag.restriction_80\">الحد الأقصى 80</string>\n  <string name=\"tag.restriction_90\">الحد الأقصى 90</string>\n  <string name=\"tag.restriction_100\">الحد الأقصى 100</string>\n  <string name=\"tag.restriction_110\">الحد الأقصى 110</string>\n  <string name=\"tag.restriction_120\">الحد الأقصى 120</string>\n  <string name=\"tag.restriction_130\">الحد الأقصى 130</string>\n  <string name=\"tag.restriction_no_exit\">بدون مخرج</string>\n  <string name=\"tag.restriction_traffic_light\">إشارة ضوئية</string>\n  <string name=\"tag.restriction_one_way\">إتجاه واحد</string>\n  <string name=\"tag.car_fuel_station\">محطة وقود</string>\n  <string name=\"tag.car_parking\">مأوى سيارات</string>\n  <string name=\"tag.car_emergency_phone\">هاتف للطوارئ</string>\n  <string name=\"tag.car_turning_circle\">تدوير دائرة</string>\n  <string name=\"tag.car_speed_camera\">رادار أوتوماتيكي</string>\n  <string name=\"tag.tourism_view_point\">نقطة مشاهدة</string>\n  <string name=\"tag.tourism_information\">معلومات</string>\n  <string name=\"tag.tourism_picnic\">موقع نزهة</string>\n  <string name=\"tag.tourism_attraction\">معلم</string>\n  <string name=\"tag.tourism_theme_park\">حديقة ملاهي</string>\n  <string name=\"tag.tourism_castle\">قلعة</string>\n  <string name=\"tag.tourism_monument\">معلم تذكاري</string>\n  <string name=\"tag.tourism_museum\">متحف</string>\n  <string name=\"tag.tourism_cinema\">قاعة سينما</string>\n  <string name=\"tag.amenity_bench\">مقعد</string>\n  <string name=\"tag.amenity_water\">ماء</string>\n  <string name=\"tag.amenity_pharmacy\">صيدلية</string>\n  <string name=\"tag.amenity_shop\">متجر</string>\n  <string name=\"tag.amenity_marina\">مارينا</string>\n  <string name=\"tag.amenity_sport\">رياضة</string>\n  <string name=\"tag.amenity_taxi\">تاكسي</string>\n  <string name=\"tag.amenity_doctors\">مستشفيات\\nو أطباء</string>\n  <string name=\"tag.amenity_recycling\">إعادة التصنيع</string>\n  <string name=\"tag.amenity_place_of_worship\">مكان عبادة</string>\n  <string name=\"tag.amenity_post_office\">مكتب بريد</string>\n  <string name=\"tag.amenity_library\">مكتبة</string>\n  <string name=\"tag.amenitymore_school\">مدرسة</string>\n  <string name=\"tag.amenitymore_police\">شرطة</string>\n  <string name=\"tag.amenitymore_fire_station\">محطة إطفاء</string>\n  <string name=\"tag.amenitymore_bank\">بنك</string>\n  <string name=\"tag.amenitymore_playground\">ملعب للأطفال</string>\n  <string name=\"tag.amenitymore_pub\">حانة</string>\n  <string name=\"tag.amenitymore_hotel\">فندق</string>\n  <string name=\"tag.amenitymore_motel\">نزل</string>\n  <string name=\"tag.amenitymore_hostel\">بيت شباب</string>\n  <string name=\"tag.amenitymore_restaurant\">مطعم</string>\n  <string name=\"tag.amenitymore_fastfood\">مطعم سريع</string>\n  <string name=\"tag.amenitymore_camp_site\">مخيم</string>\n  <string name=\"tag.way_bridge\">جسر</string>\n  <string name=\"tag.way_zebra_crossing\">معبر مشاة</string>\n  <string name=\"tag.way_motorway\">طريق سيارة</string>\n  <string name=\"tag.way_trunk\">طريق سريع</string>\n  <string name=\"tag.way_primary\">رئيسي</string>\n  <string name=\"tag.way_secondary\">ثانوي</string>\n  <string name=\"tag.way_tertiary\">فرعي</string>\n  <string name=\"tag.way_residential\">سكني</string>\n  <string name=\"tag.way_service\">خدمة</string>\n  <string name=\"tag.track_track\">مسلك</string>\n  <string name=\"tag.track_cycleway\">مسلك دراجات</string>\n  <string name=\"tag.track_footway\">طريق للمشاة</string>\n  <string name=\"tag.track_bridleway\">لوحة اتجاه</string>\n  <string name=\"tag.track_steps\">درج</string>\n  <string name=\"tag.track_living_street\">شارع الحي</string>\n  <string name=\"tag.track_pedestrian\">للمترجلين</string>\n  <string name=\"tag.track_grade1\">درجة 1</string>\n  <string name=\"tag.track_grade2\">درجة 2</string>\n  <string name=\"tag.track_grade3\">درجة 3</string>\n  <string name=\"tag.track_grade4\">درجة 4</string>\n  <string name=\"tag.track_grade5\">درجة 5</string>\n  <string name=\"tag.landuse_farm\">مزرعة</string>\n  <string name=\"tag.landuse_landfill\">مكب النفايات</string>\n  <string name=\"tag.landuse_basin\">حوض</string>\n  <string name=\"tag.landuse_reservoir\">صهريج</string>\n  <string name=\"tag.landuse_forest\">غابة</string>\n  <string name=\"tag.landuse_allotments\">تقسيمات</string>\n  <string name=\"tag.landuse_cemetery\">مقبرة</string>\n  <string name=\"tag.landuse_recreation_ground\">الترفيهية\\nالأرض</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">متتبع OSM للأندرويد™</string>\n  <string name=\"app_short_name\">متتبع OSM</string>\n  <string name=\"app_description\">في انتظار ثبات GPS لتفعيل الأزرار...</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">مسجل المسار</string>\n  <string name=\"tracklogger_waiting_gps\">في انتظار تثبيت GPS لتفعيل الأزرار...</string>\n  <string name=\"tracklogger_voicerec_title\">تسجيل صوتي</string>\n  <string name=\"tracklogger_voicerec_text\">تسجيل مقطع صوتي لـ {0}ثا.</string>\n  <string name=\"tracklogger_voicerec_stop\">إيقاف</string>\n  <string name=\"tracklogger_btnBack\">العودة</string>\n  <string name=\"tracklogger_tracked\">تتبع:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS تعطيل</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS معطل. هل تريد تشغيله؟</string>\n  <string name=\"tracklogger_choose_gallery_camera\">عارض الصور أم الكاميرا؟</string>\n  <string name=\"tracklogger_camera\">أخذ صورة بآلة التصوير</string>\n  <string name=\"tracklogger_gallery\">إختيار صورة من المعرض</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">قائمة نقاط المسار</string>\n  <string name=\"wplist_latitude\">خط عرض :</string>\n  <string name=\"wplist_longitude\">خط طول :</string>\n  <string name=\"wplist_elevation\">الإرتفاع :</string>\n  <string name=\"wplist_accuracy\">الدقة :</string>\n  <string name=\"wplist_compass\">اتجاه البوصلة:</string>\n  <string name=\"wplist_compass_accuracy\">دقة البوصلة:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">مدير المسار</string>\n  <string name=\"trackmgr_tracklist\">قائمة تتبع:</string>\n  <string name=\"trackmgr_waypoints_count\">نقاط الطريق :</string>\n  <string name=\"trackmgr_trackpoints_count\">نقاط المسار :</string>\n  <string name=\"trackmgr_empty\">لا توجد بحوزتك أية مسارات.</string>\n  <string name=\"trackmgr_newtrack_hint\">اضغط لتسجيل مسار جديد.</string>\n  <string name=\"trackmgr_newtrack_error\">تعذر إنشاء مسار جديد: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">أنت حاليًا تسجل المسار <b> #{0} </b> \\n اختره في القائمة للمتابعة</string>\n  <string name=\"trackmgr_contextmenu_stop\">إيقاف تقفِّي المسار</string>\n  <string name=\"trackmgr_contextmenu_resume\">مواصلة تقفِّي المسار</string>\n  <string name=\"trackmgr_contextmenu_delete\">حذف</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">إرفع إلى خريطة الشارع المفتوح</string>\n  <string name=\"trackmgr_contextmenu_display\">العرض</string>\n  <string name=\"trackmgr_contextmenu_details\">تفاصيل</string>\n  <string name=\"trackmgr_contextmenu_title\">المسار #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">سيتم حذف المسار رقم #{0} </string>\n  <string name=\"trackmgr_deleteall_confirm\">سيتم حذف جميع المسارات. هل أنت متأكد؟</string>\n  <string name=\"trackmgr_exporting\">جارٍ تصدير المسار رقم #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">جارٍ تحضير التصدير ...</string>\n  <string name=\"trackmgr_export_error\">تعذر تصدير المسار: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">سيتم تصدير جميع المسارات ، الأمر الذي قد يستغرق وقتًا طويلاً. هل أنت متأكد؟</string>\n  <string name=\"trackmgr_prepare_for_share_error\">تعذر معالجة المسار: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">تفاصيل المسار :</string>\n  <string name=\"trackdetail_startdate\">لحظة البداية :</string>\n  <string name=\"trackdetail_enddate\">لحظة النهاية :</string>\n  <string name=\"trackdetail_startloc\">يبدأ عند:</string>\n  <string name=\"trackdetail_endloc\">ينتهي عند:</string>\n  <string name=\"trackdetail_exportdate\">تم التصدير:</string>\n  <string name=\"trackdetail_osm_upload_date\">تم الرفع إلى خادم خريطة الشارع المفتوحة:</string>\n  <string name=\"trackdetail_btn_export\">صدر إلى GPX</string>\n  <string name=\"trackdetail_export_notyet\">(لم يتم تصديره بعد)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(لم يتم الرفع بعد)</string>\n  <string name=\"trackdetail_export_display\">العرض</string>\n  <string name=\"trackdetail_description\">الوصف</string>\n  <string name=\"trackdetail_tags\">الأوسمة (فاصلة بعد كل وسم)</string>\n  <string name=\"trackdetail_description_mandatory\">يجب عليك إدخال وصف</string>\n  <string name=\"osm_visibility_private\">خاص</string>\n  <string name=\"osm_visibility_public\">عمومي</string>\n  <string name=\"osm_visibility_trackable\">قابل للتتبع</string>\n  <string name=\"osm_visibility_identifiable\">قابل للتعريف</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">إرفع إلى خريطة الشارع المفتوح</string>\n  <string name=\"osm_upload_ok\">حفظ ورفع</string>\n  <string name=\"osm_upload_tmpfile_failed\">تعذر تصدير المسار إلى ملف مؤقت</string>\n  <string name=\"osm_upload_oauth_failed\">غير قادر على المصادقة من OSM</string>\n  <string name=\"osm_upload_sending\">جارٍ إرسال المسار رقم #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">في انتظار استجابة خادم خريطة الشارع المفتوحة...</string>\n  <string name=\"osm_upload_error\">خطأ أثناء رفع المسار</string>\n  <string name=\"osm_upload_bad_response\">عرض خادم OSM خطأ: ({0}) رسالة {1}</string>\n  <string name=\"osm_upload_unauthorized\">خطأ في التشغيل التلقائي. هل ترغب في مسح بيانات اعتماد خريطة الشارع المفتوحة المحفوظة؟</string>\n  <string name=\"osm_upload_sucess\">نجح الرفع لخريطة الشارع المفتوحة </string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">تسجيل صوتي</string>\n  <string name=\"gpsstatus_record_stillimage\">أخذ صورة</string>\n  <string name=\"gpsstatus_record_textnote\">ملاحظة</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">الإعدادات</string>\n  <string name=\"menu_waypointlist\">الإحداثيات</string>\n  <string name=\"menu_about\">حول</string>\n  <string name=\"menu_displaytrack\">عرض المسار</string>\n  <string name=\"menu_stoptracking\">توقف &amp; حفظ</string>\n  <string name=\"menu_newtrack\">مسار جديد</string>\n  <string name=\"menu_deletetracks\">حذف جميع المسارات</string>\n  <string name=\"menu_continue\">متابعة المسار</string>\n  <string name=\"menu_stopcurrenttrack\">إيقاف المسار الحالي</string>\n  <string name=\"menu_save\">حفظ</string>\n  <string name=\"menu_cancel\">إلغاء</string>\n  <string name=\"menu_export\">صدر إلى GPX</string>\n  <string name=\"menu_osm_upload\">إرفع إلى خريطة الشارع المفتوح</string>\n  <string name=\"menu_center_to_gps\">توسيط حسب موقع GPS</string>\n  <string name=\"menu_exportall\">تصدير الكل كـ GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">غير قادر على الكتابة في وحدة التخزين الخارجية.</string>\n  <string name=\"error_create_track_dir\">تعذر إنشاء مجلد المسار %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">يرجى التحقق مما إذا كان الذاكرة الخارجية مدخلة بشكل صحيح وتم تركيبها بشكل صحيح.</string>\n  <string name=\"error_voicerec_failed\">فشل التسجيل الصوتي</string>\n  <string name=\"error_userlayout_parsing\">خطأ أثناء تحليل ملف تخطيط XML. يرجى العودة إلى التخطيط الافتراضي.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">تتبع مع متتبع OSM لنظام أندرويد™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">تحذير: قيم HDOP ليست HDOP كما تم إرجاعها بواسطة جهاز GPS. يتم تقريبها من دقة الموقع بالأمتار.</string>\n  <!--About screen-->\n  <string name=\"about\">حول</string>\n  <string name=\"about_text\">لمزيد من المعلومات والمستندات وتقرير المشكلات ، يرجى زيارة الصفحة الرئيسية للمشروع:</string>\n  <string name=\"about_translate_text\">ساعدنا على ترجمة متتبع OSM:</string>\n  <string name=\"about_debug_info\">معلومات التصحيح البرمجية</string>\n  <string name=\"about_export_db\">تصدير قاعدة البيانات</string>\n  <string name=\"about_exporting_db\">جارٍ تصدير قاعدة البيانات ...</string>\n  <string name=\"about_export_db_result\">نتيجة تصدير قاعدة البيانات:%s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">متتبع OSM يقوم بالتتبع</string>\n  <string name=\"notification_title\">متتبع OSM يقوم بالتتبع (#{0})</string>\n  <string name=\"notification_text\">إضغط هنا لعرض الشاشة الرئسية</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">عرض المسار</string>\n  <string name=\"displaytrack_map\">عرض الخريطة الخلفية</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">حفظ</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">م</string>\n  <string name=\"various_accuracy\">الدقة</string>\n  <string name=\"various_accuracy_with_sats\">الدقة {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">في انتظار إصلاح نظام تتبع المواقع… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">انتظر الاتجاه...</string>\n  <string name=\"various_heading_unknown\">لا يمكن تحديد الاتجاه</string>\n  <string name=\"various_export_finished\">انتهت عملية التصدير بنجاح</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">عرض مسار خريطة الشارع المفتوحة</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">تحديث &amp; تثبيت</string>\n  <string name=\"buttons_presets_context_menu_delete\">حذف</string>\n  <string name=\"buttons_presets_updating_layout\">تحديث...</string>\n  <string name=\"buttons_presets_successful_update\">تم تحديث التخطيط بنجاح</string>\n  <string name=\"buttons_presets_unsuccessful_update\">لم يتم تحديث التخطيط ، أعد المحاولة لاحقًا</string>\n  <string name=\"buttons_presets_delete_message\">هل أنت متأكد من حذف التنسيق {0}؟</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">نعم</string>\n  <string name=\"buttons_presets_successful_delete\">تم حذف التخطيط بنجاح</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">تم حذف دليل الرموز بنجاح</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">هذا الملف ليس لديه أي مجلد رمز مرتبط به</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">لا يمكن حذف التخطيط</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">خطأ: غير قادر على الاتصال بالإنترنت</string>\n  <string name=\"available_layouts_response_null_exception\">خطأ: غير قادر على الاتصال بمستودع التنسيقات المخصصة الافتراضية</string>\n  <string name=\"available_layouts_connecting_message\">(اتصال…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">تحميل</string>\n  <string name=\"available_layouts_not_available_language\">لغتك غير متوفرة اختر واحدة من القائمة</string>\n  <string name=\"available_layouts_language_dialog_title\">اللغات المتوفرة</string>\n  <string name=\"available_layouts_checking_language_dialog\">التحقق من إصدارات اللغة المحلية</string>\n  <string name=\"available_layouts_downloading_dialog\">تنزيل...</string>\n  <string name=\"available_layouts_successful_download\">تم تنزيل التخطيط بنجاح</string>\n  <string name=\"available_layouts_unsuccessful_download\">لا يمكن تنزيل التخطيط ، حاول مرة أخرى لاحقًا</string>\n  <string name=\"available_layouts_null_response_received\">خطأ عند استرجاع البيانات من الخادم</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">افتراضي</string>\n  <string name=\"github_repository_settings_custom_checkbox\">مخصص</string>\n  <string name=\"github_repository_settings_username\">اسم مستخدم Github:</string>\n  <string name=\"github_repository_settings_repository_name\">اسم المستودع:</string>\n  <string name=\"github_repository_settings_branch_name\">اسم الفرع:</string>\n  <string name=\"github_repository_settings_valid_server\">مستودع Github صالح</string>\n  <string name=\"github_repository_settings_invalid_server\">مستودع Github فاسد</string>\n  <!--App Introduction-->\n  <string name=\"app_intro\">مقدمة لمتتبع OSM للأندرويد™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">مرحبًا بك في متتبع OSM للأندرويد™ 👋</string>\n  <string name=\"app_intro_slide1_description\">هذا التطبيق هو برنامج مجاني يحترم حريتك!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">تتبع سعيد 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">سيستخدم متتبع OSM للأندرويد موقع GPS الخاص بك لتسجيل نقاط المسار ونقاط الطريق، حتى عند تشغيل التطبيق في الخلفية.\n\\nلا يتم استخدام بياناتك لدعم الإعلانات.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">تسجيل صوتي</string>\n  <string name=\"wpt_stillimage\">صورة</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-b+sr+Latn/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logotip</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Uveličaj</string>\n  <string name=\"acc.zoom_out\">Umanji</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Pokazatelj jačine signala satelita</string>\n  <string name=\"acc.record_indicator\">Pokazatelj napretka snimanja</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Pokazatelj stanja putanje</string>\n  <string name=\"acc.upload_status\">Pokazatelj stanja slanja Otvorene mape</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-b+sr+Latn/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Postavke</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS postavke</string>\n  <string name=\"prefs_gps_os_settings_summary\">Prikaz sistemskog ekrana GPS postavki</string>\n  <string name=\"prefs_check_gps_startup\">Proveri GPS pri pokretanju</string>\n  <string name=\"prefs_check_gps_startup_summary\">Proveri da li je GPS isključen i ponudi uključivanje</string>\n  <string name=\"prefs_gps_ignore_clock\">Zanemari GPS časovnik</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Zanemari GPS časovnik i koristi Androidov za vremena</string>\n  <string name=\"prefs_gps_logging_interval\">Učestanost GPS zapisa</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Koristi 0 za najkraće moguće (utiče na bateriju)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sek</string>\n  <string name=\"prefs_ui\">Sučelje</string>\n  <string name=\"prefs_ui_picture_source\">Podrazumevani izvor slika</string>\n  <string name=\"prefs_ui_picture_source_summary\">Slike sa kamere ili iz galerije?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galerija</item>\n    <item>Uvek pitaj</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Predefinisana dugmad</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Izaberi posebne setove dugmadi (vidi dokumentaciju)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Podrazumevano</string>\n  <string name=\"prefs_ui_orientation\">Usmerenje</string>\n  <string name=\"prefs_ui_orientation_summary\">Željeno usmerenje za ekran dugmadi</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatski</item>\n    <item>Uspravno</item>\n    <item>Položeno</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Trajanje glasovne beleške</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sek.</string>\n  <string name=\"prefs_theme\">Tema glavnog ekrana</string>\n  <string name=\"prefs_theme_summary\">Potrebno je ponovno pokretanje da bi se primenila</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Podrazumevano</item>\n    <item>Podrazumevano (tamno)</item>\n    <item>Podrazumevano (svetlo)</item>\n    <item>Visoki kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Ekran uvek uključen</string>\n  <string name=\"prefs_display_always_on_summary\">Ekran će ostati uključen tokom praćenja. Isključite da sačuvate bateriju</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa u pozadini</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Prikazuj OpenStreet mapu ispod traga. Morate biti povezani</string>\n  <string name=\"prefs_output\">GPX postavke</string>\n  <string name=\"prefs_storage_dir\">Direktorijum spoljnog skladišta</string>\n  <string name=\"prefs_storage_dir_hint\">Odnosi se na naredno praćenje (ne na tekuće)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Jedan direktorijum po praćenju</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Sačuvaj svako praćenje i njegove fajlove u sopstveni direktorijum</string>\n  <string name=\"prefs_output_filename\">Naziv fajla za praćenja</string>\n  <string name=\"prefs_output_filename_summary\">Šablon za naziv fajla praćenja</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Naziv praćenja</item>\n    <item>Naziv, početni datum i vreme</item>\n    <item>Početni datum i vreme</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Tačnost u GPX fajlu</string>\n  <string name=\"prefs_output_accuracy_summary\">Dodaj podatke o tačnosti u GPX fajl uz naziv prolazne tačke ili u njen komentar</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Bez tačnosti</item>\n    <item>Uz naziv prolazne tačke</item>\n    <item>U komentar prolazne tačke</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Koristi HDOP aproksimaciju</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Popuni HDOP u GPX-u sa procenjenom vrednošću iz preciznosti</string>\n  <string name=\"prefs_sound_enabled\">Uključi zvuk</string>\n  <string name=\"prefs_sound_enabled_summary\">Pusti zvuk kada glasovna beleška počne i završi se</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Resetuj OSM prijavu</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Zaboravi OSM akreditive i dozvole i prisili OSM pratioca da ih zatraži ponovo</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Moraćete ponovo da ovlastite OSM pratioca da šalje praćenja. Sigurni ste?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Bez usmerenja</item>\n    <item>U komentaru</item>\n    <item>U proširenju</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Određuje da li će i kako podaci kompasa biti izvezeni u GPX fajl</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-b+sr+Latn/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Razno</string>\n  <string name=\"tag.restriction\">Ograničenja</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Turizam</string>\n  <string name=\"tag.amenity\">Komfor</string>\n  <string name=\"tag.amenity_more\">Komfor (+)</string>\n  <string name=\"tag.way\">Put</string>\n  <string name=\"tag.track\">Staza</string>\n  <string name=\"tag.landuse\">Zemljište</string>\n  <string name=\"tag.misc_bus_stop\">Autobuska stanica</string>\n  <string name=\"tag.misc_railway\">Pruga</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Poštansko sanduče</string>\n  <string name=\"tag.misc_atm\">Bankomat</string>\n  <string name=\"tag.misc_bollard\">Prepreka</string>\n  <string name=\"tag.misc_toilets\">Toaleti</string>\n  <string name=\"tag.misc_shelter\">Zaklon</string>\n  <string name=\"tag.misc_surveillance\">Video nadzor</string>\n  <string name=\"tag.restriction_20\">maks 20</string>\n  <string name=\"tag.restriction_30\">maks 30</string>\n  <string name=\"tag.restriction_40\">maks 40</string>\n  <string name=\"tag.restriction_50\">maks 50</string>\n  <string name=\"tag.restriction_60\">maks 60</string>\n  <string name=\"tag.restriction_70\">maks 70</string>\n  <string name=\"tag.restriction_80\">maks 80</string>\n  <string name=\"tag.restriction_90\">maks 90</string>\n  <string name=\"tag.restriction_100\">maks 100</string>\n  <string name=\"tag.restriction_110\">maks 110</string>\n  <string name=\"tag.restriction_120\">maks 120</string>\n  <string name=\"tag.restriction_130\">maks 130</string>\n  <string name=\"tag.restriction_no_exit\">Slepa ulica</string>\n  <string name=\"tag.restriction_traffic_light\">Semafor</string>\n  <string name=\"tag.restriction_one_way\">Jednosmerno</string>\n  <string name=\"tag.car_fuel_station\">Benzinska stanica</string>\n  <string name=\"tag.car_parking\">Parking</string>\n  <string name=\"tag.car_emergency_phone\">Hitan telefon</string>\n  <string name=\"tag.car_turning_circle\">Mesto za okretanje</string>\n  <string name=\"tag.car_speed_camera\">Brzinska kamera</string>\n  <string name=\"tag.tourism_view_point\">Vidikovac</string>\n  <string name=\"tag.tourism_information\">Informacije</string>\n  <string name=\"tag.tourism_picnic\">Piknik mesto</string>\n  <string name=\"tag.tourism_attraction\">Atrakcija</string>\n  <string name=\"tag.tourism_theme_park\">Tematski park</string>\n  <string name=\"tag.tourism_castle\">Zamak</string>\n  <string name=\"tag.tourism_monument\">Spomenik</string>\n  <string name=\"tag.tourism_museum\">Muzej</string>\n  <string name=\"tag.tourism_cinema\">Bioskop</string>\n  <string name=\"tag.amenity_bench\">Klupa</string>\n  <string name=\"tag.amenity_water\">Voda</string>\n  <string name=\"tag.amenity_pharmacy\">Apoteka</string>\n  <string name=\"tag.amenity_shop\">Prodavnica</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taksi</string>\n  <string name=\"tag.amenity_recycling\">Reciklaža</string>\n  <string name=\"tag.amenity_post_office\">Pošta</string>\n  <string name=\"tag.amenity_library\">Biblioteka</string>\n  <string name=\"tag.amenitymore_school\">Škola</string>\n  <string name=\"tag.amenitymore_police\">Policija</string>\n  <string name=\"tag.amenitymore_fire_station\">Vatrogasci</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Igralište</string>\n  <string name=\"tag.amenitymore_pub\">Pab</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restoran</string>\n  <string name=\"tag.amenitymore_fastfood\">Brza hrana</string>\n  <string name=\"tag.amenitymore_camp_site\">Kamp</string>\n  <string name=\"tag.way_bridge\">Most</string>\n  <string name=\"tag.way_zebra_crossing\">Pešački prelaz</string>\n  <string name=\"tag.way_motorway\">Motoput</string>\n  <string name=\"tag.way_trunk\">Autoput</string>\n  <string name=\"tag.way_primary\">Prvog reda</string>\n  <string name=\"tag.way_secondary\">Drugog reda</string>\n  <string name=\"tag.way_tertiary\">Trećeg reda</string>\n  <string name=\"tag.way_residential\">Stambeni</string>\n  <string name=\"tag.way_service\">Servisni</string>\n  <string name=\"tag.track_track\">Staza</string>\n  <string name=\"tag.track_cycleway\">Biciklistička</string>\n  <string name=\"tag.track_footway\">Pešačka staza</string>\n  <string name=\"tag.track_bridleway\">Za jahanje</string>\n  <string name=\"tag.track_steps\">Stepenice</string>\n  <string name=\"tag.track_living_street\">U naselju</string>\n  <string name=\"tag.track_pedestrian\">Pešačka</string>\n  <string name=\"tag.track_grade1\">1. stepena</string>\n  <string name=\"tag.track_grade2\">2. stepena</string>\n  <string name=\"tag.track_grade3\">3. stepena</string>\n  <string name=\"tag.track_grade4\">4. stepena</string>\n  <string name=\"tag.track_grade5\">5. stepena</string>\n  <string name=\"tag.landuse_farm\">Farma</string>\n  <string name=\"tag.landuse_landfill\">Deponija</string>\n  <string name=\"tag.landuse_basin\">Basen</string>\n  <string name=\"tag.landuse_reservoir\">Rezervoar</string>\n  <string name=\"tag.landuse_forest\">Šuma</string>\n  <string name=\"tag.landuse_allotments\">Bašte</string>\n  <string name=\"tag.landuse_cemetery\">Groblje</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-b+sr+Latn/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">Pratilac za Android</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirisan OSMTracker-om na Windows Mobile, omogućava da pratite vaša putovanja, markirate značajna mesta (glasom ili slikom), izvezete ih u GPX format za kasnije korišćenje sa Open Street Map alatima poput JOSM-a.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Beležnik praćenja</string>\n  <string name=\"tracklogger_waiting_gps\">Čekam GPS poziciju da uključim dugmad...</string>\n  <string name=\"tracklogger_voicerec_title\">Glasovna beleška</string>\n  <string name=\"tracklogger_voicerec_text\">Snimam {0}s audio klip.</string>\n  <string name=\"tracklogger_voicerec_stop\">Zaustavi</string>\n  <string name=\"tracklogger_btnBack\">Nazad</string>\n  <string name=\"tracklogger_tracked\">Ispraćeno:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS isključen</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS je isključen. Želite li da ga uključite?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerija ili kamera?</string>\n  <string name=\"tracklogger_camera\">Uslikajte kamerom</string>\n  <string name=\"tracklogger_gallery\">Izaberite sliku iz galerije</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista prolaznih tačaka</string>\n  <string name=\"wplist_latitude\">Šir:</string>\n  <string name=\"wplist_longitude\">Duž:</string>\n  <string name=\"wplist_elevation\">Vis:</string>\n  <string name=\"wplist_accuracy\">Prec:</string>\n  <string name=\"wplist_compass\">Kompas:</string>\n  <string name=\"wplist_compass_accuracy\">Komp. tačn.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Menadžer praćenja</string>\n  <string name=\"trackmgr_tracklist\">Lista praćenja:</string>\n  <string name=\"trackmgr_waypoints_count\">Tački prolaza:</string>\n  <string name=\"trackmgr_trackpoints_count\">Tački praćenja:</string>\n  <string name=\"trackmgr_empty\">Nema praćenja.</string>\n  <string name=\"trackmgr_newtrack_error\">Ne mogu da napravim novo praćenje: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Zaustavi praćenje</string>\n  <string name=\"trackmgr_contextmenu_resume\">Nastavi praćenje</string>\n  <string name=\"trackmgr_contextmenu_delete\">Obriši</string>\n  <string name=\"trackmgr_contextmenu_export\">Izvezi kao GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Pošalji na OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Prikaz</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalji</string>\n  <string name=\"trackmgr_contextmenu_title\">Praćenje #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Praćenje #{0} biće izbrisano</string>\n  <string name=\"trackmgr_deleteall_confirm\">Sva praćenja biće obrisana. Sigurni ste?</string>\n  <string name=\"trackmgr_exporting\">Izvozim praćenje #{0}…</string>\n  <string name=\"trackmgr_export_error\">Ne mogu da izvezem praćenje: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Biće izvezena sva praćenja. To može da potraje. Sigurni ste?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalji praćenja</string>\n  <string name=\"trackdetail_startdate\">Početak:</string>\n  <string name=\"trackdetail_enddate\">Završetak:</string>\n  <string name=\"trackdetail_startloc\">Kreće od:</string>\n  <string name=\"trackdetail_endloc\">Završava na:</string>\n  <string name=\"trackdetail_exportdate\">Izvezeno:</string>\n  <string name=\"trackdetail_osm_upload_date\">Poslato na OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Izvezi kao GPX</string>\n  <string name=\"trackdetail_export_notyet\">(još nije izvezeno)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(još nije poslato)</string>\n  <string name=\"trackdetail_export_display\">Prikaz</string>\n  <string name=\"trackdetail_description\">Opis</string>\n  <string name=\"trackdetail_tags\">Oznake (razdvoj zapetom)</string>\n  <string name=\"trackdetail_description_mandatory\">Morate uneti opis</string>\n  <string name=\"osm_visibility_private\">Lično</string>\n  <string name=\"osm_visibility_public\">Javno</string>\n  <string name=\"osm_visibility_trackable\">Isprativ</string>\n  <string name=\"osm_visibility_identifiable\">Prepoznatljiv</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap slanje</string>\n  <string name=\"osm_upload_ok\">Sačuvaj i pošalji</string>\n  <string name=\"osm_upload_tmpfile_failed\">Ne mogu da izvezem praćenje u privremeni fajl</string>\n  <string name=\"osm_upload_oauth_failed\">Ne mogu da se autentifikujem na OSM</string>\n  <string name=\"osm_upload_sending\">Šaljem praćenje #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Čekam odgovor OpenStreetMap servera…</string>\n  <string name=\"osm_upload_error\">Greška pri slanju praćenja</string>\n  <string name=\"osm_upload_bad_response\">OSM server je vratio grešku: ({0}) poruka {1}</string>\n  <string name=\"osm_upload_unauthorized\">Greška autorizacije. Želite li da očistite sačuvane OpenStreetMap akreditive?</string>\n  <string name=\"osm_upload_sucess\">Slanje na OpenStreetMap uspešno</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Glasovna beleška</string>\n  <string name=\"gpsstatus_record_stillimage\">Slikaj</string>\n  <string name=\"gpsstatus_record_textnote\">Beleška</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Postavke</string>\n  <string name=\"menu_waypointlist\">Prolazne tačke</string>\n  <string name=\"menu_about\">O programu</string>\n  <string name=\"menu_displaytrack\">Prikaži praćenje</string>\n  <string name=\"menu_stoptracking\">Zaustavi i sačuvaj</string>\n  <string name=\"menu_newtrack\">Novo praćenje</string>\n  <string name=\"menu_deletetracks\">Obriši sva praćenja</string>\n  <string name=\"menu_continue\">Nastavi praćenje</string>\n  <string name=\"menu_stopcurrenttrack\">Zaustavi praćenje</string>\n  <string name=\"menu_save\">Sačuvaj</string>\n  <string name=\"menu_cancel\">Otkaži</string>\n  <string name=\"menu_export\">Izvezi kao GPX</string>\n  <string name=\"menu_osm_upload\">Slanje na OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centriraj na GPS</string>\n  <string name=\"menu_exportall\">Izvezi sve kao GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Ne mogu da pišem u spoljno skladište.</string>\n  <string name=\"error_create_track_dir\">Ne mogu da napravim fasciklu praćenja %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Proverite da li je spoljno skladište ubačeno i montirano.</string>\n  <string name=\"error_voicerec_failed\">Glasovna beleška nije uspela</string>\n  <string name=\"error_userlayout_parsing\">Greška pri čitanju XML fajla rasporeda. Vratite na podrazumevani raspored.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Ispraćeno sa OSM pratiocem za Android</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Pažnja: HDOP vrednosti nisu sa GPS uređaja već procenjene na osnovu preciznosti lokacije u metrima.</string>\n  <!--About screen-->\n  <string name=\"about\">O programu</string>\n  <string name=\"about_text\">Za više informacija, dokumentaciju i prijave problema, posetite stranicu projekta:</string>\n  <string name=\"about_translate_text\">Pomogli u prevođenju:</string>\n  <string name=\"about_debug_info\">Podaci za otklanjanje grešaka</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSM pratilac radi</string>\n  <string name=\"notification_title\">OSM pratilac prati (#{0})</string>\n  <string name=\"notification_text\">Tapnite ovde za prikaz glavnog ekrana</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Prikaži praćenje</string>\n  <string name=\"displaytrack_map\">Prikaži mapu u pozadini</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Sačuvaj</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Preciznost</string>\n  <string name=\"various_accuracy_with_sats\">Preciznost {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Čekam GPS poziciju… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Čekam pravac...</string>\n  <string name=\"various_heading_unknown\">Pravac se ne može odrediti</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap prikaz praćenja</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-b+sr+Latn/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Glasovna beleška</string>\n  <string name=\"wpt_stillimage\">Slika</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-be/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Рознае</string>\n  <string name=\"tag.restriction\">Абмежаванне</string>\n  <string name=\"tag.car\">Аўтамабіль</string>\n  <string name=\"tag.tourism\">Турызм</string>\n  <string name=\"tag.way\">Шлях</string>\n  <string name=\"tag.track\">Трэк</string>\n  <string name=\"tag.landuse\">Землекарыстанне</string>\n  <string name=\"tag.misc_bus_stop\">Аўтобусны прыпынак</string>\n  <string name=\"tag.misc_railway\">Чыгунка</string>\n  <string name=\"tag.misc_telephone\">Тэлефон</string>\n  <string name=\"tag.misc_post_box\">Паштовая скрыня</string>\n  <string name=\"tag.misc_atm\">Банкамат</string>\n  <string name=\"tag.misc_toilets\">Прыбіральні</string>\n  <string name=\"tag.misc_surveillance\">Назіранне</string>\n  <string name=\"tag.restriction_20\">Макс 20</string>\n  <string name=\"tag.restriction_30\">Макс 30</string>\n  <string name=\"tag.restriction_40\">Макс 40</string>\n  <string name=\"tag.restriction_50\">Макс 50</string>\n  <string name=\"tag.restriction_60\">Макс 60</string>\n  <string name=\"tag.restriction_70\">Макс 70</string>\n  <string name=\"tag.restriction_80\">Макс 80</string>\n  <string name=\"tag.restriction_90\">Макс 90</string>\n  <string name=\"tag.restriction_100\">Макс 100</string>\n  <string name=\"tag.restriction_110\">Макс 110</string>\n  <string name=\"tag.restriction_120\">Макс 120</string>\n  <string name=\"tag.restriction_130\">Макс 130</string>\n  <string name=\"tag.restriction_no_exit\">Няма з`езду</string>\n  <string name=\"tag.restriction_one_way\">Аднабаковы рух</string>\n  <string name=\"tag.car_fuel_station\">АЗС</string>\n  <string name=\"tag.car_parking\">Паркоўка</string>\n  <string name=\"tag.car_emergency_phone\">Экстранная сувязь</string>\n  <string name=\"tag.car_turning_circle\">Разваротнае кальцо</string>\n  <string name=\"tag.car_speed_camera\">Фотарадар</string>\n  <string name=\"tag.tourism_information\">Інфармацыя</string>\n  <string name=\"tag.tourism_theme_park\">Парк забаў</string>\n  <string name=\"tag.tourism_castle\">Замак</string>\n  <string name=\"tag.tourism_monument\">Помнік</string>\n  <string name=\"tag.tourism_museum\">Музей</string>\n  <string name=\"tag.tourism_cinema\">Кіно</string>\n  <string name=\"tag.amenity_bench\">Лаўка</string>\n  <string name=\"tag.amenity_water\">Вада</string>\n  <string name=\"tag.amenity_pharmacy\">Аптэка</string>\n  <string name=\"tag.amenity_shop\">Крама</string>\n  <string name=\"tag.amenity_sport\">Спорт</string>\n  <string name=\"tag.amenity_taxi\">Таксі</string>\n  <string name=\"tag.amenity_recycling\">Сметніца</string>\n  <string name=\"tag.amenity_post_office\">Пошта</string>\n  <string name=\"tag.amenity_library\">Бібліятэка</string>\n  <string name=\"tag.amenitymore_school\">Школа</string>\n  <string name=\"tag.amenitymore_police\">Паліцыя</string>\n  <string name=\"tag.amenitymore_fire_station\">Пажарнае дэпо</string>\n  <string name=\"tag.amenitymore_bank\">Банк</string>\n  <string name=\"tag.amenitymore_playground\">Дзіцячая пляцоўка</string>\n  <string name=\"tag.amenitymore_pub\">Піўная</string>\n  <string name=\"tag.amenitymore_hotel\">Гатэль</string>\n  <string name=\"tag.amenitymore_motel\">Матэль</string>\n  <string name=\"tag.amenitymore_hostel\">Хостэл</string>\n  <string name=\"tag.amenitymore_restaurant\">Рэстаран</string>\n  <string name=\"tag.amenitymore_fastfood\">Фастфуд</string>\n  <string name=\"tag.amenitymore_camp_site\">Турбаза</string>\n  <string name=\"tag.way_bridge\">Мост</string>\n  <string name=\"tag.way_zebra_crossing\">Зебра</string>\n  <string name=\"tag.way_motorway\">Аўтамагістраль</string>\n  <string name=\"tag.way_primary\">Першасны</string>\n  <string name=\"tag.way_secondary\">Другасны</string>\n  <string name=\"tag.way_tertiary\">Тэрытарыяльны</string>\n  <string name=\"tag.way_residential\">Жылы</string>\n  <string name=\"tag.way_service\">Службовы</string>\n  <string name=\"tag.track_cycleway\">Веладарожка</string>\n  <string name=\"tag.track_footway\">Ходнікі</string>\n  <string name=\"tag.track_steps\">Прыступкі</string>\n  <string name=\"tag.track_living_street\">Жылая вуліца</string>\n  <string name=\"tag.track_pedestrian\">Пешаходны</string>\n  <string name=\"tag.landuse_farm\">Ферма</string>\n  <string name=\"tag.landuse_reservoir\">Вадасховішча</string>\n  <string name=\"tag.landuse_forest\">Лес</string>\n  <string name=\"tag.landuse_cemetery\">Могілкі</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-be/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker для Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Рэгістратар трэкаў</string>\n  <string name=\"tracklogger_voicerec_title\">Запіс голасу</string>\n  <string name=\"tracklogger_voicerec_stop\">Стоп</string>\n  <string name=\"tracklogger_btnBack\">Назад</string>\n  <string name=\"tracklogger_gps_disabled\">GPS адключаны</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS выключаны. Хочаце ўключыць яго?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Галерэя або камера?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Спіс кропак шляха</string>\n  <string name=\"wplist_latitude\">Шрт:</string>\n  <string name=\"wplist_longitude\">Дгт:</string>\n  <string name=\"wplist_elevation\">Вышыня:</string>\n  <string name=\"wplist_accuracy\">Дакладнасць:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Менеджэр трэкаў</string>\n  <string name=\"trackmgr_tracklist\">Спіс трэкаў:</string>\n  <string name=\"trackmgr_waypoints_count\">Кропкі шляха:</string>\n  <string name=\"trackmgr_trackpoints_count\">Кропкі трэка:</string>\n  <string name=\"trackmgr_empty\">У вас няма ніякіх трэкаў.</string>\n  <string name=\"trackmgr_newtrack_error\">Немагчыма стварыць новы трэк: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Спыніць запіс трэку</string>\n  <string name=\"trackmgr_contextmenu_resume\">Працягнуць запіс трэку</string>\n  <string name=\"trackmgr_contextmenu_delete\">Выдаліць</string>\n  <string name=\"trackmgr_contextmenu_export\">Экспарт у GPX</string>\n  <string name=\"trackmgr_contextmenu_display\">Паказаць</string>\n  <string name=\"trackmgr_contextmenu_details\">Дэталі</string>\n  <string name=\"trackmgr_contextmenu_title\">Трэк #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Трэк #{0} будзе выдалены</string>\n  <string name=\"trackmgr_exporting\">Экспарт трэка #{0}…</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail_startdate\">Час пачатку:</string>\n  <string name=\"trackdetail_enddate\">Час заканчэння:</string>\n  <string name=\"trackdetail_startloc\">Пачатак у:</string>\n  <string name=\"trackdetail_endloc\">Канец у:</string>\n  <string name=\"trackdetail_exportdate\">Экспартавана:</string>\n  <string name=\"trackdetail_osm_upload_date\">Загружана на OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Экспарт у GPX</string>\n  <string name=\"trackdetail_export_display\">Паказаць</string>\n  <string name=\"trackdetail_description\">Апісанне</string>\n  <string name=\"trackdetail_tags\">Тэгі (праз коскі)</string>\n  <string name=\"trackdetail_description_mandatory\">Вы павінны ўвесці апісанне</string>\n  <string name=\"osm_visibility_private\">Прыватны</string>\n  <string name=\"osm_visibility_public\">Грамадскі</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload_ok\">Захаваць і загрузіць</string>\n  <string name=\"osm_upload_sending\">Адпраўка трэка #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Чаканне адказу сервера OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Памылка пры загрузцы трэка</string>\n  <string name=\"osm_upload_sucess\">Загрузка на OpenStreetMap прайшла паспяхова</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Запіс голасу</string>\n  <string name=\"gpsstatus_record_textnote\">Тэкставая нататка</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Налады</string>\n  <string name=\"menu_displaytrack\">Паказаць трэк</string>\n  <string name=\"menu_stoptracking\">Спыніць і захаваць</string>\n  <string name=\"menu_newtrack\">Новы трэк</string>\n  <string name=\"menu_deletetracks\">Выдаліць усе трэкі</string>\n  <string name=\"menu_continue\">Працягнуць трэк</string>\n  <string name=\"menu_stopcurrenttrack\">Спыніць бягучы трэк</string>\n  <string name=\"menu_save\">Захаваць</string>\n  <string name=\"menu_cancel\">Скасаваць</string>\n  <string name=\"menu_export\">Экспарт у GPX</string>\n  <string name=\"menu_center_to_gps\">Цэнтраваць па GPS</string>\n  <string name=\"menu_exportall\">Экспартаваць усё як GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Немагчыма запісаць на вонкавы носьбіт.</string>\n  <string name=\"error_voicerec_failed\">Запіс голасу не атрымаўся</string>\n  <!--GPX-->\n  <!--About screen-->\n  <!--Notification-->\n  <!--Display track-->\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Захаваць</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">м</string>\n  <string name=\"various_accuracy\">Дакладнасць</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading_unknown\">Напрамак не можа быць вызначаны</string>\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Настройки</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">секунди</string>\n  <string name=\"prefs_ui\">Потребителски интерфейс</string>\n  <string name=\"prefs_voicerec_duration_seconds\">секунди</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.restriction\">Ограничение</string>\n  <string name=\"tag.car\">Автомобил</string>\n  <string name=\"tag.tourism\">Туризъм</string>\n  <string name=\"tag.way\">Път</string>\n  <string name=\"tag.misc_bus_stop\">Автобусна спирка</string>\n  <string name=\"tag.misc_railway\">Железопътна линия</string>\n  <string name=\"tag.misc_telephone\">Телефон</string>\n  <string name=\"tag.misc_post_box\">Пощенска кутия</string>\n  <string name=\"tag.misc_atm\">Банкомат</string>\n  <string name=\"tag.misc_toilets\">Тоалетни</string>\n  <string name=\"tag.restriction_traffic_light\">Светофар</string>\n  <string name=\"tag.car_parking\">Паркинг</string>\n  <string name=\"tag.amenity_shop\">Магазин</string>\n  <string name=\"tag.amenity_taxi\">Такси</string>\n  <string name=\"tag.amenitymore_school\">Училище</string>\n  <string name=\"tag.amenitymore_police\">Полиция</string>\n  <string name=\"tag.amenitymore_fire_station\">Пожарна</string>\n  <string name=\"tag.amenitymore_bank\">Банка</string>\n  <string name=\"tag.amenitymore_hotel\">Хотел</string>\n  <string name=\"tag.amenitymore_motel\">Мотел</string>\n  <string name=\"tag.amenitymore_hostel\">Общежитие</string>\n  <string name=\"tag.amenitymore_restaurant\">Ресторант</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker за Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <!--Waypoint List-->\n  <!--Track Manager-->\n  <!--Track Detail-->\n  <string name=\"trackdetail_description_mandatory\">Трябва да въведете описание</string>\n  <!--OSM upload-->\n  <!--GPS Status & record bar-->\n  <!--Menu-->\n  <string name=\"menu_settings\">Настройки</string>\n  <string name=\"menu_save\">Запис</string>\n  <string name=\"menu_cancel\">Отказ</string>\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <!--Notification-->\n  <!--Display track-->\n  <!--Track detail-->\n  <!--Various-->\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Apropa</string>\n  <string name=\"acc.zoom_out\">Allunya</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicador de senyal de satèlit</string>\n  <string name=\"acc.record_indicator\">Indicador de gravació en progrés</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicador d\\'estat de Track</string>\n  <string name=\"acc.upload_status\">Indicador de pujada de dades a OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Preferències</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Preferències GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Mostra les preferències GPS</string>\n  <string name=\"prefs_check_gps_startup\">Comprova l\\'estat GPS en començar</string>\n  <string name=\"prefs_check_gps_startup_summary\">Comprova si el GPS està desactivat en iniciar i ofereix activar-lo.</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignora el rellotge GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignora el rellotge GPS i utilitza el rellotge de l\\'Androidper les marques de temps</string>\n  <string name=\"prefs_gps_logging_interval\">Interval de registre del GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Utilitza 0 com a interval màxim de registre GPS (Afecta en el consum de bateria)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segons</string>\n  <string name=\"prefs_ui\">Interfície d\\'usuari</string>\n  <string name=\"prefs_ui_picture_source\">Origen de fotos per defecte</string>\n  <string name=\"prefs_ui_picture_source_summary\">Obtingues les fotos de la càmera o de la galeria?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Càmera</item>\n    <item>Galeria</item>\n    <item>Pregunta- ho sempre</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Botons per defecte</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Escull els botons personalitzats (veure documentació)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Per defecte</string>\n  <string name=\"prefs_ui_orientation\">Orientació</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientació predefinida per als botons de pantalla</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automàtic</item>\n    <item>Vertical</item>\n    <item>Horitzontal</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duració de la gravació de veu</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segons</string>\n  <string name=\"prefs_theme\">Tema per a la pantalla principal </string>\n  <string name=\"prefs_theme_summary\">Reinicia l\\'aplicació per tal de que els canvis tinguin efecte</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>El que marqui el SO per defecte</item>\n    <item>El que marqui el SO per defecte (fosc)</item>\n    <item>El que marqui el SO per defecte (lluminós)</item>\n    <item>Alt contrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Deixa la pantalla sempre encesa</string>\n  <string name=\"prefs_display_always_on_summary\">La pantalla estarà encesa durant el track. Desactiva per estalviar bateria</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa de fons</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Mostra el mapa de OpenstreetMap sota el track. És necessari disposar de connexió de dades.</string>\n  <string name=\"prefs_output\">Preferències GPX</string>\n  <string name=\"prefs_storage_dir\">Carpeta d\\'emmagatzematge a Documents</string>\n  <string name=\"prefs_storage_dir_hint\">Els canvis tindran efecte en el proper track (no en l\\'actual)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Una carpeta per track</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Desa cada track i els fitxers corresponents a la seva propia carpeta</string>\n  <string name=\"prefs_output_filename\">Nom de fitxer per el track</string>\n  <string name=\"prefs_output_filename_summary\">Model de nom de fitxer si el track te un nom</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nom del track</item>\n    <item>Nom, Hora d\\'inici i de fi</item>\n    <item>Hora i data d\\'inici i de fi, nom</item>\n    <item>Hora i data d\\'inici i de fi,</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Precisió en el fitxer GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Afegeix informació de precisió en el fitxer GPX afegint waypoints o comentaris </string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Cap</item>\n    <item>Amb el nom del waypoint</item>\n    <item>Amb el comentari del waypoint</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Utilitza l\\'aproximació HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Utilitza el valor de la precisió HDOP per posar-lo en el fitxer GPX</string>\n  <string name=\"prefs_sound_enabled\">Activa so</string>\n  <string name=\"prefs_sound_enabled_summary\">Reprodueix sons quan comença i acaba la gravació de veu</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Restableix l\\'autenticació OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Oblida les credencials i permisos OSM i força OSMTracer a preguntar-los una altre vegada</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Hauràs d\\'autoritzar OSMTracker per pujar els track la propera vegada. N\\'estàs segur?</string>\n  <string name=\"prefs_map_tile\">Proveidor de mapa</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Cap</item>\n    <item>en el comentari</item>\n    <item>en l\\'extensió</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exporta la Direcció de la Brúixola</string>\n  <string name=\"prefs_compass_heading_summary\">Defineix si desar la informació de la brúixola en el fitxer GPX, i com fer-ho</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Varis</string>\n  <string name=\"tag.restriction\">Restricció</string>\n  <string name=\"tag.car\">Cotxe</string>\n  <string name=\"tag.tourism\">Turisme</string>\n  <string name=\"tag.amenity\">Establiment</string>\n  <string name=\"tag.amenity_more\">Establiment (+)</string>\n  <string name=\"tag.way\">Via</string>\n  <string name=\"tag.track\">Camí</string>\n  <string name=\"tag.landuse\">Ús de terreny</string>\n  <string name=\"tag.misc_bus_stop\">Parada de bus</string>\n  <string name=\"tag.misc_railway\">Via de tren</string>\n  <string name=\"tag.misc_telephone\">Telèfon</string>\n  <string name=\"tag.misc_post_box\">Bústia</string>\n  <string name=\"tag.misc_atm\">Caixer</string>\n  <string name=\"tag.misc_bollard\">Pilona</string>\n  <string name=\"tag.misc_toilets\">Lavabos</string>\n  <string name=\"tag.misc_shelter\">Sopluig</string>\n  <string name=\"tag.misc_surveillance\">Vigilància</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Sense sortida</string>\n  <string name=\"tag.restriction_traffic_light\">Semàfor</string>\n  <string name=\"tag.restriction_one_way\">Un sentit</string>\n  <string name=\"tag.car_fuel_station\">Gasolinera</string>\n  <string name=\"tag.car_parking\">Aparcament</string>\n  <string name=\"tag.car_emergency_phone\">Telèfon d\\'emergència</string>\n  <string name=\"tag.car_turning_circle\">Cercle de gir</string>\n  <string name=\"tag.car_speed_camera\">Radar</string>\n  <string name=\"tag.tourism_view_point\">Mirador</string>\n  <string name=\"tag.tourism_information\">Informació</string>\n  <string name=\"tag.tourism_picnic\">Lloc de pícnic</string>\n  <string name=\"tag.tourism_attraction\">Atracció</string>\n  <string name=\"tag.tourism_theme_park\">Parc temàtic</string>\n  <string name=\"tag.tourism_castle\">Castell</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museu</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Banc</string>\n  <string name=\"tag.amenity_water\">Aigua</string>\n  <string name=\"tag.amenity_pharmacy\">Farmàcia</string>\n  <string name=\"tag.amenity_shop\">Botiga</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Esport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nMetges</string>\n  <string name=\"tag.amenity_recycling\">Reciclatge</string>\n  <string name=\"tag.amenity_place_of_worship\">Lloc de\\npregària</string>\n  <string name=\"tag.amenity_post_office\">Oficina postal</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Escola</string>\n  <string name=\"tag.amenitymore_police\">Policia</string>\n  <string name=\"tag.amenitymore_fire_station\">Parc de bombers</string>\n  <string name=\"tag.amenitymore_bank\">Banc</string>\n  <string name=\"tag.amenitymore_playground\">Parc infantil</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostal</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Menjar ràpid</string>\n  <string name=\"tag.amenitymore_camp_site\">Lloc d\\'acampada</string>\n  <string name=\"tag.way_bridge\">Pont</string>\n  <string name=\"tag.way_zebra_crossing\">Pas de vianants</string>\n  <string name=\"tag.way_motorway\">Autopista</string>\n  <string name=\"tag.way_trunk\">Via ràpida</string>\n  <string name=\"tag.way_primary\">Primària</string>\n  <string name=\"tag.way_secondary\">Secundària</string>\n  <string name=\"tag.way_tertiary\">Terciària</string>\n  <string name=\"tag.way_residential\">Carrer</string>\n  <string name=\"tag.way_service\">Via de servei</string>\n  <string name=\"tag.track_track\">Camí</string>\n  <string name=\"tag.track_cycleway\">Carril bici</string>\n  <string name=\"tag.track_footway\">Sender</string>\n  <string name=\"tag.track_bridleway\">Camí per cavalls</string>\n  <string name=\"tag.track_steps\">Escales</string>\n  <string name=\"tag.track_living_street\">Carrer residencial</string>\n  <string name=\"tag.track_pedestrian\">Via peatonal</string>\n  <string name=\"tag.track_grade1\">Grau 1</string>\n  <string name=\"tag.track_grade2\">Grau 2</string>\n  <string name=\"tag.track_grade3\">Grau 3</string>\n  <string name=\"tag.track_grade4\">Grau 4</string>\n  <string name=\"tag.track_grade5\">Grau 5</string>\n  <string name=\"tag.landuse_farm\">Granja</string>\n  <string name=\"tag.landuse_landfill\">Abocador d\\'escombreries</string>\n  <string name=\"tag.landuse_basin\">Dàrsena</string>\n  <string name=\"tag.landuse_reservoir\">Embassament</string>\n  <string name=\"tag.landuse_forest\">Bosc</string>\n  <string name=\"tag.landuse_allotments\">Parcel·les</string>\n  <string name=\"tag.landuse_cemetery\">Cementiri</string>\n  <string name=\"tag.landuse_recreation_ground\">Àrea\\nrecreativa</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker per a Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Isnpirat per OSMTracker per a Windows Mobile, us permet enregistrar els vostres viatges, marcar punts significatius (amb enregistrament de veu o fotografies) i exportar-ho a format GPX per poder utilitzar-ho després amb eines de l\\'OpenStreetMap com ara el JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Registre de ruta</string>\n  <string name=\"tracklogger_waiting_gps\">Esperant fixar la posició gps per activar els botons..</string>\n  <string name=\"tracklogger_voicerec_title\">Gravació de veu</string>\n  <string name=\"tracklogger_voicerec_text\">Gravant un clip d\\'àudio de {0}s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Atura</string>\n  <string name=\"tracklogger_btnBack\">Enrere</string>\n  <string name=\"tracklogger_tracked\">Tracked:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS desactivat</string>\n  <string name=\"tracklogger_gps_disabled_hint\">El GPS està desactivat. Voleu activar-lo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galeria o càmera?</string>\n  <string name=\"tracklogger_camera\">Feu una foto amb la càmera</string>\n  <string name=\"tracklogger_gallery\">Trieu una fotografia de la galeria</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Llista de punts de ruta (Waypoint)</string>\n  <string name=\"wplist_latitude\">Lat:</string>\n  <string name=\"wplist_longitude\">Long.</string>\n  <string name=\"wplist_elevation\">Ele:</string>\n  <string name=\"wplist_accuracy\">Precisió:</string>\n  <string name=\"wplist_compass\">Deriva:</string>\n  <string name=\"wplist_compass_accuracy\">Precisió brúixola:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gestor de tracks</string>\n  <string name=\"trackmgr_tracklist\">Llista de track</string>\n  <string name=\"trackmgr_waypoints_count\">Waypints (Punts de ruta):</string>\n  <string name=\"trackmgr_trackpoints_count\">Punts:</string>\n  <string name=\"trackmgr_empty\">No teniu cap track.</string>\n  <string name=\"trackmgr_newtrack_error\">No s\\'ha pogut crear la ruta: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Esteu enregistrant la <b>traça núm. {0}</b>\\nTrieu-la al llistat per a continuar</string>\n  <string name=\"trackmgr_contextmenu_stop\">Atura l\\'enregistrament</string>\n  <string name=\"trackmgr_contextmenu_resume\">Reemprèn l\\'enregistrament</string>\n  <string name=\"trackmgr_contextmenu_delete\">Esborra</string>\n  <string name=\"trackmgr_contextmenu_export\">Exporta com a GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Puja a OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Mostra</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalls</string>\n  <string name=\"trackmgr_contextmenu_title\">Ruta #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">S\\'esborrarà la Ruta #{0}</string>\n  <string name=\"trackmgr_deleteall_confirm\">S\\'esborraràn totes les rutes. Segur que ho voleu?</string>\n  <string name=\"trackmgr_exporting\">Exportant la ruta #{0}...</string>\n  <string name=\"trackmgr_exporting_prepare\">S\\'està preparant l\\'exportació...</string>\n  <string name=\"trackmgr_export_error\">No s\\'ha pogut exportar la ruta: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">S\\'exportaran totes les rutes. Això pot trigar bastant. Voleu continuar?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalls de la ruta</string>\n  <string name=\"trackdetail_startdate\">Hora d\\'inici:</string>\n  <string name=\"trackdetail_enddate\">Hora de finalització:</string>\n  <string name=\"trackdetail_startloc\">Comença a:</string>\n  <string name=\"trackdetail_endloc\">S\\'acaba a:</string>\n  <string name=\"trackdetail_exportdate\">Exportada:</string>\n  <string name=\"trackdetail_osm_upload_date\">Pujada a l\\'OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exporta com a GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Encara no s\\'ha exportat)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Encara no s\\'ha pujat)</string>\n  <string name=\"trackdetail_export_display\">Mostra</string>\n  <string name=\"trackdetail_description\">Descripció</string>\n  <string name=\"trackdetail_tags\">Etiquetes (separades per coma)</string>\n  <string name=\"trackdetail_description_mandatory\">Heu d\\'escriure una descripció</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Públic</string>\n  <string name=\"osm_visibility_trackable\">Rastrejable</string>\n  <string name=\"osm_visibility_identifiable\">Identificable</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Puja a l\\'OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Desa i puja</string>\n  <string name=\"osm_upload_tmpfile_failed\">No s\\'ha pogut exportar la ruta a un fitxer temporal</string>\n  <string name=\"osm_upload_oauth_failed\">No s\\'ha pogut autentificar a l\\'OSM</string>\n  <string name=\"osm_upload_sending\">Enviant ruta #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Esperant la resposta del servidor d\\'OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Hi ha hagut un error pujant la ruta</string>\n  <string name=\"osm_upload_bad_response\">El servidor OSM ha retornat un error: ({0}) missagte {1}</string>\n  <string name=\"osm_upload_unauthorized\">Error d\\'autorització. Voleu esborrar les credencials d\\'OpenStreetMap desades?</string>\n  <string name=\"osm_upload_sucess\">S\\'ha pujat correctament a l\\'OpenStreetMap.</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Gravació de veu</string>\n  <string name=\"gpsstatus_record_stillimage\">Preneu una foto</string>\n  <string name=\"gpsstatus_record_textnote\">Nota de text</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configuració</string>\n  <string name=\"menu_waypointlist\">Punts de ruta</string>\n  <string name=\"menu_about\">Quant a</string>\n  <string name=\"menu_displaytrack\">Mostra la ruta</string>\n  <string name=\"menu_stoptracking\">Atura i desa</string>\n  <string name=\"menu_newtrack\">Nova ruta</string>\n  <string name=\"menu_deletetracks\">Esborra totes les rutes</string>\n  <string name=\"menu_continue\">Continua la ruta</string>\n  <string name=\"menu_stopcurrenttrack\">Atura la ruta actual</string>\n  <string name=\"menu_save\">Desa</string>\n  <string name=\"menu_cancel\">Cancel·la</string>\n  <string name=\"menu_export\">Exporta com a GPX</string>\n  <string name=\"menu_osm_upload\">Puja a l\\'OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centra al GPS</string>\n  <string name=\"menu_exportall\">Exporta-ho tot a GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">No s\\'ha pogut escriure al emmagatzematge extern.</string>\n  <string name=\"error_create_track_dir\">No s\\'ha pogut crear la carpeta de rutes %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Si us plau, comproveu si l\\'emmagatzematge extern està correctament inserit i muntat.</string>\n  <string name=\"error_voicerec_failed\">Ha fallat l\\'enregistrament de veu</string>\n  <string name=\"error_userlayout_parsing\">S\\'ha produït un error en processar el fitxer XML de disposició. Torneu a la disposició predeterminada. </string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Enregistrat amb OSMTracker per a  Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Atenció: els valors HDOP no són els HDOP retornats per l\\'aparell GPS. Són aproximats a partir de la precisió de la ubicació en metres.</string>\n  <!--About screen-->\n  <string name=\"about\">Quant a</string>\n  <string name=\"about_text\">Per a més informació, docs i avís d\\'errors, visiteu la pàgina web del projecte:</string>\n  <string name=\"about_translate_text\">Ajuda a traduïr l\\'OSMTracker:</string>\n  <string name=\"about_debug_info\">Informació de depuració</string>\n  <string name=\"about_export_db\">Exporta la base de dades</string>\n  <string name=\"about_exporting_db\">S\\'està exportant la base de dades...</string>\n  <string name=\"about_export_db_result\">Resultat de l\\'exportació de la base de dades: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker està enregistrant</string>\n  <string name=\"notification_title\">OSMTracker està enregistrant (#{0})</string>\n  <string name=\"notification_text\">Toqueu aquí per veure la pantalla principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Mostra ruta</string>\n  <string name=\"displaytrack_map\">Mostra el mapa de fons</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Desa</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisió</string>\n  <string name=\"various_accuracy_with_sats\">Precisió {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Esperant posició GPS... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}º</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Espereu per direcció...</string>\n  <string name=\"various_heading_unknown\">No s\\'ha pogut determinar la direcció</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Mostra ruta OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Gravació de veu</string>\n  <string name=\"wpt_stillimage\">Fotografia</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTrackeru</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Přiblížit</string>\n  <string name=\"acc.zoom_out\">Oddálit</string>\n  <string name=\"acc.zoom_center\">Střed přiblížení</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikátor síly satelitního signálu</string>\n  <string name=\"acc.record_indicator\">Indikátor průběhu záznamu</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikátor stavu stopy</string>\n  <string name=\"acc.upload_status\">Indikátor stavu nahrávání na OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Nastavení</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Nastavení GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Zobrazí obrazovku nastavení GPS</string>\n  <string name=\"prefs_check_gps_startup\">Kontrola GPS při startu</string>\n  <string name=\"prefs_check_gps_startup_summary\">Zkontrolovat, zda je GPS pro startu zakázán a zobrazit možnost ji povolit</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorovat hodiny z GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorovat hodiny z GPS a použít hodiny Androidu pro časové značky</string>\n  <string name=\"prefs_use_barometer\">Zaznamenávat barometrický tlak [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Změna se projeví po restartu záznamu</string>\n  <string name=\"prefs_gps_logging_interval\">Interval záznamu GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Použijte 0 pro nejkratší možný (má vliv na spotřebu baterie)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekundy</string>\n  <string name=\"prefs_gps_logging_min_distance\">Vzdálenost záznamu GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Min. vzdálenost v metrech mezi body trasy, zvolte 0 pro nejmenší možné.</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metrů</string>\n  <string name=\"prefs_ui\">Uživatelské rozhraní</string>\n  <string name=\"prefs_ui_picture_source\">Výchozí zdroj fotografií</string>\n  <string name=\"prefs_ui_picture_source_summary\">Použít fotografie z fotoaparátu, nebo z galerie?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Fotoaparát</item>\n    <item>Galerie</item>\n    <item>Vždy se zeptat</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Nastavení sad tlačítek</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Vybrat vlastní sadu tlačítek (viz. dokumentace)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">VÝCHOZÍ ROZLOŽENÍ</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Výchozí</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">STAŽENÁ ROZLOŽENÍ</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Nemáte stažené soubory rozložení</string>\n  <string name=\"prefs_ui_available_layout\">Dostupná rozložení</string>\n  <string name=\"prefs_ui_github_repository_settings\">Nastavení úložiště Github</string>\n  <string name=\"prefs_ui_orientation\">Orientace</string>\n  <string name=\"prefs_ui_orientation_summary\">Preferovaná orientace obrazovky s tlačítky</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automaticky</item>\n    <item>Na výšku</item>\n    <item>Na šířku</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Trvání zvukového záznamu</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekundy</string>\n  <string name=\"prefs_theme\">Grafické téma hlavní obrazovky</string>\n  <string name=\"prefs_theme_summary\">Aby se změny projevily, je třeba restart aplikace</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS výchozí</item>\n    <item>OS výchozí (tmavý)</item>\n    <item>OS výchozí (světlý)</item>\n    <item>Vysoký kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Obrazovka vždy zapnutá</string>\n  <string name=\"prefs_display_always_on_summary\">Obrazovka stále zapnutá během trasování. Deaktivace uspoří baterii.</string>\n  <string name=\"prefs_displaytrack_osm\">Podkladová mapa</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Zobrazit mapu OpenStreetMap pod trasou. Je třeba datové spojení.</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Vždy zobrazovat pozadí OpenStreetMap? Vyžaduje datové připojení</string>\n  <string name=\"prefs_output\">Nastavení GPX</string>\n  <string name=\"prefs_storage_dir\">Složka pro ukládání v dokumentech</string>\n  <string name=\"prefs_storage_dir_hint\">Bude mít vliv pro příští trasu (ne současnou)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Pro každou trasu novou složku</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Uložit každou trasu a její přidružené soubory do její vlastní složky</string>\n  <string name=\"prefs_output_filename\">Název souboru pro pojmenované trasy</string>\n  <string name=\"prefs_output_filename_summary\">Šablona pro název souboru, pokud má trasa jméno</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Název stopy</item>\n    <item>Název, datum a čas zahájení</item>\n    <item>Datum a čas zahájení, název</item>\n    <item>Datum a čas zahájení</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Označení souboru</string>\n  <string name=\"prefs_output_filename_label_summary\">Tento štítek bude připojen na konec názvu souboru.</string>\n  <string name=\"prefs_output_accuracy\">Přesnost v souboru GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Přidat informaci o přesnosti do souboru GPX, se jménem bodu na trase nebo v komentáři k bodu na trase</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nikde</item>\n    <item>Se jménem bodu na trase</item>\n    <item>V komentáři k bodu na trase</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Použít aproximaci HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Vyplnit HDOP v GPX s přibližnou hodnotou z přesnosti</string>\n  <string name=\"prefs_sound_enabled\">Povolit zvuk</string>\n  <string name=\"prefs_sound_enabled_summary\">Přehrát zvuk při začátku a konci nahrávání zvuku</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Smazat OSM autentizaci</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Zapomenout OSM údaje pro přihlášení a pověření a přiměj OSMTracker, aby se znovu zeptal</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Je třeba autorizace OSMTrackeru pro opakované nahrání. Jste si jisti?</string>\n  <string name=\"prefs_map_tile\">Poskytovatel mapových dlaždic</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Nikde</item>\n    <item>V komentáři</item>\n    <item>V příponě</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportovat směr kompasu</string>\n  <string name=\"prefs_compass_heading_summary\">Nastavuje, zda a jak budou data kompasu exportovány do GPX souboru</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Různé</string>\n  <string name=\"tag.restriction\">Omezení</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Turistika</string>\n  <string name=\"tag.amenity\">Občanská vybavenost</string>\n  <string name=\"tag.amenity_more\">Občanská vybavenost (+)</string>\n  <string name=\"tag.way\">Cesta</string>\n  <string name=\"tag.track\">Trasa</string>\n  <string name=\"tag.landuse\">Využití krajiny</string>\n  <string name=\"tag.misc_bus_stop\">Zastávka autobusu</string>\n  <string name=\"tag.misc_railway\">Železnice</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Poštovní schránka</string>\n  <string name=\"tag.misc_atm\">Bankomat</string>\n  <string name=\"tag.misc_bollard\">Dopravní sloupek</string>\n  <string name=\"tag.misc_toilets\">Toalety</string>\n  <string name=\"tag.misc_shelter\">Přístřešek</string>\n  <string name=\"tag.misc_surveillance\">Sledovací zařízení</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Slepá cesta</string>\n  <string name=\"tag.restriction_traffic_light\">Semafory</string>\n  <string name=\"tag.restriction_one_way\">Jednosměrka</string>\n  <string name=\"tag.car_fuel_station\">Čerpací stanice</string>\n  <string name=\"tag.car_parking\">Parkoviště</string>\n  <string name=\"tag.car_emergency_phone\">Nouzový telefon</string>\n  <string name=\"tag.car_turning_circle\">Obratiště</string>\n  <string name=\"tag.car_speed_camera\">Kamera měření rychlosti</string>\n  <string name=\"tag.tourism_view_point\">Vyhlídka</string>\n  <string name=\"tag.tourism_information\">Informace</string>\n  <string name=\"tag.tourism_picnic\">Místo pro piknik</string>\n  <string name=\"tag.tourism_attraction\">Atrakce</string>\n  <string name=\"tag.tourism_theme_park\">Tématický park</string>\n  <string name=\"tag.tourism_castle\">Hrad</string>\n  <string name=\"tag.tourism_monument\">Památník</string>\n  <string name=\"tag.tourism_museum\">Muzeum</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Lavička</string>\n  <string name=\"tag.amenity_water\">Voda</string>\n  <string name=\"tag.amenity_pharmacy\">Lékárna</string>\n  <string name=\"tag.amenity_shop\">Obchod</string>\n  <string name=\"tag.amenity_marina\">Přístav</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Nemocnice,\\nlékaři</string>\n  <string name=\"tag.amenity_recycling\">Kontejner pro recyklaci</string>\n  <string name=\"tag.amenity_place_of_worship\">Náboženské\\nobjekty</string>\n  <string name=\"tag.amenity_post_office\">Pošta</string>\n  <string name=\"tag.amenity_library\">Knihovna</string>\n  <string name=\"tag.amenitymore_school\">Škola</string>\n  <string name=\"tag.amenitymore_police\">Policie</string>\n  <string name=\"tag.amenitymore_fire_station\">Hasičská stanice</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Hřiště</string>\n  <string name=\"tag.amenitymore_pub\">Hospoda</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurace</string>\n  <string name=\"tag.amenitymore_fastfood\">Rychlé občerstvení</string>\n  <string name=\"tag.amenitymore_camp_site\">Kemp</string>\n  <string name=\"tag.way_bridge\">Most</string>\n  <string name=\"tag.way_zebra_crossing\">Přechod pro chodce</string>\n  <string name=\"tag.way_motorway\">Dálnice</string>\n  <string name=\"tag.way_trunk\">Silnice pro motorová vozidla</string>\n  <string name=\"tag.way_primary\">Silnice první třídy</string>\n  <string name=\"tag.way_secondary\">Silnice druhé třídy</string>\n  <string name=\"tag.way_tertiary\">Silnice třetí třídy</string>\n  <string name=\"tag.way_residential\">Obydlená</string>\n  <string name=\"tag.way_service\">Účelová komunikace</string>\n  <string name=\"tag.track_track\">Cesta</string>\n  <string name=\"tag.track_cycleway\">Cyklostezka</string>\n  <string name=\"tag.track_footway\">Chodník</string>\n  <string name=\"tag.track_bridleway\">Polní cesta</string>\n  <string name=\"tag.track_steps\">Schody</string>\n  <string name=\"tag.track_living_street\">Ulice</string>\n  <string name=\"tag.track_pedestrian\">Pěší zóna</string>\n  <string name=\"tag.track_grade1\">Stupeň 1</string>\n  <string name=\"tag.track_grade2\">Stupeň 2</string>\n  <string name=\"tag.track_grade3\">Stupeň 3</string>\n  <string name=\"tag.track_grade4\">Stupeň 4</string>\n  <string name=\"tag.track_grade5\">Stupeň 5</string>\n  <string name=\"tag.landuse_farm\">Farma</string>\n  <string name=\"tag.landuse_landfill\">Smetiště</string>\n  <string name=\"tag.landuse_basin\">Vodní nádrž</string>\n  <string name=\"tag.landuse_reservoir\">Umělá\\nvodní nádrž</string>\n  <string name=\"tag.landuse_forest\">Les</string>\n  <string name=\"tag.landuse_allotments\">Zahrádkářská kolonie</string>\n  <string name=\"tag.landuse_cemetery\">Hřbitov</string>\n  <string name=\"tag.landuse_recreation_ground\">Rekreační\\nplocha</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker pro Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirováno aplikací OSMTracker pro Windows Mobile, který umožňuje trasovat vaše cesty, označit důležité body na cestě (hlasovou poznámku, fotky) a exportovat je v GPX formátu pro pozdější použití s nástroji pro Open Street Map jako je JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Zaznamenávač tras</string>\n  <string name=\"tracklogger_waiting_gps\">Čekám na GPS signál pro odemknutí tlačítek...</string>\n  <string name=\"tracklogger_voicerec_title\">Záznam hlasu</string>\n  <string name=\"tracklogger_voicerec_text\">Zaznamenávám {0}s zvukového klipu.</string>\n  <string name=\"tracklogger_voicerec_stop\">Zastavit</string>\n  <string name=\"tracklogger_btnBack\">Zpět</string>\n  <string name=\"tracklogger_tracked\">Sledované:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS zakázána</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS je zakázána. Chcete ji povolit?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerie, nebo fotoaparát?</string>\n  <string name=\"tracklogger_camera\">Pořídit fotografii fotoaparátem?</string>\n  <string name=\"tracklogger_gallery\">Vybrat fotografii z galerie</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Seznam bodů na trase</string>\n  <string name=\"wplist_latitude\">Zem. šířka:</string>\n  <string name=\"wplist_longitude\">Zem. délka:</string>\n  <string name=\"wplist_elevation\">Výška:</string>\n  <string name=\"wplist_accuracy\">Přesnost:</string>\n  <string name=\"wplist_compass\">Orient. komp.:</string>\n  <string name=\"wplist_compass_accuracy\">Přesn. komp.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Správce tras</string>\n  <string name=\"trackmgr_tracklist\">Seznam tras:</string>\n  <string name=\"trackmgr_waypoints_count\">Body na trase:</string>\n  <string name=\"trackmgr_trackpoints_count\">Body trasy:</string>\n  <string name=\"trackmgr_empty\">Zatím nemáte žádné trasy.</string>\n  <string name=\"trackmgr_newtrack_hint\">Stisknutím nahrajete novou stopu.</string>\n  <string name=\"trackmgr_newtrack_error\">Nelze vytvořit novou trasu: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Právě nahráváte <b>trasu  #{0}</b>\\nPro pokračování ji vyberte v seznamu</string>\n  <string name=\"trackmgr_contextmenu_stop\">Zastavit trasování</string>\n  <string name=\"trackmgr_contextmenu_resume\">Obnovit trasování</string>\n  <string name=\"trackmgr_contextmenu_delete\">Smazat</string>\n  <string name=\"trackmgr_contextmenu_export\">Export</string>\n  <string name=\"trackmgr_contextmenu_share\">Sdílet</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Nahrát na OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Zobrazit</string>\n  <string name=\"trackmgr_contextmenu_details\">Podrobnosti</string>\n  <string name=\"trackmgr_contextmenu_title\">Trasa #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Trasa #{0} bude smazána</string>\n  <string name=\"trackmgr_deleteall_confirm\">Všechny trasy budou smazány. Jste si jisti?</string>\n  <string name=\"trackmgr_exporting\">Exportuji trasu #{0}...</string>\n  <string name=\"trackmgr_exporting_prepare\">Přípravuji export...</string>\n  <string name=\"trackmgr_export_error\">Není možné exportovat trasu: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Všechny trasy budou exportovány, to může být časově náročné. Jste si jisti?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Není možné zpracovat trasu: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Podrobnosti trasy</string>\n  <string name=\"trackdetail_startdate\">Čas začátku:</string>\n  <string name=\"trackdetail_enddate\">Čas konce:</string>\n  <string name=\"trackdetail_startloc\">Začátek v:</string>\n  <string name=\"trackdetail_endloc\">Konec v:</string>\n  <string name=\"trackdetail_exportdate\">Exportováno:</string>\n  <string name=\"trackdetail_osm_upload_date\">Nahráno na OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportovat jako GPX</string>\n  <string name=\"trackdetail_export_notyet\">(ještě není exportováno)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(ještě není nahráno)</string>\n  <string name=\"trackdetail_export_display\">Zobrazit</string>\n  <string name=\"trackdetail_name\">Název</string>\n  <string name=\"trackdetail_description\">Popis</string>\n  <string name=\"trackdetail_tags\">Značky (oddělené čárkou)</string>\n  <string name=\"trackdetail_description_mandatory\">Je třeba vložit popis</string>\n  <string name=\"osm_visibility_private\">Soukromé</string>\n  <string name=\"osm_visibility_public\">Veřejné</string>\n  <string name=\"osm_visibility_trackable\">Trasovatelné</string>\n  <string name=\"osm_visibility_identifiable\">Identifikovatelné</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Nahrání na OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Uložit a nahrát</string>\n  <string name=\"osm_upload_tmpfile_failed\">Není možné exportovat trasu do dočasného souboru</string>\n  <string name=\"osm_upload_oauth_failed\">Není možné se přihlásit do OSM</string>\n  <string name=\"osm_upload_sending\">Posílám trasu #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Čekám na odpověď od serveru OpenStreetMap</string>\n  <string name=\"osm_upload_error\">Během nahrávání trasy nastala chyba </string>\n  <string name=\"osm_upload_bad_response\">OSM server vrátil chybu: ({0}) zpráva {1}</string>\n  <string name=\"osm_upload_unauthorized\">Chyba autorizace. Chcete vymazat uložené přihlašovací údaje OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Nahrání na OpenStreetMap bylo úspěšné</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Záznam hlasu</string>\n  <string name=\"gpsstatus_record_stillimage\">Vyfotit</string>\n  <string name=\"gpsstatus_record_textnote\">Textová poznámka</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Název bodu trasy/text </string>\n  <string name=\"waypoint_name_hint\">Zadejte název bodu trasy</string>\n  <string name=\"edit_waypoint_bt_preview\">Otevřít soubor</string>\n  <string name=\"edit_waypoint_bt_save\">Uložit</string>\n  <string name=\"edit_waypoint_bt_delete\">Smazat</string>\n  <string name=\"edit_waypoint_bt_cancel\">Zrušit</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Smazat bod trasy</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Smazat tento bod trasy?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Smazat</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Zrušit</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Nastavení</string>\n  <string name=\"menu_waypointlist\">Body trasy</string>\n  <string name=\"menu_about\">O aplikaci</string>\n  <string name=\"menu_displaytrack\">Zobrazit trasu</string>\n  <string name=\"menu_stoptracking\">Zastavit a uložit</string>\n  <string name=\"menu_newtrack\">Nová trasa</string>\n  <string name=\"menu_deletetracks\">Smazat všechny trasy</string>\n  <string name=\"menu_continue\">Pokračovat v trase</string>\n  <string name=\"menu_stopcurrenttrack\">Zastavit současnou trasu</string>\n  <string name=\"menu_save\">Uložit</string>\n  <string name=\"menu_cancel\">Zrušit</string>\n  <string name=\"menu_export\">Exportovat jako GPX</string>\n  <string name=\"menu_osm_upload\">Nahrání na OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Vystředit dle GPS</string>\n  <string name=\"menu_exportall\">Exportovat vše jako GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Nelze zapisovat do externího úložiště</string>\n  <string name=\"error_create_track_dir\">Nelze vytvořit složku trasy %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Zkontrolujte, prosím, jestli je externí úložiště správně vloženo a připojeno.</string>\n  <string name=\"error_voicerec_failed\">Záznam hlasu selhal</string>\n  <string name=\"error_userlayout_parsing\">Došlo k chybě během zpracování XML souboru pro rozvržení. Přejděte, prosím, k výchozímu rozvržení.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Vyžadováno povolení</string>\n  <string name=\"storage_permission_for_export_GPX\">Pro export stopy GPX je třeba zapsat do úložiště.</string>\n  <string name=\"storage_permission_for_display_track\">Pro správné zobrazení stopy potřebujeme přístup k úložišti.</string>\n  <string name=\"storage_permission_for_share_track\">Pro správné sdílení stopy potřebujeme přístup k úložišti.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Pro nahrání stopy do OSM potřebujeme přístup k úložišti.</string>\n  <string name=\"acccept\">Přijmout</string>\n  <string name=\"gps_perms_required\">Nelze pokračovat bez povolení GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Trasováno pomocí OSMTracker pro Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Upozornění: hodnoty HDOP nejsou hodnotami HDOP vrácenými zařízením GPS. Hodnoty jsou aproximovány z přesnosti lokace v metrech.</string>\n  <!--About screen-->\n  <string name=\"about\">O aplikaci</string>\n  <string name=\"about_text\">Více informací, dokumentaci a hlášení chyb naleznete na domovské stránce projektu.</string>\n  <string name=\"about_translate_text\">Pomozte přeložit OSMTracker:</string>\n  <string name=\"about_debug_info\">Ladicí informace</string>\n  <string name=\"about_export_db\">Export databáze</string>\n  <string name=\"about_exporting_db\">Exportuji databázi...</string>\n  <string name=\"about_export_db_result\">Výsledek exportu databáze: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker nyní trasuje</string>\n  <string name=\"notification_title\">OSMTracker nyní trasuje (#{0})</string>\n  <string name=\"notification_text\">Klepněte zde pro zobrazení hlavní obrazovky</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Zobrazit trasu</string>\n  <string name=\"displaytrack_map\">Zobrazit podkladovou mapu</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Uložit</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Přesnost</string>\n  <string name=\"various_accuracy_with_sats\">Přesnost {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Čekám na GPS signál… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Hledá se sever...</string>\n  <string name=\"various_heading_unknown\">Sever nelze určit</string>\n  <string name=\"various_export_finished\">Proces exportu skončil úspěšně</string>\n  <string name=\"various_waiting_position\">Pozice není dostupná</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Zobrazení trasy OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Aktualizovat &amp; instalovat</string>\n  <string name=\"buttons_presets_context_menu_delete\">Smazat</string>\n  <string name=\"buttons_presets_updating_layout\">Aktualizuje se…</string>\n  <string name=\"buttons_presets_successful_update\">Rozvržení bylo úspěšně aktualizováno</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Rozvržení nebylo aktualizováno, zkuste to znovu později</string>\n  <string name=\"buttons_presets_delete_message\">Opravdu chcete smazat rozložení {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Vskutku</string>\n  <string name=\"buttons_presets_successful_delete\">Rozvržení bylo úspěšně smazáno</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Adresář ikon byl úspěšně smazán</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Tento soubor neměl přidružený žádný adresář ikon</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Rozvržení nelze odstranit</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Chyba: nelze se připojit k Internetu</string>\n  <string name=\"available_layouts_response_null_exception\">Chyba: nelze se připojit k výchozím úložištím vlastních rozvržení</string>\n  <string name=\"available_layouts_connecting_message\">(připojuje se…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Stáhnout</string>\n  <string name=\"available_layouts_not_available_language\">Váš jazyk není k dispozici, vyberte jeden ze seznamu</string>\n  <string name=\"available_layouts_language_dialog_title\">Dostupné jazyky</string>\n  <string name=\"available_layouts_checking_language_dialog\">Kontrola verzí místního jazyka</string>\n  <string name=\"available_layouts_downloading_dialog\">Stahování…</string>\n  <string name=\"available_layouts_successful_download\">Rozvržení bylo úspěšně staženo</string>\n  <string name=\"available_layouts_unsuccessful_download\">Rozvržení nelze stáhnout, zkuste to znovu později</string>\n  <string name=\"available_layouts_null_response_received\">Chyba při načítání dat ze serveru</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Výchozí</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Vlastní</string>\n  <string name=\"github_repository_settings_username\">Github uživatelské jméno:</string>\n  <string name=\"github_repository_settings_repository_name\">Název úložiště:</string>\n  <string name=\"github_repository_settings_branch_name\">Název oddělené větve:</string>\n  <string name=\"github_repository_settings_valid_server\">Úložiště na Github je platné</string>\n  <string name=\"github_repository_settings_invalid_server\">Github úložiště je neplatné</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker pro Android™ Úvod</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Vítejte v OSMTracker pro Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Tato aplikace je svobodný software, který respektuje vaši svobodu!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Šťastné trasování 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker pro Android použije vaši polohu GPS k záznamu trasových bodů a bodů cest, i když je aplikace spuštěna na pozadí. \\nVaše data se nepoužívají k podpoře reklam.</string>\n  <string name=\"no_app_to_handle_file_type\">Nebyla nalezena žádná aplikace k otevření tohoto souboru.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Záznam hlasu</string>\n  <string name=\"wpt_stillimage\">Fotografie</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoom ind</string>\n  <string name=\"acc.zoom_out\">Zoom ud</string>\n  <string name=\"acc.zoom_center\">Centrum</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikator for satellit-signalstyrke</string>\n  <string name=\"acc.record_indicator\">Indikator for optagestatus</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikator for track-status </string>\n  <string name=\"acc.upload_status\">Indikator for OpenStreetMap upload-status </string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Indstillinger</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-indstillinger</string>\n  <string name=\"prefs_gps_os_settings_summary\">Vis systemets GPS-indstillinger</string>\n  <string name=\"prefs_check_gps_startup\">Check GPS ved start</string>\n  <string name=\"prefs_check_gps_startup_summary\">Check om GPS er aktiveret ved start, og tilbyd at aktivere den</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorer GPS-tid</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorer GPS-tid og brug Android-uret til tidsstempler</string>\n  <string name=\"prefs_use_barometer\">Log barometrisk tryk [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Skift kræver genstart af sporet</string>\n  <string name=\"prefs_gps_logging_interval\">GPS-logningsinterval</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Brug 0 for kortest mulige (påvirker batteritid)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekunder</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS-logningsafstand</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Min. afstand mellem sporpunkter i meter, brug 0 for den kortest mulige.</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">meter</string>\n  <string name=\"prefs_ui\">Brugerflade</string>\n  <string name=\"prefs_ui_picture_source\">Standard fotokilde</string>\n  <string name=\"prefs_ui_picture_source_summary\">Tag fotos fra kamera eller galleri?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galleri</item>\n    <item>Spørg altid</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Knap-layout</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Brug tilpasset sæt knapper (see dokumentation)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">STANDARD-LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standard</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">HENTET LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Du har ikke hentet nogle layout-filer</string>\n  <string name=\"prefs_ui_available_layout\">Tilgængelige layouts</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github-indstillinger</string>\n  <string name=\"prefs_ui_orientation\">Orientering</string>\n  <string name=\"prefs_ui_orientation_summary\">Foretrukket orientering for knapskærmen</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisk</item>\n    <item>Stående</item>\n    <item>&gt;Liggende</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Varighed af taleoptagelse</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekunder</string>\n  <string name=\"prefs_theme\">Hovedskærmens grafiske tema</string>\n  <string name=\"prefs_theme_summary\">Program-genstart krævet før ændringer træder i kraft</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS standard</item>\n    <item>OS standard (mørk)</item>\n    <item>OS standard (lys)</item>\n    <item>Høj kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Skærm altid tændt</string>\n  <string name=\"prefs_display_always_on_summary\">Skærm forbliver tændt under tracking. Inaktiver for at spare batteri</string>\n  <string name=\"prefs_displaytrack_osm\">Baggrundskort</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Vis OpenStreetMap-kort under track. Kræver dataforbindelse</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Vis altid OpenStreetMap-baggrund? Kræver en dataforbindelse</string>\n  <string name=\"prefs_output\">GPX-indstillinger</string>\n  <string name=\"prefs_storage_dir\">Lagringsmappe i dokumenter</string>\n  <string name=\"prefs_storage_dir_hint\">Gældende for næste track (ikke det nuværende)</string>\n  <string name=\"prefs_output_one_dir_per_track\">En mappe per track</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Gem hvert track og tilhørende filer i egen mappe</string>\n  <string name=\"prefs_output_filename\">Filnavn for navngivne tracks</string>\n  <string name=\"prefs_output_filename_summary\">Mønster for filnavn hvis track har et navn</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Track-navn</item>\n    <item>Navn, startdato og tid</item>\n    <item>Startdato og tid, navn</item>\n    <item>Startdato og tid</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Filnavnetiket</string>\n  <string name=\"prefs_output_filename_label_summary\">Denne etiket vil blive tilføjet i slutningen af ​​filnavnet</string>\n  <string name=\"prefs_output_accuracy\">Præcision i GPX-fil</string>\n  <string name=\"prefs_output_accuracy_summary\">Tilføj præcisionsinfo til GPX-fil, med waypoint-navn eller i waypoint-kommentar</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Ingen</item>\n    <item>Med waypoint-navn</item>\n    <item>I waypoint-kommentar</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Brug HDOP-approksimering</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Udfyld HDOP i GPX med approksimeringsværdi fra præcision</string>\n  <string name=\"prefs_sound_enabled\">Aktiver lyd</string>\n  <string name=\"prefs_sound_enabled_summary\">Afspil lyde når taleoptagelse starter og stopper</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Nulstil OSM-authentifikation</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Glem OSM-brugernavn og -tilladelser og tving OSMTracker til at spørge om dem igen</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Dette betyder at du vil skulle autorisere OSMTracker for at kunne uploade igen. Er du sikker?</string>\n  <string name=\"prefs_map_tile\">Leverandør af kortfliser</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Deaktiveret</item>\n    <item>til kommentar</item>\n    <item>til udvidelse</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Eksporter kompasretning</string>\n  <string name=\"prefs_compass_heading_summary\">Definer om og hvordan kompasdata eksporteres til GPX-filen</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Div.</string>\n  <string name=\"tag.restriction\">Begrænsning</string>\n  <string name=\"tag.car\">Bil</string>\n  <string name=\"tag.tourism\">Turisme</string>\n  <string name=\"tag.amenity\">Tilbehør</string>\n  <string name=\"tag.amenity_more\">Tilbehør (+)</string>\n  <string name=\"tag.way\">Vej</string>\n  <string name=\"tag.track\">Spor</string>\n  <string name=\"tag.landuse\">Brug af område</string>\n  <string name=\"tag.misc_bus_stop\">Bus stop</string>\n  <string name=\"tag.misc_railway\">Jernbane</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Postkasse</string>\n  <string name=\"tag.misc_atm\">Pengeautomat</string>\n  <string name=\"tag.misc_bollard\">Bom</string>\n  <string name=\"tag.misc_toilets\">Toilet</string>\n  <string name=\"tag.misc_shelter\">Skur/Ly</string>\n  <string name=\"tag.misc_surveillance\">Overvågning</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Blind vej</string>\n  <string name=\"tag.restriction_traffic_light\">Trafiklys</string>\n  <string name=\"tag.restriction_one_way\">Ensrettet</string>\n  <string name=\"tag.car_fuel_station\">Benzinstation</string>\n  <string name=\"tag.car_parking\">Parkering</string>\n  <string name=\"tag.car_emergency_phone\">Nødtelefon</string>\n  <string name=\"tag.car_turning_circle\">Vendeplads</string>\n  <string name=\"tag.car_speed_camera\">Fotofælde</string>\n  <string name=\"tag.tourism_view_point\">Udsigtspunkt</string>\n  <string name=\"tag.tourism_information\">Information</string>\n  <string name=\"tag.tourism_picnic\">Resteplads</string>\n  <string name=\"tag.tourism_attraction\">Attraktion</string>\n  <string name=\"tag.tourism_theme_park\">Forlystelsespark</string>\n  <string name=\"tag.tourism_castle\">Slot</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Biograf</string>\n  <string name=\"tag.amenity_bench\">Bænk</string>\n  <string name=\"tag.amenity_water\">Vand</string>\n  <string name=\"tag.amenity_pharmacy\">Apotek</string>\n  <string name=\"tag.amenity_shop\">Butik</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxa</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nLæger</string>\n  <string name=\"tag.amenity_recycling\">Genbrug</string>\n  <string name=\"tag.amenity_place_of_worship\">Sted for\\ntilbedelse</string>\n  <string name=\"tag.amenity_post_office\">Posthus</string>\n  <string name=\"tag.amenity_library\">Bibliotek</string>\n  <string name=\"tag.amenitymore_school\">Skole</string>\n  <string name=\"tag.amenitymore_police\">Politi</string>\n  <string name=\"tag.amenitymore_fire_station\">Brandstation</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Legeplads</string>\n  <string name=\"tag.amenitymore_pub\">Pub-Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Vandrehjem</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Fastfood</string>\n  <string name=\"tag.amenitymore_camp_site\">Camping</string>\n  <string name=\"tag.way_bridge\">Bro</string>\n  <string name=\"tag.way_zebra_crossing\">Fodgængerfelt</string>\n  <string name=\"tag.way_motorway\">Motorvej</string>\n  <string name=\"tag.way_trunk\">Trunk</string>\n  <string name=\"tag.way_primary\">Primær</string>\n  <string name=\"tag.way_secondary\">Sekundær</string>\n  <string name=\"tag.way_tertiary\">Tertiær</string>\n  <string name=\"tag.way_residential\">Beboelse</string>\n  <string name=\"tag.way_service\">Service</string>\n  <string name=\"tag.track_track\">Track</string>\n  <string name=\"tag.track_cycleway\">Cykelsti</string>\n  <string name=\"tag.track_footway\">Gangsti</string>\n  <string name=\"tag.track_bridleway\">Hestesti</string>\n  <string name=\"tag.track_steps\">Trappe</string>\n  <string name=\"tag.track_living_street\">Stillevej</string>\n  <string name=\"tag.track_pedestrian\">Fodgænger</string>\n  <string name=\"tag.track_grade1\">Grad 1</string>\n  <string name=\"tag.track_grade2\">Grad 2</string>\n  <string name=\"tag.track_grade3\">Grad 3</string>\n  <string name=\"tag.track_grade4\">Grad 4</string>\n  <string name=\"tag.track_grade5\">Grad 5</string>\n  <string name=\"tag.landuse_farm\">Gård</string>\n  <string name=\"tag.landuse_landfill\">Losseplads</string>\n  <string name=\"tag.landuse_basin\">Bassin</string>\n  <string name=\"tag.landuse_reservoir\">Reservoir</string>\n  <string name=\"tag.landuse_forest\">Skov</string>\n  <string name=\"tag.landuse_allotments\">Kolonihaver</string>\n  <string name=\"tag.landuse_cemetery\">Kirkegård</string>\n  <string name=\"tag.landuse_recreation_ground\">Rekreativt\\nområde</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker til Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspireret af OSMTracker på Windows Mobile, der giver dig mulighed for at tracke dine rejser, markerer betydelige waypoints (Tale optagelse, fotos), eksportere dem i GPX format til senere brug sammen med Open Street Map værktøjer som JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Track logger</string>\n  <string name=\"tracklogger_waiting_gps\">Venter på GPS fix før knapper aktiveres…</string>\n  <string name=\"tracklogger_voicerec_title\">Tale optagelse</string>\n  <string name=\"tracklogger_voicerec_text\">Optager et {0}s lydklip.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stop</string>\n  <string name=\"tracklogger_btnBack\">Tilbage</string>\n  <string name=\"tracklogger_tracked\">Tracked: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS slukket</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS er slukket. Vil du tænde den?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galleri eller kamera?</string>\n  <string name=\"tracklogger_camera\">Tag foto med kamera</string>\n  <string name=\"tracklogger_gallery\">Vælg foto fra galleri</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Waypoint-liste</string>\n  <string name=\"wplist_latitude\">Bred: </string>\n  <string name=\"wplist_longitude\">Læng.: </string>\n  <string name=\"wplist_elevation\">Høj: </string>\n  <string name=\"wplist_accuracy\">Nøj: </string>\n  <string name=\"wplist_compass\">Komp. ret.:</string>\n  <string name=\"wplist_compass_accuracy\">Komp. præc.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Track-håndtering</string>\n  <string name=\"trackmgr_tracklist\">Track-liste:</string>\n  <string name=\"trackmgr_waypoints_count\">Waypoints: </string>\n  <string name=\"trackmgr_trackpoints_count\">Track-punkter: </string>\n  <string name=\"trackmgr_empty\">Du har ingen tracks.</string>\n  <string name=\"trackmgr_newtrack_hint\">Tryk for at optage et nyt spor</string>\n  <string name=\"trackmgr_newtrack_error\">Kunne ikke oprette nyt track: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Du optager i øjeblikket <b>track #{0}</b>\\nVælg det på listen for at fortsætte</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stop tracking</string>\n  <string name=\"trackmgr_contextmenu_resume\">Gentoptag tracking</string>\n  <string name=\"trackmgr_contextmenu_delete\">Slet</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksporter</string>\n  <string name=\"trackmgr_contextmenu_share\">Del</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Upload til OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Vis</string>\n  <string name=\"trackmgr_contextmenu_details\">Detaljer</string>\n  <string name=\"trackmgr_contextmenu_title\">Track #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Track #{0} bliver slettet</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alle tracks bliver slettet. Er du sikker?</string>\n  <string name=\"trackmgr_exporting\">Eksporterer track #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Forbereder eksport...</string>\n  <string name=\"trackmgr_export_error\">Kunne ikke eksportere track: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alle tracks bliver eksporteret. Det kan tage noget tid. Er du sikker?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Kan ikke bearbejde sporet: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Track-detaljer</string>\n  <string name=\"trackdetail_startdate\">Starttid:</string>\n  <string name=\"trackdetail_enddate\">Sluttid:</string>\n  <string name=\"trackdetail_startloc\">Starter ved:</string>\n  <string name=\"trackdetail_endloc\">Slutter ved:</string>\n  <string name=\"trackdetail_exportdate\">Eksporteret:</string>\n  <string name=\"trackdetail_osm_upload_date\">Uploaded til OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Eksporter til GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ikke eksporteret endnu)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ikke uploaded endnu)</string>\n  <string name=\"trackdetail_export_display\">Vis</string>\n  <string name=\"trackdetail_name\">Navn</string>\n  <string name=\"trackdetail_description\">Beskrivelse</string>\n  <string name=\"trackdetail_tags\">Tags (kommasepareret)</string>\n  <string name=\"trackdetail_description_mandatory\">Du skal skrive en beskrivelse</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Offentlig</string>\n  <string name=\"osm_visibility_trackable\">Sporbar</string>\n  <string name=\"osm_visibility_identifiable\">Identificérbar</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap upload</string>\n  <string name=\"osm_upload_ok\">Gem og upload</string>\n  <string name=\"osm_upload_tmpfile_failed\">Kunne ikke eksportere track til midlertidig fil</string>\n  <string name=\"osm_upload_oauth_failed\">Kunne ikke logge på OSM</string>\n  <string name=\"osm_upload_sending\">Sender track #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Venter på OpenStreetMap server svar…</string>\n  <string name=\"osm_upload_error\">Fejl under upload af track</string>\n  <string name=\"osm_upload_bad_response\">OSM serveren returnerede en fejl: ({0}) besked {1}</string>\n  <string name=\"osm_upload_unauthorized\">Loginfejl. Vil du nulstille OpenStreetMap logininformation?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap upload lykkedes</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Tale-optagelse</string>\n  <string name=\"gpsstatus_record_stillimage\">Tag foto</string>\n  <string name=\"gpsstatus_record_textnote\">Tekstnote</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Waypoint navn/tekst</string>\n  <string name=\"waypoint_name_hint\">Indtast waypointnavn</string>\n  <string name=\"edit_waypoint_bt_preview\">Åbn fil</string>\n  <string name=\"edit_waypoint_bt_save\">Spare</string>\n  <string name=\"edit_waypoint_bt_delete\">Slet</string>\n  <string name=\"edit_waypoint_bt_cancel\">Ophæve</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Slet waypoint</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Vil du slette dette waypoint?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Slet</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Ophæve</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Indstillinger</string>\n  <string name=\"menu_waypointlist\">Waypoints</string>\n  <string name=\"menu_about\">Om</string>\n  <string name=\"menu_displaytrack\">Vis track</string>\n  <string name=\"menu_stoptracking\">Stop &amp; gem</string>\n  <string name=\"menu_newtrack\">Nyt track</string>\n  <string name=\"menu_deletetracks\">Slet alle tracks</string>\n  <string name=\"menu_continue\">Fortsæt track</string>\n  <string name=\"menu_stopcurrenttrack\">Stop aktuelle track</string>\n  <string name=\"menu_save\">Gem</string>\n  <string name=\"menu_cancel\">Annuller</string>\n  <string name=\"menu_export\">Eksporter til GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap upload</string>\n  <string name=\"menu_center_to_gps\">Centrer til GPS</string>\n  <string name=\"menu_exportall\">Eksporter alle til GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Kunne ikke skrive til ekstern lager.</string>\n  <string name=\"error_create_track_dir\">Kunne ikke oprette track-mappe %s.</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Check at eksternt lager er korrekt indsat og mounted.</string>\n  <string name=\"error_voicerec_failed\">Taleoptagelse fejlede</string>\n  <string name=\"error_userlayout_parsing\">Fejl under parsing af XML-layout-fil. Brug i stedet standardlayout.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Tilladelse påkrævet</string>\n  <string name=\"storage_permission_for_export_GPX\">For at eksportere GPX-sporet skal vi skrive på lagerpladsen.</string>\n  <string name=\"storage_permission_for_display_track\">For at vise sporet korrekt skal vi have adgang til lagerpladsen.</string>\n  <string name=\"storage_permission_for_share_track\">For at kunne dele sporet ordentligt skal vi have adgang til lagerpladsen.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">For at uploade sporet til OSM skal vi have adgang til lagerpladsen.</string>\n  <string name=\"acccept\">Accepter</string>\n  <string name=\"gps_perms_required\">Kan ikke fortsætte uden GPS-tilladelse</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracked med OSMTracker til Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Advarsel: HDOP-værdier er ikke de samme HDOP-værdier som kommer fra GPS. De er approksimeret fra placeringspræcisionen i meter.</string>\n  <!--About screen-->\n  <string name=\"about\">Om</string>\n  <string name=\"about_text\">For more information, dokumentation og support besøg venligst projektets hjemmeside:</string>\n  <string name=\"about_translate_text\">Hjælp med at oversætte OSMTracker:</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <string name=\"about_export_db\">Eksport database</string>\n  <string name=\"about_exporting_db\">Eksporter database...</string>\n  <string name=\"about_export_db_result\">Database eksport resultat: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker tracker aktuelt</string>\n  <string name=\"notification_title\">OSMTracker tracker (#{0})</string>\n  <string name=\"notification_text\">Tryk her for at vise hovedskærm</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Vis track</string>\n  <string name=\"displaytrack_map\">Vis baggrundskort</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Gem</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Præcision</string>\n  <string name=\"various_accuracy_with_sats\">Præcision {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Venter på GPS fix… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Vent på retning...</string>\n  <string name=\"various_heading_unknown\">Retning kan ikke findes</string>\n  <string name=\"various_export_finished\">Eksportproces afsluttet</string>\n  <string name=\"various_waiting_position\">Stillingen er ikke tilgængelig</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap track visning</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Updater &amp; Installer</string>\n  <string name=\"buttons_presets_context_menu_delete\">Slet</string>\n  <string name=\"buttons_presets_updating_layout\">Opdaterer...</string>\n  <string name=\"buttons_presets_successful_update\">Layout blev updateret </string>\n  <string name=\"buttons_presets_unsuccessful_update\">Layout blev ikke opdateret, prøv igen senere</string>\n  <string name=\"buttons_presets_delete_message\">Vil du virkelig slette layoutet {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Ja</string>\n  <string name=\"buttons_presets_successful_delete\">Layoutet blev slettet</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Ikon-mappen blev slettet</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Denne fil havde ingen associeret ikon-mappe</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Layoutet kunne ikke slettes</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Fejl: kan ikke forbinde til internettet</string>\n  <string name=\"available_layouts_response_null_exception\">Fejl: kan ikke forbinde til standard-lageret for tilpassede layouts</string>\n  <string name=\"available_layouts_connecting_message\">(Forbinder...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Hent</string>\n  <string name=\"available_layouts_not_available_language\">Dit sprog er ikke tilgængeligt vælg et fra listen</string>\n  <string name=\"available_layouts_language_dialog_title\">Tilgængelige sprog</string>\n  <string name=\"available_layouts_checking_language_dialog\">Tjekker lokale sprog-versioner</string>\n  <string name=\"available_layouts_downloading_dialog\">Henter...</string>\n  <string name=\"available_layouts_successful_download\">Layoutet blev hentet</string>\n  <string name=\"available_layouts_unsuccessful_download\">Layoutet kunne ikke hentes, prøv igen senere</string>\n  <string name=\"available_layouts_null_response_received\">Kunne ikke hente data fra server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Standard</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Tilpasset</string>\n  <string name=\"github_repository_settings_username\">Github-brugernavn: </string>\n  <string name=\"github_repository_settings_repository_name\">Repository-navn: </string>\n  <string name=\"github_repository_settings_branch_name\">Branch-navnq: </string>\n  <string name=\"github_repository_settings_valid_server\">Github-repository fundet</string>\n  <string name=\"github_repository_settings_invalid_server\">Github-repository ikke fundet</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker for Android™ Introduktion</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Velkommen til OSMTracker til Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Denne app er gratis software, der respekterer din frihed!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">God fornøjelse med tracking 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker til Android bruger din GPS-placering til at registrere trackpoints og waypoints, selv når appen kører i baggrunden.\n\\nDine data bruges ikke til at understøtte annoncer.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Taleoptagelse</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-Logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Hineinzoomen</string>\n  <string name=\"acc.zoom_out\">Hinauszoomen</string>\n  <string name=\"acc.zoom_center\">Center</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satellitensignalstärkenindikator</string>\n  <string name=\"acc.record_indicator\">Aufnahme-Fortschrittsindikator</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Spurstatusindikator</string>\n  <string name=\"acc.upload_status\">OpenStreetMap-Hochladestatusindikator</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Einstellungen</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-Einstellungen</string>\n  <string name=\"prefs_gps_os_settings_summary\">GPS-Einstellungsbildschirm des Systems anzeigen</string>\n  <string name=\"prefs_check_gps_startup\">GPS beim Start prüfen</string>\n  <string name=\"prefs_check_gps_startup_summary\">Prüfen, ob GPS beim Start deaktiviert ist und das Aktivieren anbieten</string>\n  <string name=\"prefs_gps_ignore_clock\">GPS-Uhrzeit ignorieren</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">GPS-Uhrzeit ignorieren und Android-Uhrzeit für Zeitstempel verwenden</string>\n  <string name=\"prefs_use_barometer\">Luftdruck loggen [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Umschalten benötigt einen Neustart des Tracks</string>\n  <string name=\"prefs_gps_logging_interval\">GPS-Protokollierungsintervall</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Verwenden Sie 0 für das kürzestmögliche Intervall (beeinflusst die Batterielebensdauer)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">Sekunden</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS Log Distanz</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Mindestabstand zwischen Track-Punkten in Metern. 0 = kleinstmöglicher Abstand</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">Meter</string>\n  <string name=\"prefs_ui\">Benutzeroberfläche</string>\n  <string name=\"prefs_ui_picture_source\">Standard-Fotoquelle</string>\n  <string name=\"prefs_ui_picture_source_summary\">Fotos von Kamera oder Galerie nehmen?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galerie</item>\n    <item>immer nachfragen</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Tastenvoreinstellungen</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Benutzerdefiniertes Tastenlayout auswählen (siehe Dokumentation)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">STANDARD Ansicht</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standard</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">HERUNTERGELADENES Layout</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Du hast keine heruntergeladenen Layout-Dateien</string>\n  <string name=\"prefs_ui_available_layout\">Verfügbare Layouts</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github Ablageeinstellungen</string>\n  <string name=\"prefs_ui_orientation\">Ausrichtung</string>\n  <string name=\"prefs_ui_orientation_summary\">Bevorzugte Ausrichtung für die Tastendarstellung</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisch</item>\n    <item>Hochformat</item>\n    <item>Querformat</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Länge der Sprachaufnahme</string>\n  <string name=\"prefs_voicerec_duration_seconds\">Sekunden</string>\n  <string name=\"prefs_theme\">Hauptbildschirm-Grafikthema</string>\n  <string name=\"prefs_theme_summary\">Neustart der Anwendung ist erforderlich, damit die Änderung wirksam wird</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS-Standard</item>\n    <item>OS-Standard (Dunkel)</item>\n    <item>OS-Standard (Hell)</item>\n    <item>Hoher Kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Bildschirm immer an</string>\n  <string name=\"prefs_display_always_on_summary\">Bildschirm bleibt während der Routenaufnahme eingeschaltet. Deaktivieren um Akku zu sparen</string>\n  <string name=\"prefs_displaytrack_osm\">Hintergrundkarte</string>\n  <string name=\"prefs_displaytrack_osm_summary\">OpenStreetMap-Karte unter Route anzeigen. Benötigt eine Datenverbindung</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">OpenStreetMap als Track-Hintergrund anzeigen? Benötigt eine Datenverbindung</string>\n  <string name=\"prefs_output\">GPX-Einstellungen</string>\n  <string name=\"prefs_storage_dir\">Ablageordner in Dokumenten</string>\n  <string name=\"prefs_storage_dir_hint\">Gültig ab der nächste Route (nicht für die derzeitige)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Ein Verzeichnis pro Route</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Jede Route und zugehörige Dateien in einem eigenen Verzeichnis speichern</string>\n  <string name=\"prefs_output_filename\">Dateiname für benannte Routen</string>\n  <string name=\"prefs_output_filename_summary\">Form des Dateinamens, wenn die Route einen Namen hat</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Routename</item>\n    <item>Name, Startdatum und -zeit</item>\n    <item>Startdatum und -zeit, name</item>\n    <item>Startdatum und -zeit</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Dateinamenbezeichnung</string>\n  <string name=\"prefs_output_filename_label_summary\">Dieses Label wird am Ende des Dateinamens angehängt</string>\n  <string name=\"prefs_output_accuracy\">Genauigkeit in der GPX-Datei</string>\n  <string name=\"prefs_output_accuracy_summary\">Erlaube Genauigkeitsanzeige in der GPX-Datei mit Wegpunkt-Name oder in einem separaten Tag</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Kein</item>\n    <item>Im Wegpunkt-Name</item>\n    <item>Im Wegpunkt-Kommentar</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Benutze HDOP-Annäherung</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Fülle HDOP (im GPX) mit Näherungswerten der Genauigkeitsmessung</string>\n  <string name=\"prefs_sound_enabled\">Klänge aktivieren</string>\n  <string name=\"prefs_sound_enabled_summary\">Spiele Klänge ab, wenn Sprachaufnahme startet und endet</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSM-Anmeldedaten zurücksetzen</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">OSM-Anmeldedaten und -berechtigungen vergessen und OSMTracker neu danach fragen lassen</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Sie müssen OSMTracker erneut zum Hochladen von Routen autorisieren. Sind Sie sicher?</string>\n  <string name=\"prefs_map_tile\">Anbieter von Kartenkacheln</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>kein Export</item>\n    <item>im Kommentar</item>\n    <item>in der Erweiterung</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Kompassausrichtung exportieren</string>\n  <string name=\"prefs_compass_heading_summary\">Definiert ob und wie die Kompass-Daten in die GPX-Datei exportiert werden</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Verschiedenes</string>\n  <string name=\"tag.restriction\">Beschränkung</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Tourismus</string>\n  <string name=\"tag.amenity\">Einrichtungen</string>\n  <string name=\"tag.amenity_more\">Einrichtungen (+)</string>\n  <string name=\"tag.way\">Weg</string>\n  <string name=\"tag.track\">Route</string>\n  <string name=\"tag.landuse\">Landnutzung</string>\n  <string name=\"tag.misc_bus_stop\">Bushaltestelle</string>\n  <string name=\"tag.misc_railway\">Eisenbahn</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Briefkasten</string>\n  <string name=\"tag.misc_atm\">Bankautomat</string>\n  <string name=\"tag.misc_bollard\">Poller</string>\n  <string name=\"tag.misc_toilets\">Toiletten</string>\n  <string name=\"tag.misc_shelter\">Unterstand</string>\n  <string name=\"tag.misc_surveillance\">Überwachung</string>\n  <string name=\"tag.restriction_20\">Maximal 20</string>\n  <string name=\"tag.restriction_30\">Maximal 30</string>\n  <string name=\"tag.restriction_40\">Maximal 40</string>\n  <string name=\"tag.restriction_50\">Maximal 50</string>\n  <string name=\"tag.restriction_60\">Maximal 60</string>\n  <string name=\"tag.restriction_70\">Maximal 70</string>\n  <string name=\"tag.restriction_80\">Maximal 80</string>\n  <string name=\"tag.restriction_90\">Maximal 90</string>\n  <string name=\"tag.restriction_100\">Maximal 100</string>\n  <string name=\"tag.restriction_110\">Maximal 110</string>\n  <string name=\"tag.restriction_120\">Maximal 120</string>\n  <string name=\"tag.restriction_130\">Maximal 130</string>\n  <string name=\"tag.restriction_no_exit\">Sackgasse</string>\n  <string name=\"tag.restriction_traffic_light\">Ampel</string>\n  <string name=\"tag.restriction_one_way\">Einbahnstraße</string>\n  <string name=\"tag.car_fuel_station\">Tankstelle</string>\n  <string name=\"tag.car_parking\">Parkplatz</string>\n  <string name=\"tag.car_emergency_phone\">Notruf</string>\n  <string name=\"tag.car_turning_circle\">Wendekreis</string>\n  <string name=\"tag.car_speed_camera\">Radargerät</string>\n  <string name=\"tag.tourism_view_point\">Aussichtspunkt</string>\n  <string name=\"tag.tourism_information\">Information</string>\n  <string name=\"tag.tourism_picnic\">Rastplatz</string>\n  <string name=\"tag.tourism_attraction\">Attraktion</string>\n  <string name=\"tag.tourism_theme_park\">Freizeitpark</string>\n  <string name=\"tag.tourism_castle\">Burg/Schloss</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Parkbank</string>\n  <string name=\"tag.amenity_water\">Wasser</string>\n  <string name=\"tag.amenity_pharmacy\">Apotheke</string>\n  <string name=\"tag.amenity_shop\">Geschäft</string>\n  <string name=\"tag.amenity_marina\">Hafen</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Krankenhaus,\\nÄrzte</string>\n  <string name=\"tag.amenity_recycling\">Recycling</string>\n  <string name=\"tag.amenity_place_of_worship\">Andachts-\\nstätte</string>\n  <string name=\"tag.amenity_post_office\">Postamt</string>\n  <string name=\"tag.amenity_library\">Bibliothek</string>\n  <string name=\"tag.amenitymore_school\">Schule</string>\n  <string name=\"tag.amenitymore_police\">Polizei</string>\n  <string name=\"tag.amenitymore_fire_station\">Feuerwache</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Spielplatz</string>\n  <string name=\"tag.amenitymore_pub\">Kneipe</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Schnellimbiss</string>\n  <string name=\"tag.amenitymore_camp_site\">Campingplatz</string>\n  <string name=\"tag.way_bridge\">Brücke</string>\n  <string name=\"tag.way_zebra_crossing\">Zebrastreifen</string>\n  <string name=\"tag.way_motorway\">Autobahn</string>\n  <string name=\"tag.way_trunk\">Schnellstraße</string>\n  <string name=\"tag.way_primary\">Bundesstraße</string>\n  <string name=\"tag.way_secondary\">Landstraße</string>\n  <string name=\"tag.way_tertiary\">Kreisstraße</string>\n  <string name=\"tag.way_residential\">Straße an/in\nWohngebieten</string>\n  <string name=\"tag.way_service\">Erschließungsweg</string>\n  <string name=\"tag.track_track\">Route</string>\n  <string name=\"tag.track_cycleway\">Fahrradweg</string>\n  <string name=\"tag.track_footway\">Fußweg</string>\n  <string name=\"tag.track_bridleway\">Reitweg</string>\n  <string name=\"tag.track_steps\">Treppe</string>\n  <string name=\"tag.track_living_street\">Verkehrsberuhigter\nBereich</string>\n  <string name=\"tag.track_pedestrian\">Fußgängerweg</string>\n  <string name=\"tag.track_grade1\">Befestigter Weg\n(Grade 1)</string>\n  <string name=\"tag.track_grade2\">Unbefestigter Weg\n(Grade 2)</string>\n  <string name=\"tag.track_grade3\">Unbefestigter Weg\n(Grade 3)</string>\n  <string name=\"tag.track_grade4\">Unbefestigter Weg\n(Grade 4)</string>\n  <string name=\"tag.track_grade5\">Unbefestigter Weg\n(Grade 5)</string>\n  <string name=\"tag.landuse_farm\">landwirtschaft-\nliche Fläche</string>\n  <string name=\"tag.landuse_landfill\">Deponie</string>\n  <string name=\"tag.landuse_basin\">Wasserbecken</string>\n  <string name=\"tag.landuse_reservoir\">Speicherbecken</string>\n  <string name=\"tag.landuse_forest\">Forstwirtschaft</string>\n  <string name=\"tag.landuse_allotments\">Kleingarten</string>\n  <string name=\"tag.landuse_cemetery\">Friedhof</string>\n  <string name=\"tag.landuse_recreation_ground\">Erholungs-\\gebiet</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker für Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspiriert von OSMTracker auf Windows Mobile. OSMTracker ermöglicht die Aufzeichnung Ihrer Routen, das Markieren signifikanter Wegpunkte (z. B. durch Sprachaufnahme oder Foto) und dessen Export in eine GPX-Datei zur weiteren Bearbeitung mit OpenStreetMap-Werkzeugen wie JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Routen-Aufzeichnung</string>\n  <string name=\"tracklogger_waiting_gps\">Warte auf GPS-Fix vor Tastenaktivierung…</string>\n  <string name=\"tracklogger_voicerec_title\">Sprachaufnahme</string>\n  <string name=\"tracklogger_voicerec_text\">{0}s Audioclip wird aufgenommen.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stopp</string>\n  <string name=\"tracklogger_btnBack\">Zurück</string>\n  <string name=\"tracklogger_tracked\">Aufgezeichnete Route:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS deaktiviert</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS ist deaktiviert. Möchten Sie es aktivieren?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerie oder Kamera?</string>\n  <string name=\"tracklogger_camera\">Foto mit Kamera aufnehmen</string>\n  <string name=\"tracklogger_gallery\">Foto aus Galerie auswählen</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Wegpunktliste</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Höhe: </string>\n  <string name=\"wplist_accuracy\">Genau: </string>\n  <string name=\"wplist_compass\">Kompassrichtung:</string>\n  <string name=\"wplist_compass_accuracy\">Kompassgenauigkeit:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Routenverwaltung</string>\n  <string name=\"trackmgr_tracklist\">Routenliste:</string>\n  <string name=\"trackmgr_waypoints_count\">Wegpunkte: </string>\n  <string name=\"trackmgr_trackpoints_count\">Routenpunkte: </string>\n  <string name=\"trackmgr_empty\">Sie haben keine Routen.</string>\n  <string name=\"trackmgr_newtrack_hint\">Drücke, um eine neue Route aufzuzeichnen.</string>\n  <string name=\"trackmgr_newtrack_error\">Neue Route kann nicht erstellt werden: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Aktuell wird <b>Route #{0}</b> aufgezeichnet.\\nWählen Sie diese aus der Liste aus, um fortzufahren.</string>\n  <string name=\"trackmgr_contextmenu_stop\">Routenaufnahme stoppen</string>\n  <string name=\"trackmgr_contextmenu_resume\">Routenaufnahme fortsetzen</string>\n  <string name=\"trackmgr_contextmenu_delete\">Löschen</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportieren</string>\n  <string name=\"trackmgr_contextmenu_share\">Teilen</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Zu OpenStreetMap hochladen</string>\n  <string name=\"trackmgr_contextmenu_display\">Auf Karte anzeigen</string>\n  <string name=\"trackmgr_contextmenu_details\">Details</string>\n  <string name=\"trackmgr_contextmenu_title\">Route #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Route #{0} wird gelöscht</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alle Routen werden gelöscht. Sind Sie sicher?</string>\n  <string name=\"trackmgr_exporting\">Route #{0} wird exportiert…</string>\n  <string name=\"trackmgr_exporting_prepare\">Bereite Export vor...</string>\n  <string name=\"trackmgr_export_error\">Route kann nicht exportiert werden: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alle Routen werden exportiert, dies kann einige Zeit dauern. Sind Sie sicher?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Route kann nicht exportiert werden: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Routendetails</string>\n  <string name=\"trackdetail_startdate\">Startzeit: </string>\n  <string name=\"trackdetail_enddate\">Endzeit: </string>\n  <string name=\"trackdetail_startloc\">Startet bei: </string>\n  <string name=\"trackdetail_endloc\">Endet bei: </string>\n  <string name=\"trackdetail_exportdate\">Exportiert: </string>\n  <string name=\"trackdetail_osm_upload_date\">Zu OpenStreetMap hochgeladen:</string>\n  <string name=\"trackdetail_btn_export\">Als GPX exportieren</string>\n  <string name=\"trackdetail_export_notyet\">(Noch nicht exportiert)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Noch nicht hochgeladen)</string>\n  <string name=\"trackdetail_export_display\">Anzeigen</string>\n  <string name=\"trackdetail_name\">Name</string>\n  <string name=\"trackdetail_description\">Beschreibung</string>\n  <string name=\"trackdetail_tags\">Tags (mit Komma trennen)</string>\n  <string name=\"trackdetail_description_mandatory\">Sie müssen eine Beschreibung eingeben.</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Öffentlich</string>\n  <string name=\"osm_visibility_trackable\">Verfolgbar</string>\n  <string name=\"osm_visibility_identifiable\">Identifizierbar</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap-Upload</string>\n  <string name=\"osm_upload_ok\">Speichern und hochladen</string>\n  <string name=\"osm_upload_tmpfile_failed\">Route konnte nicht in eine temporäre Datei exportiert werden</string>\n  <string name=\"osm_upload_oauth_failed\">Konnte keine Anmeldung bei OSM durchführen</string>\n  <string name=\"osm_upload_sending\">Route #{0} wird gesendet...</string>\n  <string name=\"osm_upload_waiting_response\">Warte auf die Antwort des OpenStreetMap-Servers...</string>\n  <string name=\"osm_upload_error\">Fehler beim Hochladen der Route</string>\n  <string name=\"osm_upload_bad_response\">Der OSM-Server meldet einen Fehler: ({0})message{1}</string>\n  <string name=\"osm_upload_unauthorized\">Autorisierungsfehler. Möchten Sie die gespeicherten OpenStreetMap-Anmeldedaten zurücksetzen?</string>\n  <string name=\"osm_upload_sucess\">Hochladen zu OpenStreetMap erfolgreich</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Sprachaufnahme</string>\n  <string name=\"gpsstatus_record_stillimage\">Foto aufnehmen</string>\n  <string name=\"gpsstatus_record_textnote\">Textnotiz</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Wegpunktname/Text</string>\n  <string name=\"waypoint_name_hint\">Geben Sie den Wegpunktnamen ein</string>\n  <string name=\"edit_waypoint_bt_preview\">Datei öffnen</string>\n  <string name=\"edit_waypoint_bt_save\">Speichern</string>\n  <string name=\"edit_waypoint_bt_delete\">Löschen</string>\n  <string name=\"edit_waypoint_bt_cancel\">Stornieren</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Wegpunkt löschen</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Diesen Wegpunkt löschen?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Löschen</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Stornieren</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Einstellungen</string>\n  <string name=\"menu_waypointlist\">Wegpunkte</string>\n  <string name=\"menu_about\">Über</string>\n  <string name=\"menu_displaytrack\">Route anzeigen</string>\n  <string name=\"menu_stoptracking\">Stoppen &amp; speichern</string>\n  <string name=\"menu_newtrack\">Neue Route</string>\n  <string name=\"menu_deletetracks\">Alle Routen löschen</string>\n  <string name=\"menu_continue\">Route fortsetzen</string>\n  <string name=\"menu_stopcurrenttrack\">Aktuelle Route stoppen</string>\n  <string name=\"menu_save\">Speichern</string>\n  <string name=\"menu_cancel\">Abbrechen</string>\n  <string name=\"menu_export\">Als GPX exportieren</string>\n  <string name=\"menu_osm_upload\">Upload zu OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">An GPS zentrieren</string>\n  <string name=\"menu_exportall\">Exportiere als GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Schreiben auf externen Speicher nicht möglich.</string>\n  <string name=\"error_create_track_dir\">Routenordner %s kann nicht erstellt werden</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Bitte überprüfen Sie, ob der externe Speicher korrekt eingesetzt und eingebunden ist.</string>\n  <string name=\"error_voicerec_failed\">Sprachaufnahme fehlgeschlagen</string>\n  <string name=\"error_userlayout_parsing\">Fehler während Parsen der XML-Datei. Bitte auf Standardlayout wechseln.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Erlaubnis erforderlich</string>\n  <string name=\"storage_permission_for_export_GPX\">Um die GPX-Spur zu exportieren, müssen wir auf den Speicher schreiben.</string>\n  <string name=\"storage_permission_for_display_track\">Um den Titel richtig anzuzeigen, benötigen wir Zugriff auf den Speicher.</string>\n  <string name=\"storage_permission_for_share_track\">Um den Titel ordnungsgemäß freizugeben, benötigen wir Zugriff auf den Speicher.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Um den Track auf OSM hochzuladen, benötigen wir Zugriff auf den Speicher.</string>\n  <string name=\"acccept\">Akzeptieren</string>\n  <string name=\"gps_perms_required\">Ohne GPS-Berechtigung kann nicht fortgefahren werden</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Aufgezeichnet mit OSMTracker für Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Warnung: HDOP-Werte sind nicht vom GPS. Es sind geschätzte Meter-Werte zur Ortsbestimmung, die nicht berücksichtigt werden sollten.</string>\n  <!--About screen-->\n  <string name=\"about\">Über</string>\n  <string name=\"about_text\">Für mehr Information, Dokumentation und Meldungen besuchen Sie bitte die Projekt-Homepage:</string>\n  <string name=\"about_translate_text\">Helfen Sie beim Übersetzen von OSMTracker:</string>\n  <string name=\"about_debug_info\">Debug-Informationen</string>\n  <string name=\"about_export_db\">Exportiere Datenbank</string>\n  <string name=\"about_exporting_db\">Datenbank wird exportiert...</string>\n  <string name=\"about_export_db_result\">Datenbankexport Ergebnis: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker zeichnet auf</string>\n  <string name=\"notification_title\">OSMTracker zeichnet auf (#{0})</string>\n  <string name=\"notification_text\">Hier tippen, um den Hauptbildschirm aufzurufen</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Route anzeigen</string>\n  <string name=\"displaytrack_map\">Karte als Hintergrund anzeigen</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Speichern</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Genauigkeit</string>\n  <string name=\"various_accuracy_with_sats\">Genauigkeit {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Warte auf GPS-Fix… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Warte auf Richtung...</string>\n  <string name=\"various_heading_unknown\">Richtung kann nicht bestimmt werden</string>\n  <string name=\"various_export_finished\">Exportierung erfolgreich abgeschlossen</string>\n  <string name=\"various_waiting_position\">Position nicht verfügbar</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap-Routenanzeige</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Aktualisieren &amp; Installieren</string>\n  <string name=\"buttons_presets_context_menu_delete\">Löschen</string>\n  <string name=\"buttons_presets_updating_layout\">Aktualisiere...</string>\n  <string name=\"buttons_presets_successful_update\">Layout erfolgreich aktualisiert</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Layout nicht erfolgreich aktualisiert, bitte später noch einmal versuchen</string>\n  <string name=\"buttons_presets_delete_message\">Bist Du sicher das {0} Layout zu löschen?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Ja</string>\n  <string name=\"buttons_presets_successful_delete\">Das Layout wurde erfolgreich gelöscht</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Das Symbol-Verzeichnis wurde erfolgreich gelöscht</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Die Datei hat kein zugehöriges Icon-Verzeichnis</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Das Layout konnte nicht gelöscht werden </string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Fehler: Verbindung zum Internet nicht verfügbar</string>\n  <string name=\"available_layouts_response_null_exception\">Fehler: konnte nicht mit dem speziell angelegten Layout-Ablage verbinden</string>\n  <string name=\"available_layouts_connecting_message\">(Verbinde...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Herunterladen</string>\n  <string name=\"available_layouts_not_available_language\">Deine Sprache ist nicht verfügbar. Wähle eine von der Liste</string>\n  <string name=\"available_layouts_language_dialog_title\">Verfügbare Sprachen</string>\n  <string name=\"available_layouts_checking_language_dialog\">Prüfe lokale Sprachversionen</string>\n  <string name=\"available_layouts_downloading_dialog\">Herunterladen...</string>\n  <string name=\"available_layouts_successful_download\">Das Layout wurde erfolgreich heruntergeladen</string>\n  <string name=\"available_layouts_unsuccessful_download\">Das Layout konnte nicht heruntergeladen werden, bitte später versuchen</string>\n  <string name=\"available_layouts_null_response_received\">Fehler beim Abruf der Daten vom Server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Standard</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Anwenderspezifisch</string>\n  <string name=\"github_repository_settings_username\">GitHub-Benutzername:</string>\n  <string name=\"github_repository_settings_repository_name\">Ablagename:</string>\n  <string name=\"github_repository_settings_branch_name\">Zweig-Name</string>\n  <string name=\"github_repository_settings_valid_server\">Github Ablage gültig</string>\n  <string name=\"github_repository_settings_invalid_server\">Github Ablage ungültig</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker for Android™ Einführung</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Willkommen zu OSMTracker für Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Diese App ist freie Software die deine Privatsphäre respektiert!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Viel Spaß beim Tracken 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker für Android verwendet deine GPS-Position um Datenpunkte und Wegpunkte aufzuzeichnen, auch wenn die App im Hintergrund läuft.\nDeine Daten werden nicht für Werbezwecke verwendet.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Sprachaufnahme</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Λογότυπο OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Μεγέθυνση</string>\n  <string name=\"acc.zoom_out\">Σμίκρυνση</string>\n  <string name=\"acc.zoom_center\">Κέντρο εστίασης</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Δείκτης ισχύος σήματος δορυφόρου</string>\n  <string name=\"acc.record_indicator\">Δείκτης εγγραφής σε εξέλιξη</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Δείκτης κατάστασης ίχνους</string>\n  <string name=\"acc.upload_status\">Δείκτης κατάστασης αποστολής στο OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Ρυθμίσεις</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Ρυθμίσεις GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Προβολή ρυθμίσεων συστήματος GPS</string>\n  <string name=\"prefs_check_gps_startup\">Έλεγχος GPS κατά την εκκίνηση</string>\n  <string name=\"prefs_check_gps_startup_summary\">Έλεγχος αν το GPS είναι απενεργοποιημένο κατά την εκκίνηση και προσφέρεται να το ενεργοποιήσει</string>\n  <string name=\"prefs_gps_ignore_clock\">Αγνόηση ρολογιού GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Αγνοεί το ρολόι του GPS και χρησιμοποιεί το ρολόι του Android για χρονική σήμανση</string>\n  <string name=\"prefs_use_barometer\">Καταγραφή βαρομετρική πίεσης [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Η εναλλαγή απαιτεί επανεκκίνηση του ίχνους</string>\n  <string name=\"prefs_gps_logging_interval\">Χρονικό διάστημα καταγραφής GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Χρησιμοποιήστε το 0 για το μικρότερο δυνατό χρονικό διάστημα (επηρεάζει τη ζωή της μπαταρίας)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">δευτερόλεπτα</string>\n  <string name=\"prefs_gps_logging_min_distance\">Απόσταση καταγραφής GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Ελάχιστη απόσταση μεταξύ των σημείων ίχνους σε μέτρα, χρησιμοποιήστε το 0 για τη μικρότερη δυνατή</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">μέτρα</string>\n  <string name=\"prefs_ui\">Γραφικό περιβάλλον χρήστη</string>\n  <string name=\"prefs_ui_picture_source\">Προκαθορισμένη πηγή φωτογραφιών</string>\n  <string name=\"prefs_ui_picture_source_summary\">Φωτογραφίες από την κάμερα ή τη συλλογή;</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Κάμερα</item>\n    <item>Συλλογή</item>\n    <item>Ερώτηση πάντα</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Προκαθορισμένα κουμπιά</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Επιλέξτε ένα προσαρμοσμένο σύνολο κουμπιών (δείτε τα έγγραφα)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">ΠΡΟΚΑΘΟΡΙΣΜΕΝΗ ΔΙΑΤΑΞΗ</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Προκαθορισμένο</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">ΑΠΟΘΗΚΕΥΜΕΝΗ ΔΙΑΤΑΞΗ</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Δεν έχεις αποθηκευμένες διατάξεις</string>\n  <string name=\"prefs_ui_available_layout\">Διαθέσιμες Διατάξεις</string>\n  <string name=\"prefs_ui_github_repository_settings\">Ρυθμίσεις του Github Repository</string>\n  <string name=\"prefs_ui_orientation\">Προσανατολισμός</string>\n  <string name=\"prefs_ui_orientation_summary\">Προτιμώμενος προσανατολισμός για το κουμπί οθόνης</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Αυτόματα</item>\n    <item>Πορτραίτο</item>\n    <item>Τοπίο</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Διάρκεια ηχογράφησης</string>\n  <string name=\"prefs_voicerec_duration_seconds\">δευτερόλεπτα</string>\n  <string name=\"prefs_theme\">Γραφικό θέμα για την κύρια οθόνη</string>\n  <string name=\"prefs_theme_summary\">Επανεκκινήστε την εφαρμογή για την εφαρμογή των αλλαγών σας</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Προκαθορισμένο από το λειτουργικό</item>\n    <item>Προκαθορισμένο από το λειτουργικό (σκοτεινό)</item>\n    <item>Προκαθορισμένο από το λειτουργικό (φωτεινό)</item>\n    <item>Υψηλή αντίθεση</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Η οθόνη πάντα ενεργή</string>\n  <string name=\"prefs_display_always_on_summary\">Η οθόνη θα παραμένει ανοικτή κατά την ιχνηλάτηση. Απενεργοποιήστε για να αυξήσετε τη διάρκεια της μπαταρίας</string>\n  <string name=\"prefs_displaytrack_osm\">Χάρτης παρασκηνίου</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Εμφανίζει τον χάρτη του OpenStreetMap κάτω από το ίχνος. Χρειάζεται σύνδεση δεδομένων</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Πάντα εμφάνιση του υπόβαθρου OpenStreetMap; Απαιτεί σύνδεση δεδομένων</string>\n  <string name=\"prefs_output\">Ρυθμίσεις GPX</string>\n  <string name=\"prefs_storage_dir\">Φάκελος αποθήκευσης στα έγγραφα</string>\n  <string name=\"prefs_storage_dir_hint\">Θα επηρεάσει το επόμενο ίχνος (όχι το τρέχων)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Ένα ευρετήριο ανά ίχνος</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Αποθήκευση κάθε ίχνους και των σχετικών του αρχείων στον δικό του κατάλογο</string>\n  <string name=\"prefs_output_filename\">Όνομα αρχείου για κατονομαζόμενο ίχνος</string>\n  <string name=\"prefs_output_filename_summary\">Μοτίβο για το όνομα αρχείου αν το ίχνος έχει ένα όνομα</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Όνομα ίχνους</item>\n    <item>Όνομα, ημερομηνία και ώρα έναρξης</item>\n    <item>Ημερομηνία και ώρα έναρξης, Όνομα</item>\n    <item>Ημερομηνία και ώρα έναρξης</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Ετικέτα ονόματος αρχείου</string>\n  <string name=\"prefs_output_filename_label_summary\">Αυτή η ετικέτα θα προστεθεί στο τέλος του ονόματος αρχείου</string>\n  <string name=\"prefs_output_accuracy\">Ακρίβεια στο αρχείο GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Προσθήκη ακρίβειας στο αρχείο GPX,  με το όνομα σημείου διαδρομής ή στο σχόλιο του σημείου</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Κανένα</item>\n    <item>Με όνομα σημείου</item>\n    <item>Στο σχόλιο του σημείου</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Χρήση προσέγγισης HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Συμπλήρωση του HDOP στο GPX με μια κατά προσέγγιση τιμή από την ακρίβεια</string>\n  <string name=\"prefs_sound_enabled\">Ενεργοποίηση ήχου</string>\n  <string name=\"prefs_sound_enabled_summary\">Αναπαραγωγή ήχων κατά την εκκίνηση και τον τερματισμό ηχογράφησης</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Επαναφορά πιστοποίησης OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Αγνόηση των διαπιστευτηρίων και των αδειών του OSM και εξαναγκασμός του OSMTracker να τα ζητήσει ξανά</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Θα πρέπει να εξουσιοδοτήσετε το OSMTracker να στείλει τα ίχνη ξανά. Είστε σίγουρος;</string>\n  <string name=\"prefs_map_tile\">Πάροχος πλακιδίων χάρτη</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Κανένα</item>\n    <item>σε σχόλιο</item>\n    <item>σε επέκταση</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Εξαγωγή κατεύθυνσης πυξίδας</string>\n  <string name=\"prefs_compass_heading_summary\">Ορίζει αν και πώς θα εξαχθούν τα δεδομένα πυξίδας στο αρχείο GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Διάφορα</string>\n  <string name=\"tag.restriction\">Περιορισμοί</string>\n  <string name=\"tag.car\">Αυτοκινητιστικά</string>\n  <string name=\"tag.tourism\">Τουριστικά</string>\n  <string name=\"tag.amenity\">Υποδομές</string>\n  <string name=\"tag.amenity_more\">Υποδομές (+)</string>\n  <string name=\"tag.way\">Πορεία</string>\n  <string name=\"tag.track\">Διαδρομή</string>\n  <string name=\"tag.landuse\">Χρήση γης</string>\n  <string name=\"tag.misc_bus_stop\">Στάση λεωφορείου</string>\n  <string name=\"tag.misc_railway\">Σιδ/κός Σταθμός</string>\n  <string name=\"tag.misc_telephone\">Τηλέφωνο</string>\n  <string name=\"tag.misc_post_box\">Ταχυδρομικό κουτί</string>\n  <string name=\"tag.misc_atm\">Μηχάνημα ανάληψης χρημάτων</string>\n  <string name=\"tag.misc_bollard\">Κολονάκι</string>\n  <string name=\"tag.misc_toilets\">Τουαλέτες</string>\n  <string name=\"tag.misc_shelter\">Σκέπαστρο</string>\n  <string name=\"tag.misc_surveillance\">Επιτήρηση</string>\n  <string name=\"tag.restriction_20\">Μέγιστη 20</string>\n  <string name=\"tag.restriction_30\">Μέγιστη 30</string>\n  <string name=\"tag.restriction_40\">Μέγιστη 40</string>\n  <string name=\"tag.restriction_50\">Μέγιστη 50</string>\n  <string name=\"tag.restriction_60\">Μέγιστη 60</string>\n  <string name=\"tag.restriction_70\">Μέγιστη 70</string>\n  <string name=\"tag.restriction_80\">Μέγιστη 80</string>\n  <string name=\"tag.restriction_90\">Μέγιστη 90</string>\n  <string name=\"tag.restriction_100\">Μέγιστη 100</string>\n  <string name=\"tag.restriction_110\">Μέγιστη 110</string>\n  <string name=\"tag.restriction_120\">Μέγιστη 120</string>\n  <string name=\"tag.restriction_130\">Μέγιστη 130</string>\n  <string name=\"tag.restriction_no_exit\">Αδιέξοδος</string>\n  <string name=\"tag.restriction_traffic_light\">Φανάρι</string>\n  <string name=\"tag.restriction_one_way\">Μονόδρομος</string>\n  <string name=\"tag.car_fuel_station\">Βενζινάδικο</string>\n  <string name=\"tag.car_parking\">Parking</string>\n  <string name=\"tag.car_emergency_phone\">Τηλέφωνο ανάγκης</string>\n  <string name=\"tag.car_turning_circle\">Κυκλική Στροφή</string>\n  <string name=\"tag.car_speed_camera\">Κάμερα ταχύτητας</string>\n  <string name=\"tag.tourism_view_point\">Σημείο θέασης</string>\n  <string name=\"tag.tourism_information\">Πληροφορίες</string>\n  <string name=\"tag.tourism_picnic\">Χώρος εκδρομής</string>\n  <string name=\"tag.tourism_attraction\">Αξιοθέατο</string>\n  <string name=\"tag.tourism_theme_park\">Πάρκο ψυχαγωγίας</string>\n  <string name=\"tag.tourism_castle\">Κάστρο</string>\n  <string name=\"tag.tourism_monument\">Μνημείο</string>\n  <string name=\"tag.tourism_museum\">Μουσείο</string>\n  <string name=\"tag.tourism_cinema\">Κινηματογραφική αίθουσα</string>\n  <string name=\"tag.amenity_bench\">Παγκάκι</string>\n  <string name=\"tag.amenity_water\">Πόσιμο νερό</string>\n  <string name=\"tag.amenity_pharmacy\">Φαρμακείο</string>\n  <string name=\"tag.amenity_shop\">Κατάστημα</string>\n  <string name=\"tag.amenity_marina\">Μαρίνα</string>\n  <string name=\"tag.amenity_sport\">Άθληση</string>\n  <string name=\"tag.amenity_taxi\">Ταξί</string>\n  <string name=\"tag.amenity_doctors\">Νοσοκομείο,\\nΓιατροί</string>\n  <string name=\"tag.amenity_recycling\">Ανακύκλωση</string>\n  <string name=\"tag.amenity_place_of_worship\">Τόπος \\nλατρείας</string>\n  <string name=\"tag.amenity_post_office\">Ταχυδρομείο</string>\n  <string name=\"tag.amenity_library\">Βιβλιοθήκη</string>\n  <string name=\"tag.amenitymore_school\">Σχολείο</string>\n  <string name=\"tag.amenitymore_police\">Αστυνομία</string>\n  <string name=\"tag.amenitymore_fire_station\">Πυροσβεστική</string>\n  <string name=\"tag.amenitymore_bank\">Τράπεζα</string>\n  <string name=\"tag.amenitymore_playground\">Παιδική χαρά</string>\n  <string name=\"tag.amenitymore_pub\">Καπηλειό</string>\n  <string name=\"tag.amenitymore_hotel\">Ξενοδοχείο</string>\n  <string name=\"tag.amenitymore_motel\">Πανδοχείο</string>\n  <string name=\"tag.amenitymore_hostel\">Ξενώνας</string>\n  <string name=\"tag.amenitymore_restaurant\">Εστιατόριο</string>\n  <string name=\"tag.amenitymore_fastfood\">Ταχυφαγείο</string>\n  <string name=\"tag.amenitymore_camp_site\">Χώρος κατασκήνωσης</string>\n  <string name=\"tag.way_bridge\">Γέφυρα</string>\n  <string name=\"tag.way_zebra_crossing\">Διαγραμμισμένη διάβαση πεζών</string>\n  <string name=\"tag.way_motorway\">Αυτοκινητόδρομος</string>\n  <string name=\"tag.way_trunk\">Λεωφόρος</string>\n  <string name=\"tag.way_primary\">Πρωτεύων / Εθνικός Δρόμος </string>\n  <string name=\"tag.way_secondary\">Δευτερεύων / Επαρχιακός Δρόμος</string>\n  <string name=\"tag.way_tertiary\">Τριτεύων / Τοπικός Δρόμος</string>\n  <string name=\"tag.way_residential\">Οδός σε κατοικημένη περιοχή</string>\n  <string name=\"tag.way_service\">Ειδική Οδός</string>\n  <string name=\"tag.track_track\">Αγροτικός Δρόμος</string>\n  <string name=\"tag.track_cycleway\">Ποδηλατόδρομος</string>\n  <string name=\"tag.track_footway\">Πεζοδρόμιο</string>\n  <string name=\"tag.track_bridleway\">Μονοπάτι Ιππασίας</string>\n  <string name=\"tag.track_steps\">Σκαλιά</string>\n  <string name=\"tag.track_living_street\">Δρόμος ήπιας κυκλοφορίας</string>\n  <string name=\"tag.track_pedestrian\">Πεζόδρομος</string>\n  <string name=\"tag.track_grade1\">Βαθμός 1</string>\n  <string name=\"tag.track_grade2\">Βαθμός 2</string>\n  <string name=\"tag.track_grade3\">Βαθμός 3</string>\n  <string name=\"tag.track_grade4\">Βαθμός 4</string>\n  <string name=\"tag.track_grade5\">Βαθμός 5</string>\n  <string name=\"tag.landuse_farm\">Φάρμα</string>\n  <string name=\"tag.landuse_landfill\">ΧΥΤΑ</string>\n  <string name=\"tag.landuse_basin\">Λεκάνη</string>\n  <string name=\"tag.landuse_reservoir\">Ταμιευτήρας</string>\n  <string name=\"tag.landuse_forest\">Δάσος</string>\n  <string name=\"tag.landuse_allotments\">Οικόπεδα</string>\n  <string name=\"tag.landuse_cemetery\">Κοιμητήριο</string>\n  <string name=\"tag.landuse_recreation_ground\">Χώρος\\nαναψυχής</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker για Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Εμπνευσμένο από το OSMTracker για το Windows Mobile, σας επιτρέπει να ιχνηλατήσετε τα ταξίδια σας, να σημειώσετε σημαντικά σημεία (ηχογράφηση φωνής, φωτογραφίες, κ.α.) και να κάνετε εξαγωγή σε τύπο αρχείου GPX για χρήση αργότερα με εργαλεία για το OpenStreetMap, όπως το JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Καταγραφέας ίχνους</string>\n  <string name=\"tracklogger_waiting_gps\">Αναμονή του σήματος GPS για ενεργοποίηση των κουμπιών</string>\n  <string name=\"tracklogger_voicerec_title\">Ηχητική καταγραφή</string>\n  <string name=\"tracklogger_voicerec_text\">Γίνεται εγγραφή ήχου {0}s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Τερματισμός</string>\n  <string name=\"tracklogger_btnBack\">Πίσω</string>\n  <string name=\"tracklogger_tracked\">Ίχνευση:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS απενεργοποιημένο</string>\n  <string name=\"tracklogger_gps_disabled_hint\">Το GPS είναι απενεργοποιημένο. Θέλετε ενεργοποίηση;</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Συλλογή ή κάμερα;</string>\n  <string name=\"tracklogger_camera\">Φωτογραφίστε</string>\n  <string name=\"tracklogger_gallery\">Επιλέξτε φωτογραφία από την συλλογή</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Λίστα σημείων</string>\n  <string name=\"wplist_latitude\">Γεωγραφικό Πλάτος:</string>\n  <string name=\"wplist_longitude\">Γεωγραφικό Μήκος:</string>\n  <string name=\"wplist_elevation\">Ανύψωση:</string>\n  <string name=\"wplist_accuracy\">Ακρίβεια:</string>\n  <string name=\"wplist_compass\">Κατεύθ. πυξίδας:</string>\n  <string name=\"wplist_compass_accuracy\">Ακρίβ. πυξίδας.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Διαχειριστής ιχνών</string>\n  <string name=\"trackmgr_tracklist\">Κατάλογος ιχνών:</string>\n  <string name=\"trackmgr_waypoints_count\">Ενδιάμεσα σημεία:</string>\n  <string name=\"trackmgr_trackpoints_count\">Ίχνη:</string>\n  <string name=\"trackmgr_empty\">Δεν έχετε ίχνη.</string>\n  <string name=\"trackmgr_newtrack_hint\">Πατήστε για να καταγράψετε ένα νέο ίχνος.</string>\n  <string name=\"trackmgr_newtrack_error\">Αδύνατη η δημιουργία νέου ίχνους: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Αυτή τη στιγμή καταγράφετε το <b>ίχνος #{0}</b>\\n\nΕπιλέξτε το στον κατάλογο για συνέχιση</string>\n  <string name=\"trackmgr_contextmenu_stop\">Τερματισμός καταγραφής ίχνους</string>\n  <string name=\"trackmgr_contextmenu_resume\">Συνέχιση καταγραφής ίχνους</string>\n  <string name=\"trackmgr_contextmenu_delete\">Διαγραφή</string>\n  <string name=\"trackmgr_contextmenu_export\">Εξαγωγή ως</string>\n  <string name=\"trackmgr_contextmenu_share\">Κοινοποίηση</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Αποστολή στο OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Ανέβασμα στο GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Εμφάνιση</string>\n  <string name=\"trackmgr_contextmenu_details\">Λεπτομέρειες</string>\n  <string name=\"trackmgr_contextmenu_title\">Ίχνος #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Το ίχνος #{0} θα διαγραφεί</string>\n  <string name=\"trackmgr_deleteall_confirm\">Όλα τα ίχνη θα διαγραφούν. Είστε σίγουρος;</string>\n  <string name=\"trackmgr_exporting\">Εξαγωγή ίχνους #{0}...</string>\n  <string name=\"trackmgr_exporting_prepare\">Προετοιμασία εξαγωγής...</string>\n  <string name=\"trackmgr_export_error\">Αδύνατη η εξαγωγή του ίχνους: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Όλα τα ίχνη θα εξαχθούν, κάτι που μπορεί να πάρει ώρα. Είστε σίγουρος;</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Αδύνατη η επεξεργασία του ίχνους: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Λεπτομέρειες Ίχνους</string>\n  <string name=\"trackdetail_startdate\">Χρόνος εκκίνησης:</string>\n  <string name=\"trackdetail_enddate\">Χρόνος ολοκλήρωσης:</string>\n  <string name=\"trackdetail_startloc\">Αρχίζει στο:</string>\n  <string name=\"trackdetail_endloc\">Τελειώνει στο:</string>\n  <string name=\"trackdetail_exportdate\">Εξήχθη:</string>\n  <string name=\"trackdetail_osm_upload_date\">Εστάλη στο OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Εξαγωγή ως GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Δεν έχει ακόμη εξαχθεί)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Δεν έχει ακόμη σταλεί)</string>\n  <string name=\"trackdetail_export_display\">Προβολή</string>\n  <string name=\"trackdetail_name\">Ονομα</string>\n  <string name=\"trackdetail_description\">Περιγραφή</string>\n  <string name=\"trackdetail_tags\">Ετικέτες (διαχωρισμένες με κόμμα)</string>\n  <string name=\"trackdetail_description_mandatory\">Πρέπει να εισάγετε μια περιγραφή</string>\n  <string name=\"osm_visibility_private\">Ιδιωτικό</string>\n  <string name=\"osm_visibility_public\">Δημόσιο</string>\n  <string name=\"osm_visibility_trackable\">Ανιχνεύσιμο</string>\n  <string name=\"osm_visibility_identifiable\">Αναγνωρίσιμο</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Αποστολή στο OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Αποθήκευση και αποστολή</string>\n  <string name=\"osm_upload_tmpfile_failed\">Αδύνατη η εξαγωγή του ίχνους σε προσωρινό αρχείο</string>\n  <string name=\"osm_upload_oauth_failed\">Αδύνατη η επαλήθευση με το OSM</string>\n  <string name=\"osm_upload_sending\">Αποστολή ίχνους #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Αναμονή για την απάντηση του εξυπηρετητή του OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Σφάλμα κατά την αποστολή ίχνους</string>\n  <string name=\"osm_upload_bad_response\">Ο εξυπηρετητής OSM απέδωσε σφάλμα: ({0}) μήνυμα {1}</string>\n  <string name=\"osm_upload_unauthorized\">Σφάλμα επαλήθευσης. Θελε να εκκαθαρίσετε τα αποθηκευμένα πιστοποιητικά για το OSM;</string>\n  <string name=\"osm_upload_sucess\">Αποστολή στο OpenStreetMap επιτυχής</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Ακύρωση</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Ηχογράφηση</string>\n  <string name=\"gpsstatus_record_stillimage\">Φωτογράφιση</string>\n  <string name=\"gpsstatus_record_textnote\">Σημείωση κειμένου</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"edit_waypoint_bt_preview\">Άνοιγμα αρχείου</string>\n  <string name=\"edit_waypoint_bt_save\">Αποθήκευση</string>\n  <string name=\"edit_waypoint_bt_delete\">Διαγραφή</string>\n  <string name=\"edit_waypoint_bt_cancel\">Ακύρωση</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Διαγραφή</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Ακύρωση</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Αποθήκευση</string>\n  <string name=\"edit_note_bt_delete\">Διαγραφή</string>\n  <string name=\"edit_note_bt_cancel\">Ακύρωση</string>\n  <string name=\"delete_note_confirm_bt_ok\">Διαγραφή</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Ακύρωση</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Ρυθμίσεις</string>\n  <string name=\"menu_waypointlist\">Σημεία</string>\n  <string name=\"menu_about\">Σχετικά</string>\n  <string name=\"menu_displaytrack\">Προβολή ίχνους</string>\n  <string name=\"menu_stoptracking\">Διακοπή και αποθήκευση</string>\n  <string name=\"menu_newtrack\">Νέο ίχνος</string>\n  <string name=\"menu_deletetracks\">Διαγραφή όλων των ιχνών</string>\n  <string name=\"menu_continue\">Συνέχιση ίχνους</string>\n  <string name=\"menu_stopcurrenttrack\">Διακοπή τρέχοντος ίχνους</string>\n  <string name=\"menu_save\">Αποθήκευση</string>\n  <string name=\"menu_cancel\">Ακύρωση</string>\n  <string name=\"menu_export\">Εξαγωγή ως GPX</string>\n  <string name=\"menu_osm_upload\">Αποστολή στο OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Κεντράρισμα στο GPS</string>\n  <string name=\"menu_exportall\">Εξαγωγή όλων ως GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Δεν ήταν δυνατή η εγγραφή στο εξωτερικό αποθηκευτικό μέσο</string>\n  <string name=\"error_create_track_dir\">Αδύνατη η δημιουργία φακέλου για το ίχνος %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Παρακαλούμε ελέγξτε αν ο εξωτ. αποθηκευτικός χώρος έχει τοποθετηθεί σωστά. </string>\n  <string name=\"error_voicerec_failed\">Η ηχογράφηση απέτυχε</string>\n  <string name=\"error_userlayout_parsing\">Σφάλμα στην ανάπτυξη του σχεδίου XML. Επαναφέρετε το προκαθορισμένο σχέδιο.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Απαιτείται άδεια</string>\n  <string name=\"storage_permission_for_export_GPX\">Για την εξαγωγή του ίχνους GPX χρειαζόμαστε να γράψουμε στην συσκευή.</string>\n  <string name=\"storage_permission_for_display_track\">Για την εμφάνιση του ίχνους κατάλληλα χρειαζόμαστε πρόσβαση στον χώρο αποθήκευσης.</string>\n  <string name=\"storage_permission_for_share_track\">Για την κοινοποίηση του ίχνους κατάλληλα χρειαζόμαστε πρόσβαση στον χώρο αποθήκευσης.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Για το ανέβασμα του ίχνους στο OSM χρειαζόμαστε πρόσβαση στον χώρο αποθήκευσης.</string>\n  <string name=\"acccept\">Αποδοχή</string>\n  <string name=\"gps_perms_required\">Δεν μπορείτε να συνεχίσετε χωρίς την άδεια GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Ιχνηλατίστηκε με το OSMTracker για Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Προσοχή: Οι τιμές HDOP δεν είναι ίδιες με αυτές που όρισε η συσκευή GPS.  Είναι κατά προσέγγιση μέσω της ακρίβειας θέσης σε μέτρα.</string>\n  <!--About screen-->\n  <string name=\"about\">Σχετικά</string>\n  <string name=\"about_text\">Για περισσότερες πληροφορίες, εγχειρίδια και αναφορές λαθών, επισκεφθείτε τη σελίδα της εφαρμογής:</string>\n  <string name=\"about_translate_text\">Βοηθήστε στη μετάφραση του OSMTracker:</string>\n  <string name=\"about_debug_info\">Πληροφορίες εντοπισμού σφαλμάτων</string>\n  <string name=\"about_export_db\">Εξαγωγή βάσης δεδομένων</string>\n  <string name=\"about_exporting_db\">Εξάγοντας τη βάση δεδομένων...</string>\n  <string name=\"about_export_db_result\">Αποτέλεσμα εξαγωγής βάσης δεδομένων: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">Το OSMTracker ιχνηλατεί</string>\n  <string name=\"notification_title\">Το OSMTracker ιχνηλατεί (#{0})</string>\n  <string name=\"notification_text\">Πατήστε εδώ για να επιστρέψετε στην κύρια οθόνη</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Προβολή ίχνους</string>\n  <string name=\"displaytrack_map\">Εμφάνιση χάρτη παρασκηνίου</string>\n  <string name=\"displaytrack_north\">Β</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Αποθήκευση</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">μ</string>\n  <string name=\"various_accuracy\">Ακρίβεια</string>\n  <string name=\"various_accuracy_with_sats\">Ακρίβεια {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Αναμονή για διόρθωση GPS... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Αναμονή για κατεύθυνση…</string>\n  <string name=\"various_heading_unknown\">Η κατεύθυνση δεν μπορεί να προσδιοριστεί</string>\n  <string name=\"various_export_finished\">Η διαδικασία εξαγωγής ολοκληρώθηκε με επιτυχία</string>\n  <string name=\"various_waiting_position\">Τοποθεσία μη διαθέσιμη</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Προβολή ιχνών OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Ενημέρωση &amp; Εγκατάσταση</string>\n  <string name=\"buttons_presets_context_menu_delete\">Διαγραφή</string>\n  <string name=\"buttons_presets_updating_layout\">Ενημερώνοντας...</string>\n  <string name=\"buttons_presets_successful_update\">Η διάταξη ενημερώθηκε επιτυχώς</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Η διάταξη δεν ενημερώθηκε, δοκιμάστε πάλι αργότερα</string>\n  <string name=\"buttons_presets_delete_message\">Θέλετε σίγουρα να διαγράψετε τη {0} διάταξη;</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Ναι</string>\n  <string name=\"buttons_presets_successful_delete\">Η διάταξη διαγράφηκε επιτυχώς</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Ο φάκελος εικονιδίων διεγράφει επιτυχώς</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Το αρχείο δεν είχε συσχετισμό με φάκελο εικονιδίων</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Η διάταξη δεν μπόρεσε να διαγραφεί</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Σφάλμα: Αδύνατη η σύνδεση στο διαδίκτυο</string>\n  <string name=\"available_layouts_response_null_exception\">Σφάλμα: Αδύνατη η σύνδεση στο αποθετήριο διατάξεων</string>\n  <string name=\"available_layouts_connecting_message\">(Σύνδεση...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Αποθήκευση</string>\n  <string name=\"available_layouts_not_available_language\">Η γλώσσα σας δεν είναι διαθέσιμη επιλέξτε μια άλλη από τη λίστα</string>\n  <string name=\"available_layouts_language_dialog_title\">Διαθέσιμες Γλώσσες</string>\n  <string name=\"available_layouts_checking_language_dialog\">Ελέγχοντας τις εκδόσεις των αποθηκευμένων γλωσσών</string>\n  <string name=\"available_layouts_downloading_dialog\">Αποθηκεύοντας...</string>\n  <string name=\"available_layouts_successful_download\">Η διάταξη αποθηκεύτηκε επιτυχώς</string>\n  <string name=\"available_layouts_unsuccessful_download\">Η διάταξη δεν μπορεί να αποθηκευτεί, δοκιμάστε ξανά αργότερα</string>\n  <string name=\"available_layouts_null_response_received\">Λάθος στη λήψη δεδομένων από τον server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Προεπιλογή</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Παραμετροποίηση</string>\n  <string name=\"github_repository_settings_username\">Όνομα χρήστη στο Github:</string>\n  <string name=\"github_repository_settings_repository_name\">Όνομα αποθετηρίου</string>\n  <string name=\"github_repository_settings_branch_name\">Όνομα Κλάδου:</string>\n  <string name=\"github_repository_settings_valid_server\">Έγκυρο αποθετήριο στο Github</string>\n  <string name=\"github_repository_settings_invalid_server\">Μη έγκυρο αποθετήριο στο Github</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">επιτυχής δημιουργία</string>\n  <string name=\"error_creating\">Σφάλμα δημιουργίας</string>\n  <string name=\"db_error\">Σφάλμα βάσης δεδομένων</string>\n  <string name=\"successfully_saved\">επιτυχής αποθήκευση</string>\n  <string name=\"saving_error\">Σφάλμα αποθήκευσης</string>\n  <string name=\"repository_information_error\">Σφάλμα με πληροφορίες αποθετηρίου</string>\n  <string name=\"successfully_uploaded\">Επιτυχές ανέβασμα</string>\n  <string name=\"error_uploading\">Σφάλμα ανεβάσματος</string>\n  <string name=\"gpx_file_read_error\">Σφάλμα ανάγνωσης αρχείου GPX</string>\n  <string name=\"gpx_file_not_found\">Δεν βρέθηκε αρχείο GPX</string>\n  <string name=\"uploading_file\">Ανέβασμα αρχείου: </string>\n  <string name=\"item_selected\">Επιλεγμένο αντικείμενο: </string>\n  <string name=\"github_repository_private\">Ιδιωτικό: </string>\n  <string name=\"github_creating_repository\">Δημιουργία αποθετηρίου</string>\n  <string name=\"github_no_repository_name\">Πρέπει να ορίσετε όνομα αποθετηρίου</string>\n  <string name=\"error_field_required\">Πρέπει να ορίσετε τιμή γι\\' αυτό το πεδίο</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Ρύθμιση</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_select_repo\">Επιλογή αποθετηρίου</string>\n  <string name=\"upload_to_github_create_repository\">Δημιουργία αποθετηρίου</string>\n  <string name=\"upload_to_github_configure\">Ρύθμιση</string>\n  <!--GitHubNewFork-->\n  <string name=\"create\">Δημιουργία</string>\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Εισαγωγή στο OSMTracker για Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Καλωσήρθατε στο OSMTracker για Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Αυτή η εφαρμοφή είναι δωρεάν λογισμικό το οποίο σέβεται της ελευθερία σας!</string>\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Καλή ιχνηλάτηση 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">Το OSMTracker για Android θα χρησιμοποιήσει την τοποθεσία σας GPS για να καταγράψει σημεία ίχνους και σημεία διαδρομής, ακόμη κι αν εφαρμογή τρέχει στο παρασκήνιο.\\nΤα δεδομένα σας δεν χρησιμοποιούνται για την υποστήριξη διαφημίσεων.</string>\n  <string name=\"no_app_to_handle_file_type\">Δεν βρέθηκε εφαρμογή για να ανοιχθεί το αρχείο</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Ηχογράφηση</string>\n  <string name=\"wpt_stillimage\">Φωτογραφία</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo de OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Acercar</string>\n  <string name=\"acc.zoom_out\">Alejar</string>\n  <string name=\"acc.zoom_center\">Centro del zoom</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicador de potencia de la señal de satélite</string>\n  <string name=\"acc.record_indicator\">Indicador de grabación en curso</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicador del estado de la traza</string>\n  <string name=\"acc.upload_status\">Indicador del estado de subida a OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Configuración</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Configuración del GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Mostrar pantalla de configuración del sistema GPS</string>\n  <string name=\"prefs_check_gps_startup\">Comprobar GPS en el inicio</string>\n  <string name=\"prefs_check_gps_startup_summary\">Comprobar si el GPS está desactivado al iniciar, y preguntar si desea activarlo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorar el reloj GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorar el reloj GPS y utilizar el reloj Android como marcas de tiempo</string>\n  <string name=\"prefs_use_barometer\">Registro de presión barométrica [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Alternar requiere reiniciar la traza</string>\n  <string name=\"prefs_notes\">Notas de texto</string>\n  <string name=\"prefs_notes_summary\">Escoja cómo se guardarán los valores del botón Nota de Texto de la disposición de botones</string>\n  <string-array name=\"prefs_notes_keys\">\n    <item>Waypoint</item>\n    <item>Nota de OSM</item>\n    <item>Ambas</item>\n  </string-array>\n  <string name=\"prefs_gps_logging_interval\">Intervalo de registro de GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Utilice 0 para el más breve posible (afecta a la vida de la batería)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segundos</string>\n  <string name=\"prefs_gps_logging_interval_empty\">La distancia de registro GPS no puede estar vacía</string>\n  <string name=\"prefs_gps_logging_min_distance\">Distancia de registro GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Distancia min. entre puntos de traza en metros, utilice 0 para la menor distancia posible</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metros</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">La distancia mínima entre puntos de traza no puede estar vacía</string>\n  <string name=\"prefs_ui\">Interfaz de usuario</string>\n  <string name=\"prefs_ui_picture_source\">Fuente de fotos predeterminada</string>\n  <string name=\"prefs_ui_picture_source_summary\">¿Tomar fotos desde la cámara o la galería?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Cámara</item>\n    <item>Galería</item>\n    <item>Preguntar siempre</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Disposición de los botones</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Escoja una disposición personalizada de los botones (ver documentación)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">PREDETERMINADA</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Predeterminada</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">DESCARGADAS</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Usted no tiene disposiciones descargadas aún</string>\n  <string name=\"prefs_ui_available_layout\">Disposiciones para descargar</string>\n  <string name=\"prefs_ui_github_repository_settings\">Configuración del Repositorio GitHub</string>\n  <string name=\"prefs_ui_orientation\">Orientación</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientación preferida para la pantalla de botones</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automático</item>\n    <item>Vertical</item>\n    <item>Horizontal</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duración de la grabación de voz</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundos</string>\n  <string name=\"prefs_theme\">Tema de la pantalla principal</string>\n  <string name=\"prefs_theme_summary\">Es necesario reiniciar la aplicación para que los cambios surtan efecto</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Predeterminado del SO</item>\n    <item>Predeterminado del SO (oscuro)</item>\n    <item>Predeterminado del SO (claro)</item>\n    <item>Alto contraste</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Pantalla siempre activa</string>\n  <string name=\"prefs_display_always_on_summary\">La pantalla permanecerá encendida mientras esté trazando. Desactivar para ahorrar batería</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa de fondo</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Visualizar OpenStreetMap bajo la traza. Requiere una conexión de datos</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">¿Mostrar siempre OpenStreetMap de fondo? Requiere una conexión de datos</string>\n  <string name=\"prefs_output\">Configuraciones GPX</string>\n  <string name=\"prefs_storage_dir\">Carpeta de almacenamiento en Documentos</string>\n  <string name=\"prefs_storage_dir_hint\">Se hará efectivo en la traza siguiente (no la actual)</string>\n  <string name=\"prefs_storage_dir_empty\">El valor de la carpeta de almacenamiento no puede estar vacía</string>\n  <string name=\"prefs_output_one_dir_per_track\">Una carpeta por cada traza</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Guarda cada rastro y los archivos asociados en su propia carpeta</string>\n  <string name=\"prefs_output_filename\">Nombre del archivo para las trazas con nombre</string>\n  <string name=\"prefs_output_filename_summary\">Modelo para el nombre del archivo si la traza tiene un nombre</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nombre de la traza</item>\n    <item>Nombre, fecha y hora de inicio</item>\n    <item>Fecha y hora de inicio, nombre</item>\n    <item>Fecha y hora de inicio</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Etiqueta de nombre de archivo</string>\n  <string name=\"prefs_output_filename_label_summary\">Esta etiqueta será añadida al final del nombre de archivo</string>\n  <string name=\"prefs_output_accuracy\">Precisión en el archivo GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Añadir información de precisión en el archivo GPX, con el nombre del punto o en un comentario del punto</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Ninguna</item>\n    <item>Con el nombre del punto</item>\n    <item>En un comentario del punto</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Usar aproximación HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Rellenar el HDOP en el GPX con un valor de aproximación de la precisión</string>\n  <string name=\"prefs_sound_enabled\">Habilitar el sonido</string>\n  <string name=\"prefs_sound_enabled_summary\">Reproducir sonidos cuando la grabación de voz comienza y termina</string>\n  <string name=\"prefs_osm_visibility\">Visibilidad de la traza</string>\n  <string name=\"prefs_osm_visibility_summary\">Visibilidad preferida para las trazas al subirlas a openstreetmap.org</string>\n  <string-array name=\"prefs_osm_visibility_keys\">\n    <item>Privado</item>\n    <item>Trazable</item>\n    <item>Público</item>\n    <item>Identificable</item>\n  </string-array>\n  <string name=\"prefs_osm_clear_oauth_data\">Restablecer la autenticación OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Olvidar las credenciales y permisos de OSM, y forzar a que OSMTracker los vuelva a solicitar</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Deberá autorizar a OSMTracker para volver a subir las pistas. ¿Está seguro?</string>\n  <string name=\"prefs_map_tile\">Proveedor de mosaicos de mapas</string>\n  <string name=\"prefs_map_tile_summary\">Escoja el proveedor de mosaicos para mostrar el mapa</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ninguno</item>\n    <item>en comentario</item>\n    <item>en extensión</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportar rumbo de la brújula</string>\n  <string name=\"prefs_compass_heading_summary\">Define el si y cómo los datos de brújula deben ser exportados al archivo GPX</string>\n  <string name=\"prefs_reset_default_value\">Reestablecer valor predeterminado</string>\n  <string name=\"prefs_not_set\">No establecido</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Varios</string>\n  <string name=\"tag.restriction\">Restricción</string>\n  <string name=\"tag.car\">Coche</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Servicios</string>\n  <string name=\"tag.amenity_more\">Servicios (+)</string>\n  <string name=\"tag.way\">Vía</string>\n  <string name=\"tag.track\">Pista</string>\n  <string name=\"tag.landuse\">Uso del suelo</string>\n  <string name=\"tag.misc_bus_stop\">Parada de autobús</string>\n  <string name=\"tag.misc_railway\">Ferrocarril</string>\n  <string name=\"tag.misc_telephone\">Teléfono</string>\n  <string name=\"tag.misc_post_box\">Buzón</string>\n  <string name=\"tag.misc_atm\">Cajero</string>\n  <string name=\"tag.misc_bollard\">Bolardo</string>\n  <string name=\"tag.misc_toilets\">Aseos</string>\n  <string name=\"tag.misc_shelter\">Refugio</string>\n  <string name=\"tag.misc_surveillance\">Vigilancia</string>\n  <string name=\"tag.restriction_20\">Máx. 20</string>\n  <string name=\"tag.restriction_30\">Máx. 30</string>\n  <string name=\"tag.restriction_40\">Máx. 40</string>\n  <string name=\"tag.restriction_50\">Máx. 50</string>\n  <string name=\"tag.restriction_60\">Máx. 60</string>\n  <string name=\"tag.restriction_70\">Máx. 70</string>\n  <string name=\"tag.restriction_80\">Máx. 80</string>\n  <string name=\"tag.restriction_90\">Máx. 90</string>\n  <string name=\"tag.restriction_100\">Máx. 100</string>\n  <string name=\"tag.restriction_110\">Máx. 110</string>\n  <string name=\"tag.restriction_120\">Máx. 120</string>\n  <string name=\"tag.restriction_130\">Máx. 130</string>\n  <string name=\"tag.restriction_no_exit\">Sin salida</string>\n  <string name=\"tag.restriction_traffic_light\">Semáforo</string>\n  <string name=\"tag.restriction_one_way\">Único sentido</string>\n  <string name=\"tag.car_fuel_station\">Gasolinera</string>\n  <string name=\"tag.car_parking\">Estacionamiento</string>\n  <string name=\"tag.car_emergency_phone\">Teléfono de emergencias</string>\n  <string name=\"tag.car_turning_circle\">Giro en U</string>\n  <string name=\"tag.car_speed_camera\">Radar</string>\n  <string name=\"tag.tourism_view_point\">Mirador</string>\n  <string name=\"tag.tourism_information\">Información</string>\n  <string name=\"tag.tourism_picnic\">Sitio de picnic</string>\n  <string name=\"tag.tourism_attraction\">Atracción</string>\n  <string name=\"tag.tourism_theme_park\">Parque temático</string>\n  <string name=\"tag.tourism_castle\">Castillo</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museo</string>\n  <string name=\"tag.tourism_cinema\">Cine</string>\n  <string name=\"tag.amenity_bench\">Banco</string>\n  <string name=\"tag.amenity_water\">Agua</string>\n  <string name=\"tag.amenity_pharmacy\">Farmacia</string>\n  <string name=\"tag.amenity_shop\">Tienda</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Deporte</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nDoctores</string>\n  <string name=\"tag.amenity_recycling\">Reciclaje</string>\n  <string name=\"tag.amenity_place_of_worship\">Lugar de\\nculto</string>\n  <string name=\"tag.amenity_post_office\">Correos</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Escuela</string>\n  <string name=\"tag.amenitymore_police\">Policía</string>\n  <string name=\"tag.amenitymore_fire_station\">Bomberos</string>\n  <string name=\"tag.amenitymore_bank\">Banco</string>\n  <string name=\"tag.amenitymore_playground\">Parque</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostal</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurante</string>\n  <string name=\"tag.amenitymore_fastfood\">Comida rápida</string>\n  <string name=\"tag.amenitymore_camp_site\">Sitio de acampe</string>\n  <string name=\"tag.way_bridge\">Puente</string>\n  <string name=\"tag.way_zebra_crossing\">Paso de cebra</string>\n  <string name=\"tag.way_motorway\">Autovía</string>\n  <string name=\"tag.way_trunk\">Troncal</string>\n  <string name=\"tag.way_primary\">Primaria</string>\n  <string name=\"tag.way_secondary\">Secundaria</string>\n  <string name=\"tag.way_tertiary\">Terciaria</string>\n  <string name=\"tag.way_residential\">Residencial</string>\n  <string name=\"tag.way_service\">Servicio</string>\n  <string name=\"tag.track_track\">Camino</string>\n  <string name=\"tag.track_cycleway\">Ciclovía</string>\n  <string name=\"tag.track_footway\">Acera</string>\n  <string name=\"tag.track_bridleway\">De herradura</string>\n  <string name=\"tag.track_steps\">Escaleras</string>\n  <string name=\"tag.track_living_street\">Residencial máx. 20</string>\n  <string name=\"tag.track_pedestrian\">Peatonal</string>\n  <string name=\"tag.track_grade1\">Grado 1</string>\n  <string name=\"tag.track_grade2\">Grado 2</string>\n  <string name=\"tag.track_grade3\">Grado 3</string>\n  <string name=\"tag.track_grade4\">Grado 4</string>\n  <string name=\"tag.track_grade5\">Grado 5</string>\n  <string name=\"tag.landuse_farm\">Granja</string>\n  <string name=\"tag.landuse_landfill\">Vertedero</string>\n  <string name=\"tag.landuse_basin\">Cuenca</string>\n  <string name=\"tag.landuse_reservoir\">Embalse</string>\n  <string name=\"tag.landuse_forest\">Zona forestal</string>\n  <string name=\"tag.landuse_allotments\">Huerto de ocio</string>\n  <string name=\"tag.landuse_cemetery\">Cementerio</string>\n  <string name=\"tag.landuse_recreation_ground\">Área de\\nrecreación</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker para Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirado por OSMTracker en Windows Mobile, que permite realizar un seguimiento de sus viajes, marcar puntos de paso importantes (grabación de voz, fotos), exportarlos en formato GPX para su uso posterior con herramientas OpenStreetMap como JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Grabadora de trazas</string>\n  <string name=\"tracklogger_waiting_gps\">Esperando la señal de GPS para habilitar los botones…</string>\n  <string name=\"tracklogger_voicerec_title\">Grabación de voz</string>\n  <string name=\"tracklogger_voicerec_text\">Grabando un audio de {0} s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Detener</string>\n  <string name=\"tracklogger_btnBack\">Atrás</string>\n  <string name=\"tracklogger_tracked\">Trazado: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS desactivado</string>\n  <string name=\"tracklogger_gps_disabled_hint\">El GPS está desactivado. ¿Desea activarlo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">¿Galería o cámara?</string>\n  <string name=\"tracklogger_camera\">Tomar foto con la cámara</string>\n  <string name=\"tracklogger_gallery\">Seleccionar foto desde la galería</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista de puntos</string>\n  <string name=\"wplist_latitude\">Lat.: </string>\n  <string name=\"wplist_longitude\">Long.: </string>\n  <string name=\"wplist_elevation\">Elev.: </string>\n  <string name=\"wplist_accuracy\">Prec.: </string>\n  <string name=\"wplist_compass\">Cab. brúj.:</string>\n  <string name=\"wplist_compass_accuracy\">Pres. brúj.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Administrador de trazas</string>\n  <string name=\"trackmgr_tracklist\">Lista de trazas:</string>\n  <string name=\"trackmgr_waypoints_count\">Puntos de ref.:</string>\n  <string name=\"trackmgr_trackpoints_count\">P. de traza:</string>\n  <string name=\"trackmgr_notes_count\">Notas:</string>\n  <string name=\"trackmgr_empty\">Usted no tiene ninguna traza.</string>\n  <string name=\"trackmgr_newtrack_hint\">Presione para grabar una nueva traza.</string>\n  <string name=\"trackmgr_newtrack_error\">No se puede crear una nueva traza: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">En este momento está grabando la <b>traza #{0}</b>\\nElíjalo en la lista para continuar</string>\n  <string name=\"trackmgr_contextmenu_stop\">Detener el trazado</string>\n  <string name=\"trackmgr_contextmenu_resume\">Reanudar el trazado</string>\n  <string name=\"trackmgr_contextmenu_delete\">Eliminar</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportar</string>\n  <string name=\"trackmgr_contextmenu_share\">Compartir</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Subir a OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Subir a GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Visualizar</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalles</string>\n  <string name=\"trackmgr_contextmenu_title\">Traza #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">La traza #{0} se eliminará.</string>\n  <string name=\"trackmgr_deleteall_confirm\">Se eliminarán todos las trazas. ¿Está seguro?</string>\n  <string name=\"trackmgr_exporting\">Exportando traza #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Preparando la exportación...</string>\n  <string name=\"trackmgr_export_error\">No se puede exportar la traza: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Se exportarán todas las trazas, lo cual podría tardar mucho tiempo. ¿Está seguro?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">No se puede procesar la traza: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalles de la traza</string>\n  <string name=\"trackdetail_startdate\">Hora de inicio: </string>\n  <string name=\"trackdetail_enddate\">Hora de finalización: </string>\n  <string name=\"trackdetail_startloc\">Inicia en: </string>\n  <string name=\"trackdetail_endloc\">Termina en:</string>\n  <string name=\"trackdetail_exportdate\">Se exportó a:</string>\n  <string name=\"trackdetail_osm_upload_date\">Subido a OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportar a GPX</string>\n  <string name=\"trackdetail_export_notyet\">(aún no exportado)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(aún no subido)</string>\n  <string name=\"trackdetail_export_display\">Mostrar</string>\n  <string name=\"trackdetail_name\">Nombre</string>\n  <string name=\"trackdetail_description\">Descripción: </string>\n  <string name=\"trackdetail_tags\">Etiquetas (delimitado por comas)</string>\n  <string name=\"trackdetail_description_mandatory\">Debe introducir una descripción</string>\n  <string name=\"trackdetail_visibility\">Visibilidad</string>\n  <string name=\"osm_visibility_private\">Privado</string>\n  <string name=\"osm_visibility_public\">Público</string>\n  <string name=\"osm_visibility_trackable\">Trazable</string>\n  <string name=\"osm_visibility_identifiable\">Identificable</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Subir a OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Guardar y subir</string>\n  <string name=\"osm_upload_tmpfile_failed\">No se puede exportar la traza a un archivo temporal</string>\n  <string name=\"osm_upload_oauth_failed\">No se pudo autenticar en OSM</string>\n  <string name=\"osm_upload_sending\">Enviando traza #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Esperando la respuesta del servidor OpenStreetMap…</string>\n  <string name=\"osm_upload_error\">Error al subir la traza</string>\n  <string name=\"osm_upload_bad_response\">El servidor OSM ha devuelto un error: ({0}) mensaje {1}</string>\n  <string name=\"osm_upload_unauthorized\">Error de autorización. ¿Desea borrar las credenciales de OSM guardadas?</string>\n  <string name=\"osm_upload_sucess\">La subida a OpenStreetMap tuvo éxito</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload\">Subir notas a OpenStreetMap</string>\n  <string name=\"osm_note_upload_error\">Error al subir la nota</string>\n  <string name=\"osm_note_label\">Nota de texto</string>\n  <string name=\"osm_note_upload_ok\">Subir</string>\n  <string name=\"osm_note_upload_cancel\">Cancelar</string>\n  <string name=\"osm_note_footer\">via %1$s %2$s</string>\n  <string name=\"osm_note_upload_unauthorized\">Error de autorización. Si usted previamente otorgó permisos a la aplicación para subir trazas, debe limpiar sus credenciales salvadas para autorizar la aplicación a subir trazas y <b>notas</b>. ¿Le gustaría limpiar sus credenciales de OpenStreetMap salvadas?</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Grabar voz</string>\n  <string name=\"gpsstatus_record_stillimage\">Tomar foto</string>\n  <string name=\"gpsstatus_record_textnote\">Nota de texto</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Nombre de Punto/texto</string>\n  <string name=\"waypoint_name_hint\">Ingrese el nombre del punto</string>\n  <string name=\"edit_waypoint_bt_preview\">Abrir archivo</string>\n  <string name=\"edit_waypoint_bt_save\">Guardar</string>\n  <string name=\"edit_waypoint_bt_delete\">Eliminar</string>\n  <string name=\"edit_waypoint_bt_cancel\">Cancelar</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Eliminar Punto</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">¿Eliminar este punto?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Eliminar</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Cancelar</string>\n  <!--osm Notes-->\n  <string name=\"note_name_label\">Texto/Nombre de la Nota</string>\n  <string name=\"edit_note_bt_update\">Guardar</string>\n  <string name=\"edit_note_bt_delete\">Eliminar</string>\n  <string name=\"edit_note_bt_cancel\">Cancelar</string>\n  <string name=\"delete_note_confirm_dialog_title\">Eliminar nota</string>\n  <string name=\"delete_note_confirm_dialog_msg\">¿Eliminar esta nota?</string>\n  <string name=\"delete_note_confirm_bt_ok\">Eliminar</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Cancelar</string>\n  <string name=\"notelist\">Lista de notas</string>\n  <string name=\"osm_note_bt_upload\">Subir como nota de OSM</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configuración</string>\n  <string name=\"menu_waypointlist\">Puntos</string>\n  <string name=\"menu_about\">Acerca de</string>\n  <string name=\"menu_displaytrack\">Mostrar la traza</string>\n  <string name=\"menu_stoptracking\">Detener y guardar</string>\n  <string name=\"menu_newtrack\">Nueva traza</string>\n  <string name=\"menu_deletetracks\">Borrar todas las trazas</string>\n  <string name=\"menu_continue\">Continuar el trazado</string>\n  <string name=\"menu_stopcurrenttrack\">Detener la traza actual</string>\n  <string name=\"menu_save\">Guardar</string>\n  <string name=\"menu_cancel\">Cancelar</string>\n  <string name=\"menu_export\">Exportar como GPX</string>\n  <string name=\"menu_osm_upload\">Subir a OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centrar a GPS</string>\n  <string name=\"menu_exportall\">Exportar todas como GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">No se puede grabar en el almacenamiento externo.</string>\n  <string name=\"error_create_track_dir\">No se puede crear la carpeta de traza %s.</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Compruebe que el almacenamiento externo está correctamente insertado y montado.</string>\n  <string name=\"error_voicerec_failed\">La grabación de voz ha fallado</string>\n  <string name=\"error_userlayout_parsing\">Error al analizar el archivo XML de disposición. Por favor, vuelva a la disposición predeterminada.</string>\n  <string name=\"error_gh_token_lenght\">Token debe tener 40 caracteres</string>\n  <string name=\"error_gh_pr_creation\">Error al crear el PR</string>\n  <!--messages-->\n  <string name=\"permission_required\">Se requiere permiso</string>\n  <string name=\"storage_permission_for_export_GPX\">Para exportar la traza se requiere permiso de escritura en el almacenamiento.</string>\n  <string name=\"storage_permission_for_display_track\">Para mostrar la traza se requiere permiso de escritura en el almacenamiento.</string>\n  <string name=\"storage_permission_for_share_track\">Para compartir la traza se requiere permiso de escritura en el almacenamiento.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Para subir a OSM la traza se requiere permiso de escritura en el almacenamiento.</string>\n  <string name=\"acccept\">Aceptar</string>\n  <string name=\"gps_perms_required\">No se puede continuar sin el permiso de GPS.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Trazado con OSMTracker para Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Advertencia: los valores HDOP no son los valores HDOP devueltos por el dispositivo GPS. Son valores aproximados de acuerdo a la precisión de la ubicación en metros.</string>\n  <!--About screen-->\n  <string name=\"about\">Acerca de</string>\n  <string name=\"about_text\">Para más información, documentos e informe de incidencias, visite la web del proyecto:</string>\n  <string name=\"about_translate_text\">Ayúdanos a traducir OSMTracker:</string>\n  <string name=\"about_debug_info\">Info. de depuración</string>\n  <string name=\"about_export_db\">Exportar base de datos</string>\n  <string name=\"about_exporting_db\">Exportando base de datos...</string>\n  <string name=\"about_export_db_result\">Resultado de exportar la base de datos: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker está trazando</string>\n  <string name=\"notification_title\">OSMTracker está trazando (#{0})</string>\n  <string name=\"notification_text\">Pulse aquí para mostrar la pantalla principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Visualizar traza</string>\n  <string name=\"displaytrack_map\">Mostrar mapa de fondo</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Guardar</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisión</string>\n  <string name=\"various_accuracy_with_sats\">Precisión {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Esperando por arreglo GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Espere por la cabecera…</string>\n  <string name=\"various_heading_unknown\">La cabecera no se puede determinar</string>\n  <string name=\"various_export_finished\">El proceso de exportación finalizó con éxito</string>\n  <string name=\"various_waiting_position\">Posición no disponible</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Vista de la traza en OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Actualizar e instalar</string>\n  <string name=\"buttons_presets_context_menu_delete\">Eliminar</string>\n  <string name=\"buttons_presets_updating_layout\">Actualizando…</string>\n  <string name=\"buttons_presets_successful_update\">Disposición actualizada con éxito</string>\n  <string name=\"buttons_presets_unsuccessful_update\">La disposición no se pudo actualizar, intente de nuevo más tarde</string>\n  <string name=\"buttons_presets_delete_message\">¿Está seguro que desea eliminar la disposición de {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Sí</string>\n  <string name=\"buttons_presets_successful_delete\">La disposición se eliminó con éxito</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Iconos de la disposición eliminados con éxito</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Este archivo no tenía ningún directorio de iconos asociado</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">No se pudo eliminar la disposición</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Error: No se puede conectar a Internet, por favor revise su conexión</string>\n  <string name=\"available_layouts_response_null_exception\">Error: No se pudo conectar con el servidor de disposiciones personalizadas predeterminado</string>\n  <string name=\"available_layouts_connecting_message\">(Conectando…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Descargar</string>\n  <string name=\"available_layouts_not_available_language\">Tu idioma no está disponible, por favor seleccione uno de la lista</string>\n  <string name=\"available_layouts_language_dialog_title\">Lenguajes Disponibles</string>\n  <string name=\"available_layouts_checking_language_dialog\">Verificación de versiones de idioma local</string>\n  <string name=\"available_layouts_downloading_dialog\">Descargando…</string>\n  <string name=\"available_layouts_successful_download\">La disposición fue descargada con éxito</string>\n  <string name=\"available_layouts_unsuccessful_download\">No se pudo descargar la disposición, por favor intente más tarde</string>\n  <string name=\"available_layouts_null_response_received\">Error al recuperar datos del servidor</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Predeterminado</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Personalizado</string>\n  <string name=\"github_repository_settings_username\">Nombre de usuario GitHub: </string>\n  <string name=\"github_repository_settings_repository_name\">Nombre del Repositorio: </string>\n  <string name=\"github_repository_settings_branch_name\">Nombre de la rama: </string>\n  <string name=\"github_repository_settings_valid_server\">Repositorio de GitHub válido</string>\n  <string name=\"github_repository_settings_invalid_server\">Repositorio de GitHub inválido</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">Creado satisfactoriamente</string>\n  <string name=\"error_creating\">Error creando</string>\n  <string name=\"db_error\">Error de base de datos</string>\n  <string name=\"successfully_saved\">Guardado correctamente</string>\n  <string name=\"saving_error\">Error al guardar</string>\n  <string name=\"pr_status\">Estado del Pull Request:</string>\n  <string name=\"repository_information_error\">Error con información del repositorio</string>\n  <string name=\"successfully_uploaded\">Subido correctamente</string>\n  <string name=\"error_uploading\">Error subiendo</string>\n  <string name=\"gpx_file_read_error\">Error leyendo el archivo GPX</string>\n  <string name=\"gpx_file_not_found\">Archivo GPX no encontrado</string>\n  <string name=\"uploading_file\">Subiendo archivo:</string>\n  <string name=\"item_selected\">Item seleccionado:</string>\n  <string name=\"github_repository_private\">Privado:</string>\n  <string name=\"github_creating_repository\">Creando repositorio</string>\n  <string name=\"github_no_repository_name\">Debe especificar un nombre de repositorio</string>\n  <string name=\"error_field_required\">Debe especificar un valor para este campo</string>\n  <string name=\"retrieving_repositories\">Obteniendo repositorios...</string>\n  <string name=\"error_retrieving_repositories\">Error obteniendo repositorios</string>\n  <string name=\"successfully_retrieved_repositories\">Repositorios obtenidos correctamente</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Configure</string>\n  <string name=\"github_token_placeholder\">Token de GitHub:</string>\n  <string name=\"github_get_token_btn\">Obtener token</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Cómo obtener un Token de GitHub</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Clic en el botón para abrir el sitio web de GitHub y crear un token. Inicia sesión con su cuenta de GitHub si es necesario.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Seleccione  \\\"Tokens (Classic)\\\" y clic en el botón \\\"Generate new token.</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Asigne un nombre descriptivo a su token.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Seleccione una fecha de expiración. Recomendamos \\\"No expiration\\\" para evitar repetir este paso. </string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Seleccione el alcance o permisos que quiere otorgar al token (OSMTracker solo requiere el permiso de repo).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Clic el botón \\\"Generate token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Copie el token generado y péguelo en el campo \\\"GitHub token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Puede guardarlo vacío para eliminar sus credenciales. </string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Mensaje del commit:</string>\n  <string name=\"upload_to_github_create_fork\">Crear\\nbifurcar</string>\n  <string name=\"upload_to_github_open_pull_request\">Abrir Pull Request</string>\n  <string name=\"upload_to_github_select_repo\">Seleccione el repositorio</string>\n  <string name=\"upload_to_github_create_repository\">Crear repositorio</string>\n  <string name=\"upload_to_github_commit_btn\">Commit</string>\n  <string name=\"upload_to_github_configure\">Configure</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Nombre de usuario del repositorio original</string>\n  <string name=\"upload_to_github_forked_repo_name\">Nombre del repositorio original</string>\n  <string name=\"create\">Crear</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Título del Pull Request</string>\n  <string name=\"upload_to_github_pr_description\">Descripción del Pull Request</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Introducción a OSMTracker para Android ™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Bienvenido a OSMTracker para Android ™ 👋</string>\n  <string name=\"app_intro_slide1_description\">¡Esta aplicación es un software libre que respeta tu libertad!</string>\n  <!--Intro - slide What's new-->\n  <string name=\"app_intro_slide_whats_new_title\">¿Qué novedades hay en esta versión?</string>\n  <string name=\"app_intro_slide_whats_new_description\">Ya podemos subir notas a OSM, y los mosaicos de mapas de CyclOSM y OpenTopo vuelven a estar disponibles. ¡Disfruten!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Feliz trazado 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker para Android usará su ubicación GPS para registrar puntos de traza y puntos, incluso cuando la aplicación se está ejecutando en segundo plano.\nTus datos no se utilizan para respaldar anuncios.</string>\n  <string name=\"no_app_to_handle_file_type\">No se encontró alguna aplicación para abrir este archivo.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Grabación de voz</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-et/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger_voicerec_stop\">Peata</string>\n  <string name=\"tracklogger_btnBack\">Tagasi</string>\n  <string name=\"tracklogger_gps_disabled\">GPS on väljas</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerii või kaamera?</string>\n  <!--Waypoint List-->\n  <!--Track Manager-->\n  <string name=\"trackmgr_contextmenu_delete\">Kustuta</string>\n  <string name=\"trackmgr_contextmenu_display\">Näita</string>\n  <string name=\"trackmgr_contextmenu_details\">Üksikasjad</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail_startdate\">Alguse aeg:</string>\n  <string name=\"trackdetail_enddate\">Lõpu aeg:</string>\n  <string name=\"trackdetail_startloc\">Algab:</string>\n  <string name=\"trackdetail_endloc\">Lõpeb:</string>\n  <string name=\"trackdetail_exportdate\">Eksporditud:</string>\n  <string name=\"trackdetail_description\">Kirjeldus</string>\n  <string name=\"osm_visibility_private\">Privaatne</string>\n  <string name=\"osm_visibility_public\">Avalik</string>\n  <string name=\"osm_visibility_identifiable\">Tuvastatav</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload_ok\">Salvesta ja laadi üles</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_stillimage\">Tee foto</string>\n  <string name=\"gpsstatus_record_textnote\">Tekstimärkus</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Seaded</string>\n  <string name=\"menu_about\">Info</string>\n  <string name=\"menu_save\">Salvesta</string>\n  <string name=\"menu_cancel\">Loobu</string>\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <string name=\"about\">Info</string>\n  <!--Notification-->\n  <!--Display track-->\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Salvesta</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Täpsus</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logoa</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Handiagotu</string>\n  <string name=\"acc.zoom_out\">Txikiagotu</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satelite seinalearen indar adierazlea</string>\n  <string name=\"acc.record_indicator\">Grabaketa prozesuaren adierazlea</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Ibilbidearen egoera adierazlea</string>\n  <string name=\"acc.upload_status\">OpenStreetMap-era karga adierazlea</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Ezarpenak</string>\n  <string name=\"prefs_gps\">GPSa</string>\n  <string name=\"prefs_gps_os_settings\">GPS ezarpenak</string>\n  <string name=\"prefs_gps_os_settings_summary\">Erakutsi sistemako GPS ezarpenak</string>\n  <string name=\"prefs_check_gps_startup\">Begiratu GPSa abioan</string>\n  <string name=\"prefs_check_gps_startup_summary\">Begiratu GPSa ezgaitua dagoen abioan, eta gaitzeko eskeini</string>\n  <string name=\"prefs_gps_ignore_clock\">Ezikusi GPS erlojua</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ezikusi GPS erlojua eta Android erlojua erabili data-zigilutarako</string>\n  <string name=\"prefs_gps_logging_interval\">GPS erregistratze tartea</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Erabili 0 txikienarentzat (baterian eragina du)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segundu</string>\n  <string name=\"prefs_ui\">Erabiltzaile interfazea</string>\n  <string name=\"prefs_ui_buttons_layout\">Botoi aurrezarpenak</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Aukeratu pertsonalizaturiko botoiak (ikus dokumentuak)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Lehenetsia</string>\n  <string name=\"prefs_ui_orientation\">Orientazioa</string>\n  <string name=\"prefs_ui_orientation_summary\">Pantaila botoientzako hobetsitako orientazioa</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatikoa</item>\n    <item>Erretratua</item>\n    <item>Paisaia</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Ahots grabaketa iraupena</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundu</string>\n  <string name=\"prefs_theme\">Pantaila nagusiko irudia</string>\n  <string name=\"prefs_theme_summary\">Aplikazioa berrabiarazi beharko da aldaketak emateko</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>SE lehenetsia</item>\n    <item>SE lehenetsia (iluna)</item>\n    <item>SE lehenetsia (argia)</item>\n    <item>Kontraste handia</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Pantaila beti martxan</string>\n  <string name=\"prefs_display_always_on_summary\">Pantaila martxan egongo da jarraipenean. Ezgaitu bateria aurrezteko</string>\n  <string name=\"prefs_displaytrack_osm\">Atzeko mapa</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Erakutsi OpenStreetMap mapa ibilbide azpian. Datu konexioa behar du</string>\n  <string name=\"prefs_output\">GPX ezarpenak</string>\n  <string name=\"prefs_storage_dir\">Kanpo memoria (SD) direktorioa</string>\n  <string name=\"prefs_storage_dir_hint\">Erabilgarri hurrengo ibilbidean (ez oraingoan)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Direktorio bat ibilbideko</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Gorde ibilbide bakoitza eta erlazionaturiko fitxategiak bere direktorioan</string>\n  <string name=\"prefs_output_filename\">Izena duten ibilbideentzat fitxategi izena</string>\n  <string name=\"prefs_output_filename_summary\">Fitxategi izenarentzat patroia ibilbideak izena badu</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Ibilbide izena</item>\n    <item>Izena, hasiera data eta ordua</item>\n    <item>Hasiera data eta ordua</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Zehaztasuna GPX fitxategian</string>\n  <string name=\"prefs_output_accuracy_summary\">Gehitu zehaztasun informazioa GPS fitxategian, bideko-puntu izen edo bideko-puntu iruzkinekin</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Bat ere ez</item>\n    <item>Bideko-puntu izenarekin</item>\n    <item>Bideko-puntu iruzkinean</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Erabili HDOP hurbilketa</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Bete HDOPa GPXean zehaztasuneko hurbiltze balioarekin</string>\n  <string name=\"prefs_sound_enabled\">Gaitu soinua</string>\n  <string name=\"prefs_sound_enabled_summary\">Erreproduzitu soinuak ahots grabaketa hasi eta bukatzean</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Berrezarri OSM autentifikazioa</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Ahaztu OSM egiaztagiri eta baimenak eta behartu OSMTracker berriz galdetzera</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Ibilbideak igotzeko OSMTracker berriz baimendu beharko duzu. Ziur zaude?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Hainbat</string>\n  <string name=\"tag.restriction\">Murrizketa</string>\n  <string name=\"tag.car\">Autoa</string>\n  <string name=\"tag.tourism\">Turismoa</string>\n  <string name=\"tag.amenity\">Instalazioa</string>\n  <string name=\"tag.amenity_more\">Instalazio +</string>\n  <string name=\"tag.way\">Bidea</string>\n  <string name=\"tag.track\">Ibilbidea</string>\n  <string name=\"tag.landuse\">Lurraldea</string>\n  <string name=\"tag.misc_bus_stop\">Autobus geltokia</string>\n  <string name=\"tag.misc_railway\">Trenbidea</string>\n  <string name=\"tag.misc_telephone\">Telefonoa</string>\n  <string name=\"tag.misc_post_box\">Postontzia</string>\n  <string name=\"tag.misc_atm\">Kutxazaina</string>\n  <string name=\"tag.misc_bollard\">Zutabea</string>\n  <string name=\"tag.misc_toilets\">Komunak</string>\n  <string name=\"tag.misc_shelter\">Aterpea</string>\n  <string name=\"tag.misc_surveillance\">Zaintza</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Irteerarik ez</string>\n  <string name=\"tag.restriction_one_way\">Norantza bat</string>\n  <string name=\"tag.car_fuel_station\">Gasolindegia</string>\n  <string name=\"tag.car_parking\">Aparkalekua</string>\n  <string name=\"tag.car_emergency_phone\">Larrialdi telefonoa</string>\n  <string name=\"tag.car_turning_circle\">Biribilgunea</string>\n  <string name=\"tag.car_speed_camera\">Abiadura radarra</string>\n  <string name=\"tag.tourism_view_point\">Ikusmira</string>\n  <string name=\"tag.tourism_information\">Informazioa</string>\n  <string name=\"tag.tourism_picnic\">Piknik gunea</string>\n  <string name=\"tag.tourism_attraction\">Atrakzioa</string>\n  <string name=\"tag.tourism_theme_park\">Parke tematikoa</string>\n  <string name=\"tag.tourism_castle\">Gaztelua</string>\n  <string name=\"tag.tourism_monument\">Monumentua</string>\n  <string name=\"tag.tourism_museum\">Museoa</string>\n  <string name=\"tag.tourism_cinema\">Zinema</string>\n  <string name=\"tag.amenity_bench\">Eserlekua</string>\n  <string name=\"tag.amenity_water\">Ura</string>\n  <string name=\"tag.amenity_pharmacy\">Farmazia</string>\n  <string name=\"tag.amenity_shop\">Denda</string>\n  <string name=\"tag.amenity_marina\">Kostaldea</string>\n  <string name=\"tag.amenity_sport\">Kirola</string>\n  <string name=\"tag.amenity_taxi\">Taxia</string>\n  <string name=\"tag.amenity_recycling\">Berziklapena</string>\n  <string name=\"tag.amenity_post_office\">Posta bulegoa</string>\n  <string name=\"tag.amenity_library\">Liburutegia</string>\n  <string name=\"tag.amenitymore_school\">Eskola</string>\n  <string name=\"tag.amenitymore_police\">Polizia</string>\n  <string name=\"tag.amenitymore_fire_station\">Suhiltzaile-etxea</string>\n  <string name=\"tag.amenitymore_bank\">Bankua</string>\n  <string name=\"tag.amenitymore_playground\">Jolastokia</string>\n  <string name=\"tag.amenitymore_pub\">Taberna</string>\n  <string name=\"tag.amenitymore_hotel\">Hotela</string>\n  <string name=\"tag.amenitymore_motel\">Ostatua</string>\n  <string name=\"tag.amenitymore_hostel\">Ostatua</string>\n  <string name=\"tag.amenitymore_restaurant\">Jatetxea</string>\n  <string name=\"tag.amenitymore_fastfood\">Txerri jana</string>\n  <string name=\"tag.amenitymore_camp_site\">Kanpina</string>\n  <string name=\"tag.way_bridge\">Zubia</string>\n  <string name=\"tag.way_zebra_crossing\">Zebra bidea</string>\n  <string name=\"tag.way_motorway\">Autopista</string>\n  <string name=\"tag.way_trunk\">Nagusia</string>\n  <string name=\"tag.way_primary\">Lehen mailakoa</string>\n  <string name=\"tag.way_secondary\">Bigarren mailakoa</string>\n  <string name=\"tag.way_tertiary\">Hirugarren mailakoa</string>\n  <string name=\"tag.way_residential\">Egoitza</string>\n  <string name=\"tag.way_service\">Zerbitzua</string>\n  <string name=\"tag.track_track\">Bidea</string>\n  <string name=\"tag.track_cycleway\">Bide gorria</string>\n  <string name=\"tag.track_footway\">Oinezkoen bidea</string>\n  <string name=\"tag.track_bridleway\">Balazta gunea</string>\n  <string name=\"tag.track_steps\">Harmailak</string>\n  <string name=\"tag.track_living_street\">Kaleko bizitza</string>\n  <string name=\"tag.track_pedestrian\">Oinezkoen bidea</string>\n  <string name=\"tag.track_grade1\">1 maila</string>\n  <string name=\"tag.track_grade2\">2 maila</string>\n  <string name=\"tag.track_grade3\">3 maila</string>\n  <string name=\"tag.track_grade4\">4 maila</string>\n  <string name=\"tag.track_grade5\">5 maila</string>\n  <string name=\"tag.landuse_farm\">Baserria</string>\n  <string name=\"tag.landuse_landfill\">Zabortegia</string>\n  <string name=\"tag.landuse_basin\">Arroa</string>\n  <string name=\"tag.landuse_reservoir\">Urtegia</string>\n  <string name=\"tag.landuse_forest\">Basoa</string>\n  <string name=\"tag.landuse_allotments\">Partzelak</string>\n  <string name=\"tag.landuse_cemetery\">Hilerria</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker Androiderako™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Ibilbide erregistroa</string>\n  <string name=\"tracklogger_waiting_gps\">GPSa itxaroten botoiak gaitzeko...</string>\n  <string name=\"tracklogger_voicerec_title\">Ahots grabaketa</string>\n  <string name=\"tracklogger_voicerec_text\">{0}s audioa grabatzen.</string>\n  <string name=\"tracklogger_voicerec_stop\">Gelditu</string>\n  <string name=\"tracklogger_btnBack\">Atzera</string>\n  <string name=\"tracklogger_tracked\">Ibilitakoa:</string>\n  <string name=\"tracklogger_gps_disabled\">GPSa ezgaitua</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPSa ezgaitua dago. Gaitu nahi al duzu?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Bideko-puntu zerrenda</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Zehaz:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Ibilbide kudeaketa</string>\n  <string name=\"trackmgr_tracklist\">Ibilbide zerrenda:</string>\n  <string name=\"trackmgr_waypoints_count\">Bide-puntuak:</string>\n  <string name=\"trackmgr_trackpoints_count\">Ibilbide-puntuak:</string>\n  <string name=\"trackmgr_empty\">Ez daukazu ibilbiderik.</string>\n  <string name=\"trackmgr_newtrack_error\">Ezin da ibilbide berria sortu: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Gelditu ibilbidea</string>\n  <string name=\"trackmgr_contextmenu_resume\">Berrekin ibilbidea</string>\n  <string name=\"trackmgr_contextmenu_delete\">Ezabatu</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportatu GPX moduan</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Igo OpenStreetMap-era</string>\n  <string name=\"trackmgr_contextmenu_display\">Erakutsi</string>\n  <string name=\"trackmgr_contextmenu_details\">Xehetasunak</string>\n  <string name=\"trackmgr_contextmenu_title\">#{0} ibilbidea</string>\n  <string name=\"trackmgr_delete_confirm\">#{0} ibilbidea ezabatua izango da</string>\n  <string name=\"trackmgr_deleteall_confirm\">Ibilbide guztiak ezabatuak izango dira. Ziur zaude?</string>\n  <string name=\"trackmgr_exporting\">#{0} ibilbidea exportatzen...</string>\n  <string name=\"trackmgr_export_error\">Ezin izan da ibilbidea exportatu: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Ibilbide guztiak exportatuko dira eta denbora luzea iraun dezake. Ziur zaude?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Ibilbide xehetasunak</string>\n  <string name=\"trackdetail_startdate\">Hasiera ordua:</string>\n  <string name=\"trackdetail_enddate\">Amaiera ordua:</string>\n  <string name=\"trackdetail_startloc\">Hasiera:</string>\n  <string name=\"trackdetail_endloc\">Amaiera:</string>\n  <string name=\"trackdetail_exportdate\">Exportatua:</string>\n  <string name=\"trackdetail_osm_upload_date\">OpenStreetMap-era igota:</string>\n  <string name=\"trackdetail_btn_export\">Exportatu GPX-era</string>\n  <string name=\"trackdetail_export_notyet\">(Oraindik exportatu gabe)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Oraindik igo gabe)</string>\n  <string name=\"trackdetail_export_display\">Erakutsi</string>\n  <string name=\"trackdetail_description\">Deskribapena</string>\n  <string name=\"trackdetail_tags\">Etiketak (komaz bereiziak)</string>\n  <string name=\"trackdetail_description_mandatory\">Deskribapena sartu behar duzu</string>\n  <string name=\"osm_visibility_private\">Pribatua</string>\n  <string name=\"osm_visibility_public\">Publikoa</string>\n  <string name=\"osm_visibility_trackable\">Jarraigarria</string>\n  <string name=\"osm_visibility_identifiable\">Identifikagarria</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Igo OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Gorde eta igo</string>\n  <string name=\"osm_upload_tmpfile_failed\">Ezin izan da ibilbidea aldi bateko fitxategira exportatu</string>\n  <string name=\"osm_upload_oauth_failed\">Ezin izan da OSMn autentifikatu</string>\n  <string name=\"osm_upload_sending\">#{0} ibilbidea bidaltzen...</string>\n  <string name=\"osm_upload_waiting_response\">OpenStreetMap zerbitzariaren erantzunaren zain...</string>\n  <string name=\"osm_upload_error\">Akatsa ibilbidea igotzerakoan</string>\n  <string name=\"osm_upload_bad_response\">OSM zerbitzariak akatsa izan du: ({0}) mezua {1}</string>\n  <string name=\"osm_upload_unauthorized\">Autorizazio akatsa. Nahi al duzu gordetako OpenStreetMap egiaztagiriak garbitzea?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap-era arrakastaz igo da</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Ahots grabazioa</string>\n  <string name=\"gpsstatus_record_textnote\">Testu oharra</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Ezarpenak</string>\n  <string name=\"menu_waypointlist\">Bide-puntuak</string>\n  <string name=\"menu_about\">Honi buruz</string>\n  <string name=\"menu_displaytrack\">Erakutsi ibilbidea</string>\n  <string name=\"menu_stoptracking\">Gelditu eta gorde</string>\n  <string name=\"menu_newtrack\">Ibilbide berria</string>\n  <string name=\"menu_deletetracks\">Ezabatu ibilbide guztiak</string>\n  <string name=\"menu_continue\">Jarraitu ibilbidea</string>\n  <string name=\"menu_stopcurrenttrack\">Gelditu oraingo ibilbidea</string>\n  <string name=\"menu_save\">Gorde</string>\n  <string name=\"menu_cancel\">Ezeztatu</string>\n  <string name=\"menu_export\">Exportatu GPXera</string>\n  <string name=\"menu_osm_upload\">Igo OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Erdiratu GPSra</string>\n  <string name=\"menu_exportall\">Exportatu dena GPXra</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Ezin izan da kanpo memorian idatzi</string>\n  <string name=\"error_create_track_dir\">Ezin izan da %s ibilbidearen karpeta sortu</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Mesedez begiratu kanpo memoria zuzen sartuta edo muntatuta dagoen.</string>\n  <string name=\"error_voicerec_failed\">Ahots grabaketak akatsa izan du</string>\n  <string name=\"error_userlayout_parsing\">Akatsa XML banaketa fitxategia analizatzean. Mesedez itzuli lehenetsitako banaketara.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Androiderako OSMTracker-ekin jarraitua™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Abisua: GPSak bidalitako HDOP balioak ez dira HDOPrenak. Kokalekuko metrotako zehaztasunarekin hurbilduak dira.</string>\n  <!--About screen-->\n  <string name=\"about\">Honi buruz</string>\n  <string name=\"about_text\">Informazio, dokumentu eta arazo txosten gehiagorako, mesedez bisitatu proiektuko webgunea:</string>\n  <string name=\"about_translate_text\">Lagundu OSMTracker itzultzen:</string>\n  <string name=\"about_debug_info\">Arazketa informazioa</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker jarraipena egiten ari da</string>\n  <string name=\"notification_title\">OSMTracker (#{0}) jarraitzen ari da</string>\n  <string name=\"notification_text\">Ukitu hemen pantaila nagusia erakusteko</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Erakutsi ibilbidea</string>\n  <string name=\"displaytrack_north\">I</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Gorde</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Zehaztasuna</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap ibilbidea</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu/waypoints.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"wpt_voicerec\">Ahots grabaketa</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">لوگو OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">بزرگنمایی</string>\n  <string name=\"acc.zoom_out\">کوچکنمایی</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">نشانگر قدرت سیگنال ماهواره</string>\n  <string name=\"acc.record_indicator\">نشانگر «در حال ضبط»</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">نشانگر «وضعیت رد»</string>\n  <string name=\"acc.upload_status\">نشانگر «وضعیت بارگذاری در OpenStreetMap»</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">ضبط صدا</string>\n  <string name=\"wpt_stillimage\">تصویر</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">لوگوی OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">بزرگنمایی</string>\n  <string name=\"acc.zoom_out\">کوچکنمایی</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">نشانگر قدرت سیگنال ماهواره</string>\n  <string name=\"acc.record_indicator\">نشانگر «در حال ضبط»</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">نشانگر «وضعیت رد»</string>\n  <string name=\"acc.upload_status\">نشانگر «وضعیت بارگذاری در OpenStreetMap»</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">تنظیمات</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">تنظیمات GPS </string>\n  <string name=\"prefs_gps_os_settings_summary\">نمایش صفحهٔ تنظیمات GPS سیستم</string>\n  <string name=\"prefs_check_gps_startup\">بررسی GPS هنگام شروع</string>\n  <string name=\"prefs_check_gps_startup_summary\">بررسی غیرفعال بودن GPS هنگام شروع برنامه و پیشنهاد برای فعال‌سازی آن</string>\n  <string name=\"prefs_gps_ignore_clock\">نادیده‌گرفتن ساعت GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">نادیده‌گرفتن ساعت جی‌پی‌اس و استفاده از ساعت آندروید برای timestamps</string>\n  <string name=\"prefs_gps_logging_interval\">فواصل ثبت GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">برای کوتاهترین زمان ممکن از 0 استفاده کنید. (مؤثر در مصرف باتری)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">ثانیه</string>\n  <string name=\"prefs_ui\">رابط کاربری</string>\n  <string name=\"prefs_ui_picture_source\">منبع پیشفرض برای تصاویر</string>\n  <string name=\"prefs_ui_picture_source_summary\">عکس‌برداری با دوربین یا انتخاب از گالری؟</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>دوربین</item>\n    <item>گالری</item>\n    <item>همیشه بپرس</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">پیش‌تنظیم‌های دکمه‌ها</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">انتخاب مجموعهٔ دلخواه از دکمه‌ها (مستندات را ببینید)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">چیدمان پیشفرض</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">پیشفرض</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">چیدمان دانلودشده</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">فایل‌های چیدمان را دانلود نکرده‌اید</string>\n  <string name=\"prefs_ui_available_layout\">چیدمان‌های موجود</string>\n  <string name=\"prefs_ui_github_repository_settings\">تنظیمات مخزن گیت‌هاب</string>\n  <string name=\"prefs_ui_orientation\">جهت</string>\n  <string name=\"prefs_ui_orientation_summary\">جهتی که برای صفحهٔ دکمه‌ها ترجیح می‌دهید</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>خودکار</item>\n    <item>عمودی</item>\n    <item>افقی</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">مدت ضبط صدا</string>\n  <string name=\"prefs_voicerec_duration_seconds\">ثانیه</string>\n  <string name=\"prefs_theme\">قالب گرافیکی صفحهٔ اصلی</string>\n  <string name=\"prefs_theme_summary\">برای اثربخشی تغییرات، لازم است برنامه مجدداً راه‌اندازی شود</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>پیشفرض سیستم‌عامل</item>\n    <item>پیشفرض سیستم‌عامل (تیره)</item>\n    <item>پیشفرض سیستم‌عامل (روشن)</item>\n    <item>پادنمایی زیاد</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">صفحه همیشه روشن</string>\n  <string name=\"prefs_display_always_on_summary\">هنگام ثبت رد، صفحه‌نمایش روشن خواهد ماند. برای صرفه‌جویی در مصرف باتری غیرفعال کنید.</string>\n  <string name=\"prefs_displaytrack_osm\">نقشهٔ پس‌زمینه</string>\n  <string name=\"prefs_displaytrack_osm_summary\">نمایش نقشهٔ OpenStreetMap زیر رد. به ارتباط اینترنتی نیاز دارد</string>\n  <string name=\"prefs_output\">تنظیمات GPS</string>\n  <string name=\"prefs_storage_dir_hint\">موثر برای رد بعدی (روی رد فعلی تاثیر نمی‌گذارد)</string>\n  <string name=\"prefs_output_one_dir_per_track\">یک شاخه برای هر رد</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">هر رد و فایل‌های پیوست آن را در شاخهٔ مجزا ذخیره کن</string>\n  <string name=\"prefs_output_filename\">نام فایل برای ردهای نام‌دار</string>\n  <string name=\"prefs_output_filename_summary\">الگو برای نام فایل، اگر رد نام داشته باشد</string>\n  <string name=\"prefs_output_accuracy\">ثبت دقت در فایل GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">اطلاعات دقت را به فایل GPX اضافه می‌کند: در کنار نام نقطهٔ بین‌راهی یا در توضیحات نقطهٔ بین‌راهی</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>خالی</item>\n    <item>کنار نام نقطه</item>\n    <item>در توضیحات نقطه</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">از تقریب HDOP استفاده شود</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">مقدار HDOP در فایل GPX با مقداری تقریبی از دقت دستگاه پر شود.</string>\n  <string name=\"prefs_sound_enabled\">فعال‌سازی صدا</string>\n  <string name=\"prefs_sound_enabled_summary\">هنگام شروع و پایان ضبط صدا هشدار صوتی داده شود</string>\n  <string name=\"prefs_osm_clear_oauth_data\">بازنشانی اطلاعات احراز هویت OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">اعتبارنامه‌ها و مجوزهای OSM را فراموش کن و OSMTracker را مجبور به درخواست دوبارهٔ آن‌ها کن</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">باید به OSMTracker مجوز بدهید تا دوباره بتوانید ردها را بارگذاری کنید. مطمئن هستید؟</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>خالی</item>\n    <item>در توضیحات</item>\n    <item>در extension</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">مشخص می‌کند آیا و چگونه اطلاعات قطب‌نما به فایل GPX وارد شود</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">متفرقه</string>\n  <string name=\"tag.restriction\">محدودیت</string>\n  <string name=\"tag.car\">خودرو</string>\n  <string name=\"tag.tourism\">گردشگری</string>\n  <string name=\"tag.amenity\">مکان رفاهی</string>\n  <string name=\"tag.amenity_more\">مکان رفاهی (+)</string>\n  <string name=\"tag.way\">جاده</string>\n  <string name=\"tag.track\">مسیر</string>\n  <string name=\"tag.landuse\">کاربری اراضی</string>\n  <string name=\"tag.misc_bus_stop\">ایستگاه اتوبوس</string>\n  <string name=\"tag.misc_railway\">راه‌آهن</string>\n  <string name=\"tag.misc_telephone\">تلفن</string>\n  <string name=\"tag.misc_post_box\">صندوق پست</string>\n  <string name=\"tag.misc_atm\">خودپرداز</string>\n  <string name=\"tag.misc_bollard\">تیرک مهار</string>\n  <string name=\"tag.misc_toilets\">دستشویی</string>\n  <string name=\"tag.misc_shelter\">پناهگاه</string>\n  <string name=\"tag.misc_surveillance\">نظارت</string>\n  <string name=\"tag.restriction_20\">حداکثر ۲۰</string>\n  <string name=\"tag.restriction_30\">حداکثر ۳۰</string>\n  <string name=\"tag.restriction_40\">حداکثر ۴۰</string>\n  <string name=\"tag.restriction_50\">حداکثر ۵۰</string>\n  <string name=\"tag.restriction_60\">حداکثر ۶۰</string>\n  <string name=\"tag.restriction_70\">حداکثر ۷۰</string>\n  <string name=\"tag.restriction_80\">حداکثر ۸۰</string>\n  <string name=\"tag.restriction_90\">حداکثر ۹۰</string>\n  <string name=\"tag.restriction_100\">حداکثر ۱۰۰</string>\n  <string name=\"tag.restriction_110\">حداکثر ۱۱۰</string>\n  <string name=\"tag.restriction_120\">حداکثر ۱۲۰</string>\n  <string name=\"tag.restriction_130\">حداکثر ۱۳۰</string>\n  <string name=\"tag.restriction_no_exit\">بن‌بست</string>\n  <string name=\"tag.restriction_traffic_light\">چراغ راهنمایی‌ورانندگی</string>\n  <string name=\"tag.restriction_one_way\">یکطرفه</string>\n  <string name=\"tag.car_fuel_station\">جایگاه سوخت</string>\n  <string name=\"tag.car_parking\">پارکینگ</string>\n  <string name=\"tag.car_emergency_phone\">تلفن اضطراری</string>\n  <string name=\"tag.car_turning_circle\">محل دورزدن</string>\n  <string name=\"tag.car_speed_camera\">دوربین سرعت</string>\n  <string name=\"tag.tourism_view_point\">مکان دیدنی</string>\n  <string name=\"tag.tourism_information\">اطلاعات</string>\n  <string name=\"tag.tourism_picnic\">محل اردو</string>\n  <string name=\"tag.tourism_attraction\">جاذبه</string>\n  <string name=\"tag.tourism_theme_park\">پارک تفریحی</string>\n  <string name=\"tag.tourism_castle\">قلعه</string>\n  <string name=\"tag.tourism_monument\">یادمان</string>\n  <string name=\"tag.tourism_museum\">موزه</string>\n  <string name=\"tag.tourism_cinema\">سینما</string>\n  <string name=\"tag.amenity_bench\">نمیکت</string>\n  <string name=\"tag.amenity_water\">آب</string>\n  <string name=\"tag.amenity_pharmacy\">داروخانه</string>\n  <string name=\"tag.amenity_shop\">مغازه</string>\n  <string name=\"tag.amenity_marina\">دریایی</string>\n  <string name=\"tag.amenity_sport\">ورزشی</string>\n  <string name=\"tag.amenity_taxi\">تاکسی</string>\n  <string name=\"tag.amenity_doctors\">بیمارستان،\\nپزشکان</string>\n  <string name=\"tag.amenity_recycling\">بازیافت</string>\n  <string name=\"tag.amenity_place_of_worship\">مکان/nعبادت</string>\n  <string name=\"tag.amenity_post_office\">ادارهٔ پست</string>\n  <string name=\"tag.amenity_library\">کتابخانه</string>\n  <string name=\"tag.amenitymore_school\">مدرسه</string>\n  <string name=\"tag.amenitymore_police\">پلیس</string>\n  <string name=\"tag.amenitymore_fire_station\">ایستگاه آتش‌نشانی</string>\n  <string name=\"tag.amenitymore_bank\">بانک</string>\n  <string name=\"tag.amenitymore_playground\">زمین بازی</string>\n  <string name=\"tag.amenitymore_pub\">بار</string>\n  <string name=\"tag.amenitymore_hotel\">هتل</string>\n  <string name=\"tag.amenitymore_motel\">متل</string>\n  <string name=\"tag.amenitymore_hostel\">مهمانپذیر</string>\n  <string name=\"tag.amenitymore_restaurant\">رستوران</string>\n  <string name=\"tag.amenitymore_fastfood\">فست‌فود</string>\n  <string name=\"tag.amenitymore_camp_site\">اردوگاه</string>\n  <string name=\"tag.way_bridge\">پل</string>\n  <string name=\"tag.way_zebra_crossing\">خط‌کشی راه‌راه پیاده</string>\n  <string name=\"tag.way_motorway\">آزادراه</string>\n  <string name=\"tag.way_trunk\">بزرگراه</string>\n  <string name=\"tag.way_primary\">شریانی اصلی</string>\n  <string name=\"tag.way_secondary\">شریانی فرعی</string>\n  <string name=\"tag.way_tertiary\">جمع‌وپخش‌کننده</string>\n  <string name=\"tag.way_residential\">مسکونی</string>\n  <string name=\"tag.way_service\">دسترسی</string>\n  <string name=\"tag.track_track\">جاده خاکی\\ntrack</string>\n  <string name=\"tag.track_cycleway\">مسیر دوچرخه</string>\n  <string name=\"tag.track_footway\">راه پیاده</string>\n  <string name=\"tag.track_bridleway\">مسیر مال‌رو</string>\n  <string name=\"tag.track_steps\">پله</string>\n  <string name=\"tag.track_living_street\">خیابان محلی\\nLiving street</string>\n  <string name=\"tag.track_pedestrian\">پیاده‌راه</string>\n  <string name=\"tag.track_grade1\">درجه ۱</string>\n  <string name=\"tag.track_grade2\">درجه ۲</string>\n  <string name=\"tag.track_grade3\">درجه ۳</string>\n  <string name=\"tag.track_grade4\">درجه ۴</string>\n  <string name=\"tag.track_grade5\">درجه ۵</string>\n  <string name=\"tag.landuse_farm\">مزرعه</string>\n  <string name=\"tag.landuse_landfill\">محل دفن زباله</string>\n  <string name=\"tag.landuse_basin\">حوضچه</string>\n  <string name=\"tag.landuse_reservoir\">مخزن</string>\n  <string name=\"tag.landuse_forest\">جنگل</string>\n  <string name=\"tag.landuse_allotments\">باغ‌های تخصیص‌یافته</string>\n  <string name=\"tag.landuse_cemetery\">گورستان</string>\n  <string name=\"tag.landuse_recreation_ground\">زمین تفریح/nو سرگرمی</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker™ برای آندرویید</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">با الهام از OSMTracker در ویندوز موبایل، این نرم‌افزار به شما این امکان را می‌دهد که رد سفرهای خود را ضبط کنید، نقاط بین‌راهی مهم را نشانه‌گذاری کنید (همراه با ضبط صدا و تصاویر) و از آن‌ها در قالب فایل GPX خروجی بگیرید. سپس می‌توانید این خروجی‌ها را در ابزارهای OpenStreetMap، مانند JOSM به‌کار ببرید.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">واقعه‌نگار مسیر</string>\n  <string name=\"tracklogger_waiting_gps\">در انتظار ثابت‌شدن GPS برای فعال‌سازی دکمه‌ها...</string>\n  <string name=\"tracklogger_voicerec_title\">ضبط صدا</string>\n  <string name=\"tracklogger_voicerec_text\">در حال ضبط (0) ثانیه فایل صوتی</string>\n  <string name=\"tracklogger_voicerec_stop\">توقف</string>\n  <string name=\"tracklogger_btnBack\">عقب</string>\n  <string name=\"tracklogger_tracked\">مسیر ثبت شده:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS غیرفعال</string>\n  <string name=\"tracklogger_gps_disabled_hint\">‏GPS غیرفعال است. آن را فعال می‌کنید؟</string>\n  <string name=\"tracklogger_choose_gallery_camera\">گالری تصاویر یا دوربین؟</string>\n  <string name=\"tracklogger_camera\">با دوربین عکس بگیر</string>\n  <string name=\"tracklogger_gallery\">انتخاب عکس از گالری</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">لیست نقاط بین‌راهی</string>\n  <string name=\"wplist_latitude\">عرض جغرافیایی:</string>\n  <string name=\"wplist_longitude\">طول جغرافیایی:</string>\n  <string name=\"wplist_elevation\">ارتفاع:</string>\n  <string name=\"wplist_accuracy\">دقت:</string>\n  <string name=\"wplist_compass\">جهت قطب‌نما:</string>\n  <string name=\"wplist_compass_accuracy\">دقت قطب‌نما:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">مدیریت مسیرها</string>\n  <string name=\"trackmgr_tracklist\">لیست مسیرها:</string>\n  <string name=\"trackmgr_waypoints_count\">نقاط بین‌راهی:</string>\n  <string name=\"trackmgr_trackpoints_count\">نقاط مسیر:</string>\n  <string name=\"trackmgr_empty\">شما هیچ مسیری ندارید.</string>\n  <string name=\"trackmgr_newtrack_hint\">برای ضبط یک رد تازه لمس کنید</string>\n  <string name=\"trackmgr_newtrack_error\">امکان ساخت مسیر جدید وجود ندارد: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">هم‌اکنون در حال ضبط <b>مسیر#{0}</b> هستید\\nبرای ادامه آن را از لیست انتخاب کنید</string>\n  <string name=\"trackmgr_contextmenu_stop\">توقف ثبت مسیر</string>\n  <string name=\"trackmgr_contextmenu_resume\">ادامهٔ ثبت مسیر</string>\n  <string name=\"trackmgr_contextmenu_delete\">حذف</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">بارگذاری در OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">نمایش</string>\n  <string name=\"trackmgr_contextmenu_details\">جزئیات</string>\n  <string name=\"trackmgr_contextmenu_title\">مسیر #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">مسیر #{0} پاک خواهد شد</string>\n  <string name=\"trackmgr_deleteall_confirm\">تمامی مسیرها پاک خواهد شد. آیا مطمئن هستید؟</string>\n  <string name=\"trackmgr_exporting\">در حال خروجی‌گرفتن از مسیر #{0}...</string>\n  <string name=\"trackmgr_exporting_prepare\">در حال آماده‌سازی فایل خروجی...</string>\n  <string name=\"trackmgr_export_error\">امکان تهیهٔ خروجی از مسیر: {0} وجود ندارد</string>\n  <string name=\"trackmgr_exportall_confirm\">از تمامی مسیرها خروجی تهیه خواهد شد که امکان دارد زمان زیادی طول بکشد. آیا مطمئن هستید؟</string>\n  <string name=\"trackmgr_prepare_for_share_error\">امکان پردازش رد وجود ندارد: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">جزئیات مسیر</string>\n  <string name=\"trackdetail_startdate\">زمان شروع:</string>\n  <string name=\"trackdetail_enddate\">زمان خاتمه:</string>\n  <string name=\"trackdetail_startloc\">شروع در:</string>\n  <string name=\"trackdetail_endloc\">خاتمه در:</string>\n  <string name=\"trackdetail_exportdate\">خروجی:</string>\n  <string name=\"trackdetail_osm_upload_date\">در OpenStreetMap بارگذاری شد:</string>\n  <string name=\"trackdetail_btn_export\">خروجی در قالب GPX</string>\n  <string name=\"trackdetail_export_notyet\">(هنوز خروجی نگرفته‌اید)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(هنوز بارگذاری نشده است)</string>\n  <string name=\"trackdetail_export_display\">نمایش</string>\n  <string name=\"trackdetail_description\">توضیح</string>\n  <string name=\"trackdetail_tags\">برچسب (با کاما جدا شوند)</string>\n  <string name=\"trackdetail_description_mandatory\">باید توضیحی بنویسید</string>\n  <string name=\"osm_visibility_private\">خصوصی</string>\n  <string name=\"osm_visibility_public\">عمومی</string>\n  <string name=\"osm_visibility_trackable\">قابل ردیابی</string>\n  <string name=\"osm_visibility_identifiable\">قابل‌شناسایی</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">بارگذاری در OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">ذخیره و بارگذاری</string>\n  <string name=\"osm_upload_tmpfile_failed\">تهیهٔ خروجی مسیر بر روی فایل موقت ناموفق بود</string>\n  <string name=\"osm_upload_oauth_failed\">تأیید حساب کاربری در OSM ناموفق بود</string>\n  <string name=\"osm_upload_sending\">در حال ارسال مسیر #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">منتظر پاسخ از سرور OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">بارگذاری مسیر با خطا مواجه گردید</string>\n  <string name=\"osm_upload_bad_response\">سرور OSM یک خطا برگرداند: {(0)} پیغام {1}</string>\n  <string name=\"osm_upload_unauthorized\">خطای دسترسی. مایلید اطلاعات ورود به حساب کاربری OpenStreetMap از روی دستگاه پاک شود؟</string>\n  <string name=\"osm_upload_sucess\">بارگذاری در OpenStreetMap موفقیت‌آمیز بود</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">ضبط صدا</string>\n  <string name=\"gpsstatus_record_stillimage\">گرفتن عکس</string>\n  <string name=\"gpsstatus_record_textnote\">یادداشت متنی</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">تنظیمات</string>\n  <string name=\"menu_waypointlist\">نقاط بین‌راهی</string>\n  <string name=\"menu_about\">دربارهٔ ما</string>\n  <string name=\"menu_displaytrack\">نمایش مسیر</string>\n  <string name=\"menu_stoptracking\">توقف و ذخیره</string>\n  <string name=\"menu_newtrack\">مسیر جدید</string>\n  <string name=\"menu_deletetracks\">پاک کردن تمامی مسیرها</string>\n  <string name=\"menu_continue\">ادامه‌دادن مسیر</string>\n  <string name=\"menu_stopcurrenttrack\">توقف مسیر جاری</string>\n  <string name=\"menu_save\">ذخیره</string>\n  <string name=\"menu_cancel\">لغو</string>\n  <string name=\"menu_export\">خروجی در قالب GPX</string>\n  <string name=\"menu_osm_upload\">بارگذاری در OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">مرکز به GPS</string>\n  <string name=\"menu_exportall\">همه را در قالب GPX خروجی بگیر</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">نرم‌افزار نمی‌تواند در حافظه خارجی بنویسد.</string>\n  <string name=\"error_create_track_dir\">نرم‌افزار نمی‌تواند پوشهٔ رد %s را بسازد</string>\n  <string name=\"error_externalstorage_not_writable_hint\">لطفاً مطمئن شوید حافظهٔ خارجی دستگاه به‌درستی جاگذاری و سوار (mount) شده باشد.</string>\n  <string name=\"error_voicerec_failed\">ضبط صدا با اشکال مواجه شد</string>\n  <string name=\"error_userlayout_parsing\">خطا هنگام تجزیهٔ فایل چیدمان XML. لطفاً به چیدمان پیشفرض برگردانید.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">با OSM Tracker for Android™‎ ضبط شده است</string>\n  <string name=\"gpx_hdop_approximation_cmt\">هشدار: مقادیر HDOP همان مقادیر HDOP دریافتی از دستگاه GPS نیست؛ بلکه بر اساس دقت مکانی بر حسب متر تقریب زده شده.</string>\n  <!--About screen-->\n  <string name=\"about\">درباره</string>\n  <string name=\"about_text\">برای اطلاعات بیشتر، دیدن مستندات و گزارش مشکل لطفاً از سایت پروژه دیدن فرمایید:</string>\n  <string name=\"about_translate_text\">کمک کنید OSMTracker را ترجمه کنیم:</string>\n  <string name=\"about_debug_info\">اطلاعات debug</string>\n  <string name=\"about_export_db\">خروجی از پایگاه‌داده</string>\n  <string name=\"about_exporting_db\">در حال خروجی‌گرفتن از پایگاه‌داده....</string>\n  <string name=\"about_export_db_result\">نتیجهٔ خروجی پایگاه‌داده: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">‏OSMTracker درحال ثبت مسیر است</string>\n  <string name=\"notification_title\">‏OSMTracker درحال ثبت مسیر است (#{0})</string>\n  <string name=\"notification_text\">برای نمایش صفحهٔ اصلی اینجا را لمس کنید</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">نمایش مسیر</string>\n  <string name=\"displaytrack_map\">نمایش نقشهٔ پس‌زمنیه</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">ذخیره</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">م</string>\n  <string name=\"various_accuracy\">دقت</string>\n  <string name=\"various_accuracy_with_sats\">دقت {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">در انتظار تثبیت GPS...‏ ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°‎</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">منتظر جهت حرکت...</string>\n  <string name=\"various_heading_unknown\">سیستم قادر به تشخیص جهت حرکت نیست</string>\n  <string name=\"various_export_finished\">فرآیند برون‌برد با موفقیت پایان یافت</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">نمایش مسیر اوپن‌استریت‌مپ</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">به‌روزرسانی و نصب</string>\n  <string name=\"buttons_presets_context_menu_delete\">حذف</string>\n  <string name=\"buttons_presets_updating_layout\">در حال به‌روزآوری...</string>\n  <string name=\"buttons_presets_successful_update\">به‌روزرسانی چیدمان با موفقیت انجام شد</string>\n  <string name=\"buttons_presets_unsuccessful_update\">چیدمان به‌روز نشد، بعداً تلاش کنید</string>\n  <string name=\"buttons_presets_delete_message\">آیا چیدمان {0} را حذف می‌کنید؟</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">بله</string>\n  <string name=\"buttons_presets_successful_delete\">چیدمان با موفقیت حذف شد</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">شاخهٔ icon با موفقیت حذف شد</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">هیچ شاخهٔ icon متناظر با این فایل وجود ندارد</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">چیدمان را نمی‌توان حذف کرد</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">خطا: نمی‌توان به اینترنت متصل شد</string>\n  <string name=\"available_layouts_response_null_exception\">خطا: نمی‌توان به مخزن پیشفرض برای چیدمان‌های سفارشی متصل شد</string>\n  <string name=\"available_layouts_connecting_message\">(در حال اتصال...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">بارگیری</string>\n  <string name=\"available_layouts_not_available_language\">زبان شما موجود نیست. یکی را از لیست انتخاب کنید</string>\n  <string name=\"available_layouts_language_dialog_title\">زبان‌های موجود</string>\n  <string name=\"available_layouts_checking_language_dialog\">در حال بررسی نسخه‌های زبان محلی</string>\n  <string name=\"available_layouts_downloading_dialog\">در حال بارگیری...</string>\n  <string name=\"available_layouts_successful_download\">چیدمان با موفقیت بارگیری شد</string>\n  <string name=\"available_layouts_unsuccessful_download\">چیدمان بارگیری نمی‌شود. بعداً تلاش کنید</string>\n  <string name=\"available_layouts_null_response_received\">خطا در بازیابی داده‌ها از سرور</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">پیشفرض</string>\n  <string name=\"github_repository_settings_custom_checkbox\">سفارشی</string>\n  <string name=\"github_repository_settings_username\">نام کاربری گیت‌هاب:</string>\n  <string name=\"github_repository_settings_repository_name\">نام مخزن:</string>\n  <string name=\"github_repository_settings_branch_name\">نام شاخه:</string>\n  <string name=\"github_repository_settings_valid_server\">مخزن گیت‌هاب معتبر</string>\n  <string name=\"github_repository_settings_invalid_server\">مخزن گیت‌هاب نامعتبر</string>\n  <!--App Introduction-->\n  <string name=\"app_intro\">مقدمهٔ OSMTracker for Android™‎</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">به OSMTracker for Android™‎ خوش آمدید 👋</string>\n  <string name=\"app_intro_slide1_description\">این اپلیکیشن نرم‌افزاری آزاد است و به آزادی شما احترام می‌گذارد!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">با ردگیری خوش بگذرانید 🗺 😎</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">ضبط صدا</string>\n  <string name=\"wpt_stillimage\">تصویر</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Lähennä</string>\n  <string name=\"acc.zoom_out\">Loitonna</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satelliittisignaalin voimakkuuden ilmaisin</string>\n  <string name=\"acc.record_indicator\">Tallennuksen ilmaisin</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Reitin tilan ilmaisin</string>\n  <string name=\"acc.upload_status\">OpenStreetMap-lähetyksen ilmaisin</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Asetukset</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-asetukset</string>\n  <string name=\"prefs_gps_os_settings_summary\">Näytä GPS-asetusten ikkuna</string>\n  <string name=\"prefs_check_gps_startup\">Tarkista GPS käynnistettäessä</string>\n  <string name=\"prefs_check_gps_startup_summary\">Tarkista jos GPS ei ole päällä käynnistettäessä ja kysy tarvittaessa</string>\n  <string name=\"prefs_gps_ignore_clock\">Älä käytä GPS-aikaa</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Käytä Androidin kelloa aikamerkinnöille</string>\n  <string name=\"prefs_gps_logging_interval\">GPS-kirjauksen aikaväli</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Käytä 0 lyhimpään mahdolliseen (vaikuttaa akun kestoon)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekuntia</string>\n  <string name=\"prefs_ui\">Käyttöliittymä</string>\n  <string name=\"prefs_ui_picture_source\">Kuvan oletuslähde</string>\n  <string name=\"prefs_ui_picture_source_summary\">Otetaanko kuvat kamerasta vai galleriasta?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamerasta</item>\n    <item>Galleriasta</item>\n    <item>Kysy aina</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Painike-esiasetukset</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Salli omat painikeasetukset (kts. dokumentit)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Oletus</string>\n  <string name=\"prefs_ui_orientation\">Suuntaus</string>\n  <string name=\"prefs_ui_orientation_summary\">Ensisijainen suuntaus nappinäkymään</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automaattinen</item>\n    <item>Pystysuuntainen</item>\n    <item>Vaakasuuntainen</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Äänitallenteen kesto</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekuntia</string>\n  <string name=\"prefs_theme\">Pääikkunan teema</string>\n  <string name=\"prefs_theme_summary\">Käynnistä sovellus uudelleen, jotta asetukset tulevat voimaan</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Käyttöjärjestelmän oletus</item>\n    <item>Käyttöjärjestelmän oletus (Tumma)</item>\n    <item>Käyttöjärjestelmän oletus (Vaalea)</item>\n    <item>Korkea kontrasti</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Pidä näyttö aina päällä</string>\n  <string name=\"prefs_display_always_on_summary\">Näyttö pysyy päällä seurannan ajan. Poista käytöstä säästääksesi akkua</string>\n  <string name=\"prefs_displaytrack_osm\">OSM-tausta</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Näytä OpenStreetMap-kartta reitin alla. Tarvitset datayhteyden</string>\n  <string name=\"prefs_output\">GPX-asetukset</string>\n  <string name=\"prefs_storage_dir\">Muistikortin (SD) kansio</string>\n  <string name=\"prefs_storage_dir_hint\">Vaikuttaa seuraavaan reittiin (ei nykyiseen)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Yksi kansio per reitti</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Tallenna jokainen reitti ja siihen liittyvät tiedostot aina omaan kansioon</string>\n  <string name=\"prefs_output_filename\">Tiedostonimi nimetyille seurannoille</string>\n  <string name=\"prefs_output_filename_summary\">Tiedostonimen muoto jos reitillä on nimi</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Reitin nimi</item>\n    <item>Nimi, aloituspäivä ja aika</item>\n    <item>Aloituspäivä ja aika</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Tarkkuus GPX-tiedostossa</string>\n  <string name=\"prefs_output_accuracy_summary\">Salli tarkkuusinfo GPX-tiedostossa waypoint-nimellä tai erillisellä kommentilla</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Ei mitään</item>\n    <item>Waypoint-nimi</item>\n    <item>Waypoint-kommentti</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Käytä HDOP-arviota</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Täytä HDOP GPX:ään tarkkuuden arviolla</string>\n  <string name=\"prefs_sound_enabled\">Ota äänet käyttöön</string>\n  <string name=\"prefs_sound_enabled_summary\">Anna äänimerkki äänitallennuksen alussa ja lopussa</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Nollaa OSM-kirjautuminen</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Unohda OSM-tunnukset ja oikeudet sekä pakota OSMTracker kysymään niitä uudestaan</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Joudut antamaan OSMTrackerille uudestaan luvan jälkien lähettämiseen. Oletko varma?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Pyöräilykartta</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ei lainkaan</item>\n    <item>Kommenttina</item>\n    <item>Tarkenteessa</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Määrittää, viedäänkö ja millä tavoin kompassin tiedot GPX-tiedostoon</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Sekalaiset</string>\n  <string name=\"tag.restriction\">Rajoitukset</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Turismi</string>\n  <string name=\"tag.amenity\">Palvelut</string>\n  <string name=\"tag.amenity_more\">Palvelut (+)</string>\n  <string name=\"tag.way\">Tie</string>\n  <string name=\"tag.track\">Reitti</string>\n  <string name=\"tag.landuse\">Maankäyttö</string>\n  <string name=\"tag.misc_bus_stop\">Linja-autopysäkki</string>\n  <string name=\"tag.misc_railway\">Rautatie</string>\n  <string name=\"tag.misc_telephone\">Puhelin</string>\n  <string name=\"tag.misc_post_box\">Postilaatikko</string>\n  <string name=\"tag.misc_atm\">Pankkiautomaatti</string>\n  <string name=\"tag.misc_bollard\">Kulkueste</string>\n  <string name=\"tag.misc_toilets\">WC</string>\n  <string name=\"tag.misc_shelter\">Suoja</string>\n  <string name=\"tag.misc_surveillance\">Valvonta</string>\n  <string name=\"tag.restriction_20\">Max. 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max. 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max. 60</string>\n  <string name=\"tag.restriction_70\">Max. 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max. 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max. 130</string>\n  <string name=\"tag.restriction_no_exit\">Tie päättyy</string>\n  <string name=\"tag.restriction_traffic_light\">Liikennevalo</string>\n  <string name=\"tag.restriction_one_way\">Yksisuuntainen</string>\n  <string name=\"tag.car_fuel_station\">Huoltoasema</string>\n  <string name=\"tag.car_parking\">Parkkipaikka</string>\n  <string name=\"tag.car_emergency_phone\">Hätäpuhelin</string>\n  <string name=\"tag.car_turning_circle\">Kääntöpaikka</string>\n  <string name=\"tag.car_speed_camera\">Nopeusvalvontakamera</string>\n  <string name=\"tag.tourism_view_point\">Näköalapaikka</string>\n  <string name=\"tag.tourism_information\">Info-piste</string>\n  <string name=\"tag.tourism_picnic\">Eväsretkipaikka</string>\n  <string name=\"tag.tourism_attraction\">Nähtävyys</string>\n  <string name=\"tag.tourism_theme_park\">Teemapuisto</string>\n  <string name=\"tag.tourism_castle\">Linna</string>\n  <string name=\"tag.tourism_monument\">Patsas</string>\n  <string name=\"tag.tourism_museum\">Museo</string>\n  <string name=\"tag.tourism_cinema\">Elokuvateatteri</string>\n  <string name=\"tag.amenity_bench\">Penkki</string>\n  <string name=\"tag.amenity_water\">Vettä</string>\n  <string name=\"tag.amenity_pharmacy\">Apteekki</string>\n  <string name=\"tag.amenity_shop\">Kauppa</string>\n  <string name=\"tag.amenity_marina\">Huvivenesatama</string>\n  <string name=\"tag.amenity_sport\">Urheilu</string>\n  <string name=\"tag.amenity_taxi\">Taksiasema</string>\n  <string name=\"tag.amenity_doctors\">Sairaala,\\nTohtorit</string>\n  <string name=\"tag.amenity_recycling\">Kierrätys</string>\n  <string name=\"tag.amenity_place_of_worship\">Uskonnollinen\\npaikka</string>\n  <string name=\"tag.amenity_post_office\">Posti</string>\n  <string name=\"tag.amenity_library\">Kirjasto</string>\n  <string name=\"tag.amenitymore_school\">Koulu</string>\n  <string name=\"tag.amenitymore_police\">Poliisi</string>\n  <string name=\"tag.amenitymore_fire_station\">Paloasema</string>\n  <string name=\"tag.amenitymore_bank\">Pankki</string>\n  <string name=\"tag.amenitymore_playground\">Leikkikenttä</string>\n  <string name=\"tag.amenitymore_pub\">Pubi</string>\n  <string name=\"tag.amenitymore_hotel\">Hotelli</string>\n  <string name=\"tag.amenitymore_motel\">Motelli</string>\n  <string name=\"tag.amenitymore_hostel\">Hostelli</string>\n  <string name=\"tag.amenitymore_restaurant\">Ravintola</string>\n  <string name=\"tag.amenitymore_fastfood\">Pikaruokala</string>\n  <string name=\"tag.amenitymore_camp_site\">Leirintäalue</string>\n  <string name=\"tag.way_bridge\">Silta</string>\n  <string name=\"tag.way_zebra_crossing\">Suojatie</string>\n  <string name=\"tag.way_motorway\">Moottoritie</string>\n  <string name=\"tag.way_trunk\">Valtatie</string>\n  <string name=\"tag.way_primary\">Kantatie</string>\n  <string name=\"tag.way_secondary\">Seututie</string>\n  <string name=\"tag.way_tertiary\">Yhdystie</string>\n  <string name=\"tag.way_residential\">Asuntoalue</string>\n  <string name=\"tag.way_service\">Huolto</string>\n  <string name=\"tag.track_track\">Reitti</string>\n  <string name=\"tag.track_cycleway\">Pyörätie</string>\n  <string name=\"tag.track_footway\">Kävelytie</string>\n  <string name=\"tag.track_bridleway\">Ratsastustie</string>\n  <string name=\"tag.track_steps\">Portaat</string>\n  <string name=\"tag.track_living_street\">Pihakatu</string>\n  <string name=\"tag.track_pedestrian\">Kävelykatu</string>\n  <string name=\"tag.track_grade1\">Luokka 1</string>\n  <string name=\"tag.track_grade2\">Luokka 2</string>\n  <string name=\"tag.track_grade3\">Luokka 3</string>\n  <string name=\"tag.track_grade4\">Luokka 4</string>\n  <string name=\"tag.track_grade5\">Luokka 5</string>\n  <string name=\"tag.landuse_farm\">Maatila</string>\n  <string name=\"tag.landuse_landfill\">Kaatopaikka</string>\n  <string name=\"tag.landuse_basin\">Vuorovesialue</string>\n  <string name=\"tag.landuse_reservoir\">Tekojärvi</string>\n  <string name=\"tag.landuse_forest\">Metsä</string>\n  <string name=\"tag.landuse_allotments\">Siirtolapuutarha</string>\n  <string name=\"tag.landuse_cemetery\">Hautausmaa</string>\n  <string name=\"tag.landuse_recreation_ground\">Leikki-\\npaikka</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker Android™-laitteille</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">OSMTrackerin (Windows Mobile) innoittama. Kirjaa reittisi, merkitse tärkeät kohteet (äänitallenne, kuva), tallenna GPX-muodossa myöhempää OpenStreetMap/JOSM-käyttöä varten.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Reittilokikirja</string>\n  <string name=\"tracklogger_waiting_gps\">Odotetaan GPS-sijaintia…</string>\n  <string name=\"tracklogger_voicerec_title\">Äänitallennus</string>\n  <string name=\"tracklogger_voicerec_text\">Tallennetaan {0} s äänitiedosto.</string>\n  <string name=\"tracklogger_voicerec_stop\">Pysäytä</string>\n  <string name=\"tracklogger_btnBack\">Takaisin</string>\n  <string name=\"tracklogger_tracked\">Reitti: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS pois päältä</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS on pois päältä. Haluatko sen päälle?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galleria vai kamera?</string>\n  <string name=\"tracklogger_camera\">Ota kuva kameralla</string>\n  <string name=\"tracklogger_gallery\">Valitse kuva galleriasta</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Etappilista</string>\n  <string name=\"wplist_latitude\">Lev:</string>\n  <string name=\"wplist_longitude\">Pit:</string>\n  <string name=\"wplist_elevation\">Kork:</string>\n  <string name=\"wplist_accuracy\">Tark:</string>\n  <string name=\"wplist_compass\">Lasket. suunt.:</string>\n  <string name=\"wplist_compass_accuracy\">Lasket. tark.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Reittimanageri</string>\n  <string name=\"trackmgr_tracklist\">Reittilista:</string>\n  <string name=\"trackmgr_waypoints_count\">Etapit: </string>\n  <string name=\"trackmgr_trackpoints_count\">Reittipisteet: </string>\n  <string name=\"trackmgr_empty\">Ei reittejä.</string>\n  <string name=\"trackmgr_newtrack_error\">Uuden reitin luonti ei onnistu: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Tallennat parhaillaan <b>reittiä #{0}</b>\\nValitse se listasta jatkaaksesi</string>\n  <string name=\"trackmgr_contextmenu_stop\">Lopeta seuranta</string>\n  <string name=\"trackmgr_contextmenu_resume\">Jatka reitin tallentamista</string>\n  <string name=\"trackmgr_contextmenu_delete\">Poista</string>\n  <string name=\"trackmgr_contextmenu_export\">Tallenna GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Lähetä OpenStreetMapiin</string>\n  <string name=\"trackmgr_contextmenu_display\">Näytä</string>\n  <string name=\"trackmgr_contextmenu_details\">Lisätietoja</string>\n  <string name=\"trackmgr_contextmenu_title\">Reitti #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Reitti #{0} poistetaan</string>\n  <string name=\"trackmgr_deleteall_confirm\">Kaikki reiti poistetaan. Oletko varma?</string>\n  <string name=\"trackmgr_exporting\">Tallennetaan reitti #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Valmistellaan viemistä…</string>\n  <string name=\"trackmgr_export_error\">Reittiä ei voitu tallentaa: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Kaikki reitit viedään, mutta siinä saattaa kestää kauan. Haluatko jatkaa?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Reitin tiedot</string>\n  <string name=\"trackdetail_startdate\">Alkuaika:</string>\n  <string name=\"trackdetail_enddate\">Loppuaika:</string>\n  <string name=\"trackdetail_startloc\">Alkaa:</string>\n  <string name=\"trackdetail_endloc\">Loppuu:</string>\n  <string name=\"trackdetail_exportdate\">Viety:</string>\n  <string name=\"trackdetail_osm_upload_date\">Lähetetty OpenStreetMapiin:</string>\n  <string name=\"trackdetail_btn_export\">Vie GPX-muodossa</string>\n  <string name=\"trackdetail_export_notyet\">(Ei viety vielä)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ei lähetetty vielä)</string>\n  <string name=\"trackdetail_export_display\">Näytä</string>\n  <string name=\"trackdetail_description\">Kuvaus</string>\n  <string name=\"trackdetail_tags\">Tunnisteet (pilkuin erotettu)</string>\n  <string name=\"trackdetail_description_mandatory\">Sinun täytyy lisätä kuvaus</string>\n  <string name=\"osm_visibility_private\">Yksityinen</string>\n  <string name=\"osm_visibility_public\">Julkinen</string>\n  <string name=\"osm_visibility_trackable\">Jäljitettävissä</string>\n  <string name=\"osm_visibility_identifiable\">Tunnistettavissa</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap-lähetys</string>\n  <string name=\"osm_upload_ok\">Tallenna ja lähetä</string>\n  <string name=\"osm_upload_tmpfile_failed\">Reittiä ei voitu tallentaa väliaikaistiedostoon</string>\n  <string name=\"osm_upload_oauth_failed\">Kirjautuminen OSM:iin epäonnistui</string>\n  <string name=\"osm_upload_sending\">Lähetetään reittiä #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Odotetaan OpenStreetMap-palvelimen vastausta…</string>\n  <string name=\"osm_upload_error\">Virhe lähetettäessä reittiä</string>\n  <string name=\"osm_upload_bad_response\">OSM-palvelin palautti virheen: ({0}) message {1} </string>\n  <string name=\"osm_upload_unauthorized\">Virhe kirjautumisessa. Haluatko poistaa tallennetut OpenStreetMapin tunnukset?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap-lähetys onnistui</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Äänitallenne</string>\n  <string name=\"gpsstatus_record_stillimage\">Ota kuva</string>\n  <string name=\"gpsstatus_record_textnote\">Tekstitieto</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Asetukset</string>\n  <string name=\"menu_waypointlist\">Etapit</string>\n  <string name=\"menu_about\">Tietoja</string>\n  <string name=\"menu_displaytrack\">Näytä reitti</string>\n  <string name=\"menu_stoptracking\">Lopeta &amp; tallenna</string>\n  <string name=\"menu_newtrack\">Uusi reitti</string>\n  <string name=\"menu_deletetracks\">Poista kaikki reitit</string>\n  <string name=\"menu_continue\">Jatka reittiä</string>\n  <string name=\"menu_stopcurrenttrack\">Pysäytä nykyinen reitti</string>\n  <string name=\"menu_save\">Tallenna</string>\n  <string name=\"menu_cancel\">Peru</string>\n  <string name=\"menu_export\">Vie GPX-muodossa</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap-lähetys</string>\n  <string name=\"menu_center_to_gps\">Keskitä GPS-sijaintiin</string>\n  <string name=\"menu_exportall\">Vie kaikki GPX-muodossa</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Ulkoiselle muistikortille ei voitu kirjoittaa.</string>\n  <string name=\"error_create_track_dir\">Ei voitu luoda reittikansiota %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Tarkista ulkoinen muisti.</string>\n  <string name=\"error_voicerec_failed\">Äänitallennus epäonnistui</string>\n  <string name=\"error_userlayout_parsing\">Virhe XML-layoutissa. Valitse oletuslayout.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Reititys: OSMTracker Android™-laitteille</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Varoitus: HDOP-arvot eivät ole GPS-laitteelta. Ne ovat arvioituja sijainnin tarkkuuksia (m), eikä niihin pidä luottaa.</string>\n  <!--About screen-->\n  <string name=\"about\">Tietoja</string>\n  <string name=\"about_text\">Lisätiedot, kuten dokumentit ja ongelmaraportointi, projektin verkkosivustolla:</string>\n  <string name=\"about_translate_text\">Auta kääntämään OSMTrackeria:</string>\n  <string name=\"about_debug_info\">Virheenjäljitys</string>\n  <string name=\"about_export_db\">Vie tietokanta</string>\n  <string name=\"about_exporting_db\">Viedään tietokantaa…</string>\n  <string name=\"about_export_db_result\">Tietokannan viennin tulos: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker on edelleen päällä</string>\n  <string name=\"notification_title\">OSMTracker on edelleen päällä</string>\n  <string name=\"notification_text\">Kosketa tähän näyttääksesi pääikkunan</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Näytä reitti</string>\n  <string name=\"displaytrack_map\">Näytä taustakartta</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Tallenna</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Tarkkuus</string>\n  <string name=\"various_accuracy_with_sats\">Tarkkuus {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Odotetaan GPS-korjausta… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Odotetaan suuntaa…</string>\n  <string name=\"various_heading_unknown\">Suuntaa ei voi määrittää</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap-reittinäyttö</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Päivitä &amp; asenna</string>\n  <string name=\"buttons_presets_context_menu_delete\">Poista</string>\n  <string name=\"buttons_presets_updating_layout\">Päivitetään…</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Kyllä</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connecting_message\">(Yhdistetään…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Lataa</string>\n  <string name=\"available_layouts_language_dialog_title\">Saatavilla olevat kielet</string>\n  <string name=\"available_layouts_downloading_dialog\">Ladataan…</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Oletus</string>\n  <string name=\"github_repository_settings_username\">Github-käyttäjätunnus: </string>\n  <string name=\"github_repository_settings_repository_name\">Tietovaraston nimi:</string>\n  <string name=\"github_repository_settings_branch_name\">Haaran nimi:</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Äänitallenne</string>\n  <string name=\"wpt_stillimage\">Kuva</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoom avant</string>\n  <string name=\"acc.zoom_out\">Zoom arrière</string>\n  <string name=\"acc.zoom_center\">centre de zoom</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicateur de signal GPS</string>\n  <string name=\"acc.record_indicator\">Indicateur d\\'enregistrement</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicateur d\\'état de la trace</string>\n  <string name=\"acc.upload_status\">Indicateur d\\'upload vers OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Paramètres</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Paramètres GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Affiche l\\'écran de paramètrage GPS Android</string>\n  <string name=\"prefs_check_gps_startup\">Vérifier le GPS au démarrage</string>\n  <string name=\"prefs_check_gps_startup_summary\">Vérifie si le GPS est désactivé au démarrage, et propose de l\\'activer</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorer l\\'horloge du GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignore l\\'horloge du GPS et utilise celle d\\'Android pour l\\'horodatage</string>\n  <string name=\"prefs_use_barometer\">Enregistre la pression barométrique [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">La modification requiert un redémarrage de la trace</string>\n  <string name=\"prefs_gps_logging_interval\">Intervalle d\\'enregistrement GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Choisissez 0 pour le plus petit intervalle possible (consomme plus de batterie)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">seconds</string>\n  <string name=\"prefs_gps_logging_min_distance\">Distance d\\'enregistrement GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Distance minimale entre les points de suivi en mètres, utilisez 0 pour la plus courte possible</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">mètres</string>\n  <string name=\"prefs_ui\">Interface utilisateur</string>\n  <string name=\"prefs_ui_picture_source\">Source des photographies par défaut</string>\n  <string name=\"prefs_ui_picture_source_summary\">Prendre des photographies à partir de l’appareil photo ou à partir de la gallerie d’images ?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Appareil photo</item>\n    <item>Gallerie</item>\n    <item>Toujours demander</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Boutons</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Permet de définir des boutons personalisés (voir la doc)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">PRÉSENTATION PAR DÉFAUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Par défaut</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">PRÉSENTATION TÉLÉCHARGÉE</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Vous n\\'avez pas téléchargé de modèles de présentation</string>\n  <string name=\"prefs_ui_available_layout\">Modèles disponibles</string>\n  <string name=\"prefs_ui_github_repository_settings\">Paramètres de dépôt Github</string>\n  <string name=\"prefs_ui_orientation\">Orientation</string>\n  <string name=\"prefs_ui_orientation_summary\">Permet de définir l\\'orientation préférée</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatique</item>\n    <item>Portrait</item>\n    <item>Paysage</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Durée du mémo vocal</string>\n  <string name=\"prefs_voicerec_duration_seconds\">secondes</string>\n  <string name=\"prefs_theme\">Thème graphique</string>\n  <string name=\"prefs_theme_summary\">Redémarrage de l\\'application nécessaire pour prendre effet</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS par défaut</item>\n    <item>OS par défaut (Noir)</item>\n    <item>OS par défaut (Lumineux)</item>\n    <item>Contraste élevé</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Écran toujours actif</string>\n  <string name=\"prefs_display_always_on_summary\">L\\'écran restera actif durant l\\'enregistrement. Désactivez pour économiser la batterie</string>\n  <string name=\"prefs_displaytrack_osm\">OSM en arrière plan</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Affiche OpenStreetMap sous la trace. Nécessite une connexion de données</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Toujours afficher l\\'arrière-plan OpenStreetMap? Nécessite une connexion de données</string>\n  <string name=\"prefs_output\">Fichier d\\'enregistrement GPX</string>\n  <string name=\"prefs_storage_dir\">Dossier de stockage dans les documents</string>\n  <string name=\"prefs_storage_dir_hint\">S\\'applique à partir de la prochaine trace</string>\n  <string name=\"prefs_output_one_dir_per_track\">Un dossier par trace</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Sauvegarde chaque trace et ses données associées dans son propre dossier</string>\n  <string name=\"prefs_output_filename\">Nom du fichier pour traces nommées</string>\n  <string name=\"prefs_output_filename_summary\">Modèle pour le nom du fichier, si la trace a un nom</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nom de la trace</item>\n    <item>Nom, date et heure de début</item>\n    <item>Date et heure de début, nom</item>\n    <item>Date et heure de début</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Étiquette du nom de fichier</string>\n  <string name=\"prefs_output_filename_label_summary\">Cette étiquette sera ajoutée à la fin du nom de fichier</string>\n  <string name=\"prefs_output_accuracy\">Contenu du fichier GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Intègre la précision au fichier GPX, dans le nom des waypoint ou dans un tag séparé</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Aucun</item>\n    <item>Dans le nom des waypoint</item>\n    <item>Dans le tag commentaire des waypoints</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Approximation HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Ajout du HDOP dans le GPX (issu d\\'une approximation à partir de la précision)</string>\n  <string name=\"prefs_sound_enabled\">Activer le son</string>\n  <string name=\"prefs_sound_enabled_summary\">Joue un son lorsqu\\'un mémo vocal commence et se termine</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Supprimer les identifiants OpenStreetMap</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Force OSMTracker à se ré-authentifier sur OpenStreetMap</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Vous devrez vous reconnecter à OpenStreetMap. Êtes-vous sûr ?</string>\n  <string name=\"prefs_map_tile\">Fournisseur de tuiles de carte</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Aucun</item>\n    <item>En commentaire</item>\n    <item>En extention</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exporter la direction de la boussole</string>\n  <string name=\"prefs_compass_heading_summary\">Définit si et comment les données du compas devraient être exportés dans le fichier GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Divers</string>\n  <string name=\"tag.restriction\">Restriction</string>\n  <string name=\"tag.car\">Voiture</string>\n  <string name=\"tag.tourism\">Tourisme</string>\n  <string name=\"tag.amenity\">Service</string>\n  <string name=\"tag.amenity_more\">Service (+)</string>\n  <string name=\"tag.way\">Route</string>\n  <string name=\"tag.track\">Chemin</string>\n  <string name=\"tag.landuse\">Occupation\ndes sols</string>\n  <string name=\"tag.misc_bus_stop\">Arrêt de bus</string>\n  <string name=\"tag.misc_railway\">Voie ferrée</string>\n  <string name=\"tag.misc_telephone\">Téléphone</string>\n  <string name=\"tag.misc_post_box\">Boite à lettre</string>\n  <string name=\"tag.misc_atm\">Distributeur\nde billets</string>\n  <string name=\"tag.misc_bollard\">Bollard</string>\n  <string name=\"tag.misc_toilets\">Toilettes</string>\n  <string name=\"tag.misc_shelter\">Abri</string>\n  <string name=\"tag.misc_surveillance\">Caméra</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Sans issue</string>\n  <string name=\"tag.restriction_traffic_light\">Feu rouge</string>\n  <string name=\"tag.restriction_one_way\">Sens unique</string>\n  <string name=\"tag.car_fuel_station\">Station service</string>\n  <string name=\"tag.car_parking\">Parking</string>\n  <string name=\"tag.car_emergency_phone\">Téléphone\nd\\'urgence</string>\n  <string name=\"tag.car_turning_circle\">Zone de\ndemi-tour</string>\n  <string name=\"tag.car_speed_camera\">Radar</string>\n  <string name=\"tag.tourism_view_point\">Point de vue</string>\n  <string name=\"tag.tourism_information\">Information</string>\n  <string name=\"tag.tourism_picnic\">Pique-nique</string>\n  <string name=\"tag.tourism_attraction\">A voir</string>\n  <string name=\"tag.tourism_theme_park\">Parc d\\'attraction</string>\n  <string name=\"tag.tourism_castle\">Château</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Musée</string>\n  <string name=\"tag.tourism_cinema\">Cinéma</string>\n  <string name=\"tag.amenity_bench\">Banc</string>\n  <string name=\"tag.amenity_water\">Eau</string>\n  <string name=\"tag.amenity_pharmacy\">Pharmacie</string>\n  <string name=\"tag.amenity_shop\">Magasin</string>\n  <string name=\"tag.amenity_marina\">Marine</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Médecin</string>\n  <string name=\"tag.amenity_recycling\">Recyclage</string>\n  <string name=\"tag.amenity_place_of_worship\">Lieu de culte</string>\n  <string name=\"tag.amenity_post_office\">Bureau de\nposte</string>\n  <string name=\"tag.amenity_library\">Bibliothèque</string>\n  <string name=\"tag.amenitymore_school\">Ecole</string>\n  <string name=\"tag.amenitymore_police\">Police</string>\n  <string name=\"tag.amenitymore_fire_station\">Pompier</string>\n  <string name=\"tag.amenitymore_bank\">Banque</string>\n  <string name=\"tag.amenitymore_playground\">Aire de\njeux</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hôtel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Auberge</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast food</string>\n  <string name=\"tag.amenitymore_camp_site\">Camping</string>\n  <string name=\"tag.way_bridge\">Pont</string>\n  <string name=\"tag.way_zebra_crossing\">Passage\npiéton</string>\n  <string name=\"tag.way_motorway\">Autoroute</string>\n  <string name=\"tag.way_trunk\">Trunk</string>\n  <string name=\"tag.way_primary\">Primaire</string>\n  <string name=\"tag.way_secondary\">Secondaire</string>\n  <string name=\"tag.way_tertiary\">Tertiaire</string>\n  <string name=\"tag.way_residential\">Résidentiel</string>\n  <string name=\"tag.way_service\">Service</string>\n  <string name=\"tag.track_track\">Chemin</string>\n  <string name=\"tag.track_cycleway\">Piste\ncyclable</string>\n  <string name=\"tag.track_footway\">Chemin\npiéton</string>\n  <string name=\"tag.track_bridleway\">Route\nà cheval</string>\n  <string name=\"tag.track_steps\">Escalier</string>\n  <string name=\"tag.track_living_street\">Voie privée</string>\n  <string name=\"tag.track_pedestrian\">Piéton</string>\n  <string name=\"tag.track_grade1\">Classe 1</string>\n  <string name=\"tag.track_grade2\">Classe 2</string>\n  <string name=\"tag.track_grade3\">Classe 3</string>\n  <string name=\"tag.track_grade4\">Classe 4</string>\n  <string name=\"tag.track_grade5\">Classe 5</string>\n  <string name=\"tag.landuse_farm\">Ferme</string>\n  <string name=\"tag.landuse_landfill\">Sous terre</string>\n  <string name=\"tag.landuse_basin\">Bassin</string>\n  <string name=\"tag.landuse_reservoir\">Réservoir</string>\n  <string name=\"tag.landuse_forest\">Forêt</string>\n  <string name=\"tag.landuse_allotments\">Lotissements</string>\n  <string name=\"tag.landuse_cemetery\">Cimetière</string>\n  <string name=\"tag.landuse_recreation_ground\">Terrain de loisirs</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker pour Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspiré par OSMTracker pour Windows Mobile, Permet d\\'enregistrer vos parcours, de noter des points d\\'interêt (mémo vocal, photo), d\\'exporter au format GPX pour l\\'utiliser avec les outils d\\'Open Street Map comme JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Enregistrement</string>\n  <string name=\"tracklogger_waiting_gps\">En attente de fix GPS pour activer les boutons…</string>\n  <string name=\"tracklogger_voicerec_title\">Enregistrement vocal</string>\n  <string name=\"tracklogger_voicerec_text\">Enregistrement d\\'un mémo de {0}s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Arrêter</string>\n  <string name=\"tracklogger_btnBack\">Retour</string>\n  <string name=\"tracklogger_tracked\">Taggué : </string>\n  <string name=\"tracklogger_gps_disabled\">GPS désactivé</string>\n  <string name=\"tracklogger_gps_disabled_hint\">Le GPS est désactivé. Voulez-vous l\\'activer ?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Gallerie ou prendre une photo ?</string>\n  <string name=\"tracklogger_camera\">Prendre une photo avec l’appareil photo</string>\n  <string name=\"tracklogger_gallery\">Sélectionner la photo à partir de la gallerie d’images</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Liste des points d\\'interêt</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Alt: </string>\n  <string name=\"wplist_accuracy\">Préci: </string>\n  <string name=\"wplist_compass\">Coord. comp.:</string>\n  <string name=\"wplist_compass_accuracy\">Préci. comp.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gestionnaire de traces</string>\n  <string name=\"trackmgr_tracklist\">Liste des traces :</string>\n  <string name=\"trackmgr_waypoints_count\">Points d\\'interêt :</string>\n  <string name=\"trackmgr_trackpoints_count\">Pts. de trace :</string>\n  <string name=\"trackmgr_empty\">Vous n\\'avez pas de traces.</string>\n  <string name=\"trackmgr_newtrack_hint\">Appuyer pour enregistrer une nouvelle trace</string>\n  <string name=\"trackmgr_newtrack_error\">Impossible de créer une nouvelle trace : {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Vous enregistrez en ce moment<b>la trace #{0}</b>\\nChoisissez-la dans la liste pour continuer</string>\n  <string name=\"trackmgr_contextmenu_stop\">Arrêter l\\'enregistrement</string>\n  <string name=\"trackmgr_contextmenu_resume\">Reprendre l\\'enregistrement</string>\n  <string name=\"trackmgr_contextmenu_delete\">Supprimer</string>\n  <string name=\"trackmgr_contextmenu_export\">Exporter</string>\n  <string name=\"trackmgr_contextmenu_share\">Partager</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Uploader vers OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Afficher</string>\n  <string name=\"trackmgr_contextmenu_details\">Détails</string>\n  <string name=\"trackmgr_contextmenu_title\">Trace #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">La trace #{0} sera supprimée.</string>\n  <string name=\"trackmgr_deleteall_confirm\">Toutes les traces seront supprimées. Êtes-vous sûr ?</string>\n  <string name=\"trackmgr_exporting\">Export de la trace #{0} en cours…</string>\n  <string name=\"trackmgr_exporting_prepare\">Préparation de l\\'export...</string>\n  <string name=\"trackmgr_export_error\">Impossible d\\'exporter la trace : {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Toutes les traces vont être exportées, cela peut prendre du temps. Êtes-vous sûr ?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Impossible de traiter la trace : {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Détails de la trace</string>\n  <string name=\"trackdetail_startdate\">Date et heure de début : </string>\n  <string name=\"trackdetail_enddate\">Date et heure de fin : </string>\n  <string name=\"trackdetail_startloc\">Commence à : </string>\n  <string name=\"trackdetail_endloc\">Se termine à : </string>\n  <string name=\"trackdetail_exportdate\">Date et heure d\\'export : </string>\n  <string name=\"trackdetail_osm_upload_date\">Uploadé vers OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exporter en GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Pas encore exporté)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Pas encore uploadé)</string>\n  <string name=\"trackdetail_export_display\">Afficher</string>\n  <string name=\"trackdetail_name\">Nom</string>\n  <string name=\"trackdetail_description\">Description</string>\n  <string name=\"trackdetail_tags\">Tags (séparés par des virgules)</string>\n  <string name=\"trackdetail_description_mandatory\">La description est obligatoire</string>\n  <string name=\"osm_visibility_private\">Privé</string>\n  <string name=\"osm_visibility_public\">Publique</string>\n  <string name=\"osm_visibility_trackable\">Traçable</string>\n  <string name=\"osm_visibility_identifiable\">Identifiable</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Upload OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Sauvegarder et uploader</string>\n  <string name=\"osm_upload_tmpfile_failed\">Erreur lors de l\\'export vers un fichier temporaire</string>\n  <string name=\"osm_upload_oauth_failed\">Erreur d\\'authentification à OpenStreetMap</string>\n  <string name=\"osm_upload_sending\">Envoi de la trace #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Attente de la réponse du serveur…</string>\n  <string name=\"osm_upload_error\">Erreur lors de l\\'upload</string>\n  <string name=\"osm_upload_bad_response\">Le serveur OSM à retourné une erreur ({0} message {1})</string>\n  <string name=\"osm_upload_unauthorized\">Erreur d\\'authentification. Voulez-vouz supprimer les données d\\'authentifications et vous re-connecter ?</string>\n  <string name=\"osm_upload_sucess\">Upload vers OpenStreetMap complété avec succès</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Mémo vocal</string>\n  <string name=\"gpsstatus_record_stillimage\">Prendre une photo</string>\n  <string name=\"gpsstatus_record_textnote\">Note</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Point d\\'interêt/texte</string>\n  <string name=\"waypoint_name_hint\">Entrer le nom du point d\\'intérêt</string>\n  <string name=\"edit_waypoint_bt_preview\">Ouvrir le fichier</string>\n  <string name=\"edit_waypoint_bt_save\">Enregistrer</string>\n  <string name=\"edit_waypoint_bt_delete\">Supprimer</string>\n  <string name=\"edit_waypoint_bt_cancel\">Annuler</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Supprimer point d\\'intérêt</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Supprimer ce point d\\'intérêt?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Supprimer</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Annuler</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Paramètres</string>\n  <string name=\"menu_waypointlist\">Points d\\'interêt</string>\n  <string name=\"menu_about\">À propos</string>\n  <string name=\"menu_displaytrack\">Afficher la trace</string>\n  <string name=\"menu_stoptracking\">Arrêter &amp; Enregistrer</string>\n  <string name=\"menu_newtrack\">Nouvelle trace</string>\n  <string name=\"menu_deletetracks\">Supprimer tout</string>\n  <string name=\"menu_continue\">Continuer la trace</string>\n  <string name=\"menu_stopcurrenttrack\">Stopper la trace active</string>\n  <string name=\"menu_save\">Sauvegarder</string>\n  <string name=\"menu_cancel\">Annuler</string>\n  <string name=\"menu_export\">Exporter en GPX</string>\n  <string name=\"menu_osm_upload\">Upload OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centrer sur le GPS</string>\n  <string name=\"menu_exportall\">Exporter toutes les traces en GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Impossible d\\'écrire dans le stockage externe.</string>\n  <string name=\"error_create_track_dir\">Erreur de création du dossier %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Veuillez vérifier que le stockage est correctement inséré et monté.</string>\n  <string name=\"error_voicerec_failed\">L\\'enregistrement vocal a échoué.</string>\n  <string name=\"error_userlayout_parsing\">Erreur dans la définition des boutons. Veuillez revenir aux boutons par défaut.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Autorisation requise</string>\n  <string name=\"storage_permission_for_export_GPX\">Pour exporter la trace GPX, nous devons écrire sur le stockage.</string>\n  <string name=\"storage_permission_for_display_track\">Pour afficher correctement la trace, nous avons besoin d\\'accéder au stockage.</string>\n  <string name=\"storage_permission_for_share_track\">Pour partager correctement la trace, nous avons besoin d\\'accéder au stockage</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Pour télécharger la trace sur OSM, nous avons besoin d\\'accéder au stockage.</string>\n  <string name=\"acccept\">Accepter</string>\n  <string name=\"gps_perms_required\">Impossible de continuer sans autorisation GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Traces enregistrées avec OSMTracker pour Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Attention : les valeurs HDOP ne sont pas celles retournées par le GPS, mais approximées a partir de la précision en mètres. Elles ne sont donc pas très fiables.</string>\n  <!--About screen-->\n  <string name=\"about\">À propos</string>\n  <string name=\"about_text\">Pour plus d\\'informations, documentation et bugs, veuillez visiter la page du projet :</string>\n  <string name=\"about_translate_text\">Aidez à traduire OSMTracker</string>\n  <string name=\"about_debug_info\">Info de débogage</string>\n  <string name=\"about_export_db\">Export de la base de données</string>\n  <string name=\"about_exporting_db\">Exportation de la base de données ...</string>\n  <string name=\"about_export_db_result\">Résultat de l\\'export de la base de données: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker est en cours d\\'éxécution</string>\n  <string name=\"notification_title\">OSMTracker est en cours d\\'éxécution</string>\n  <string name=\"notification_text\">Taper ici pour afficher l\\'écran principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Afficher la trace</string>\n  <string name=\"displaytrack_map\">Afficher la carte</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Enregistrer</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Précision</string>\n  <string name=\"various_accuracy_with_sats\">Précision {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">En attente de fix GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">En attente de coordonnées...</string>\n  <string name=\"various_heading_unknown\">Les coordonées n\\'ont pas pu être déterminées</string>\n  <string name=\"various_export_finished\">Export réalisé avec succès</string>\n  <string name=\"various_waiting_position\">Poste non disponible</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Voir le tracé avec OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Mettre à jour &amp; Installer</string>\n  <string name=\"buttons_presets_context_menu_delete\">Supprimer</string>\n  <string name=\"buttons_presets_updating_layout\">Mise à jour …</string>\n  <string name=\"buttons_presets_successful_update\">Calque mis à jour avec succès</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Calque non chargé, réessayer plus tard</string>\n  <string name=\"buttons_presets_delete_message\">Êtes-vous sûr de supprimée le calque {0} ?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Oui</string>\n  <string name=\"buttons_presets_successful_delete\">Le calque a été supprimé avec succès</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">L\\'icône du répertoire a été supprimé avec succès</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Ce fichier n\\'a pas de dossier icône associé</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Ce calque ne peut pas être supprimé</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Erreur : Impossible de se connecter à internet</string>\n  <string name=\"available_layouts_response_null_exception\">Erreur : impossible de se connecter au dépôt des dispositions personnalisées par défaut</string>\n  <string name=\"available_layouts_connecting_message\">(Connection …)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Télécharger</string>\n  <string name=\"available_layouts_not_available_language\">Votre langue n\\'est pas disponible. Sélectionner en une dans la liste.</string>\n  <string name=\"available_layouts_language_dialog_title\">Langues disponibles</string>\n  <string name=\"available_layouts_checking_language_dialog\">Vérification des versions locales des langues</string>\n  <string name=\"available_layouts_downloading_dialog\">Téléchargement …</string>\n  <string name=\"available_layouts_successful_download\">Le calque a été téléchargé avec succès</string>\n  <string name=\"available_layouts_unsuccessful_download\">Ce calque ne peut pas être téléchargé, réessayer plus tard</string>\n  <string name=\"available_layouts_null_response_received\">Erreur de récupération des données du serveur</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Défaut</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Personnalisé</string>\n  <string name=\"github_repository_settings_username\">Nom d\\'utilisateur de GitHub:</string>\n  <string name=\"github_repository_settings_repository_name\">Nom du répertoire :</string>\n  <string name=\"github_repository_settings_branch_name\">Nom de la branche :</string>\n  <string name=\"github_repository_settings_valid_server\">Répertoire GitHub valide</string>\n  <string name=\"github_repository_settings_invalid_server\">Répertoire GitHub invalide</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker pour Android™ Introduction</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Bienvenue sur OSMTracker pour Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Cette application est un logiciel libre qui respecte votre liberté !</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Bon cartographiage 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker pour Android utilisera votre position GPS pour enregistrer des traces et des points de passage, même lorsque l\\'application fonctionne en arrière-plan.\n\\nVos données ne sont pas utilisées pour afficher des publicités.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Mémo vocal</string>\n  <string name=\"wpt_stillimage\">Photographie</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr-rFR/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoomer</string>\n  <string name=\"acc.zoom_out\">Dézoomer</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicateur force signal satellite</string>\n  <string name=\"acc.record_indicator\">Indicateur de progression d\\'enregistrement</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicateur de l\\'état des traces</string>\n  <string name=\"acc.upload_status\">Indicateur d\\'état du téléchargement OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr-rFR/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Enregistrement vocal</string>\n  <string name=\"wpt_stillimage\">Photo</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logotipo do OSMTrackwer</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoon máis</string>\n  <string name=\"acc.zoom_out\">Zoom menos</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicador de potencia do sinal de satélite</string>\n  <string name=\"acc.record_indicator\">Indicaror do progreso da gravación</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicador do estado do mapeado</string>\n  <string name=\"acc.upload_status\">OpenStreetMap indicador do estado da carga</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Configuración</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Configuración do GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Amosar pantalla de configuración do sistema GPS</string>\n  <string name=\"prefs_check_gps_startup\">Comprobar GPS no inicio</string>\n  <string name=\"prefs_check_gps_startup_summary\">Comprobar se o GPS está desactivado ao iniciar, e preguntar se desexa activalo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorar o reloxo GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorar o reloxo GPS e utilizar o reloxo Android como marcas de tempo</string>\n  <string name=\"prefs_gps_logging_interval\">Intervalo de rexistro de GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Utilice 0 para o máis breve posible (afecta á vida da batería)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segundos</string>\n  <string name=\"prefs_ui\">Interface de usuario</string>\n  <string name=\"prefs_ui_picture_source\">Fonte de fotos predeterminada</string>\n  <string name=\"prefs_ui_picture_source_summary\">Tomar fotos dende a cámara ou a galería?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Cámara</item>\n    <item>Galería</item>\n    <item>Preguntar sempre</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Disposición dos botóns</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Escolla unha disposición personalizada dos botóns (ver documentación)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Predeterminada</string>\n  <string name=\"prefs_ui_orientation\">Orientación</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientación preferida para a pantalla de botóns</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automático</item>\n    <item>Vertical</item>\n    <item>Apaisado</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duración da gravación de voz</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundos</string>\n  <string name=\"prefs_theme\">Tema da pantalla principal</string>\n  <string name=\"prefs_theme_summary\">É preciso reiniciar a aplicación para que os cambios surtan efecto</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Predeterminado do SO</item>\n    <item>Predeterminado do SO (escuro)</item>\n    <item>SO por defecto (light)</item>\n    <item>Alto contraste</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Pantalla sempre activa</string>\n  <string name=\"prefs_display_always_on_summary\">A pantalla permanecerá encendida mentres estea trazando. Desactivar para aforrar batería</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa de fondo</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Visualizar OpenStreetMap baixo a traza. Require unha conexión de datos</string>\n  <string name=\"prefs_output\">Configuracións GPX</string>\n  <string name=\"prefs_storage_dir\">Cartafol de almacenamento externo (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Actualizar á seguinte pista (non a actual)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Un cartafol por pista</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Gardar cada pista en arquivos asociados ao cartafol de seu</string>\n  <string name=\"prefs_output_filename\">Arquivo para nome das pistas</string>\n  <string name=\"prefs_output_filename_summary\">Patrón do nome de ficheiro se pista ten un nome</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nome da pista</item>\n    <item>Nome, de inicio data e hora</item>\n    <item>Data de inicio e hora</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Precisión no arquivo GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Engadir información de precisión en arquivo GPX, co nome do punto de paso ou comentario en punto de paso</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Non</item>\n    <item>Con nome do punto de referencia</item>\n    <item>En comentario do punto de referencia</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Emprego aproximación HDOP </string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Encha HDOP en GPX cun valor de precisión aproximado</string>\n  <string name=\"prefs_sound_enabled\">Habilitar o son</string>\n  <string name=\"prefs_sound_enabled_summary\">Tocar sons cando a gravación de voz comeza e remata</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Resetear autentificación OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Esquecer credenciais OSM e permisos e forzar a OSMTracker a volver preguntar</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Vai ter que autorizar OSMTracker para cargar pistas de novo. Estás seguro?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>Abrir MapQuest</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Non</item>\n    <item>en comentario</item>\n    <item>en extensión</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Define se e como os datos do compás deben ser exportados ao arquivo GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Miscelanea</string>\n  <string name=\"tag.restriction\">Restricción</string>\n  <string name=\"tag.car\">Carro</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Amenidade</string>\n  <string name=\"tag.amenity_more\">Amenidade (+)</string>\n  <string name=\"tag.way\">Vía</string>\n  <string name=\"tag.track\">Pista</string>\n  <string name=\"tag.landuse\">Uso do chan</string>\n  <string name=\"tag.misc_bus_stop\">Parada de bus</string>\n  <string name=\"tag.misc_railway\">Vía de ferro</string>\n  <string name=\"tag.misc_telephone\">Teléfono</string>\n  <string name=\"tag.misc_post_box\">Buzón</string>\n  <string name=\"tag.misc_atm\">Caixeiro automático</string>\n  <string name=\"tag.misc_bollard\">Bolardo</string>\n  <string name=\"tag.misc_toilets\">WC</string>\n  <string name=\"tag.misc_shelter\">Abrigo</string>\n  <string name=\"tag.misc_surveillance\">Vixilancia</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Sen saída</string>\n  <string name=\"tag.restriction_traffic_light\">Semáforo</string>\n  <string name=\"tag.restriction_one_way\">Vía única</string>\n  <string name=\"tag.car_fuel_station\">Estación de servizo</string>\n  <string name=\"tag.car_parking\">Aparcamento</string>\n  <string name=\"tag.car_emergency_phone\">Teléfono de Emerxencia</string>\n  <string name=\"tag.car_turning_circle\">Radio de xiro</string>\n  <string name=\"tag.car_speed_camera\">Rádar</string>\n  <string name=\"tag.tourism_view_point\">Milladoiro</string>\n  <string name=\"tag.tourism_information\">Información</string>\n  <string name=\"tag.tourism_picnic\">Merendeiro</string>\n  <string name=\"tag.tourism_attraction\">Atracción</string>\n  <string name=\"tag.tourism_theme_park\">Parque temático</string>\n  <string name=\"tag.tourism_castle\">Castelo</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museo</string>\n  <string name=\"tag.tourism_cinema\">Cine</string>\n  <string name=\"tag.amenity_bench\">Banco</string>\n  <string name=\"tag.amenity_water\">Auga</string>\n  <string name=\"tag.amenity_pharmacy\">Farmacia</string>\n  <string name=\"tag.amenity_shop\">Tenda</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Deporte</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nDoctors</string>\n  <string name=\"tag.amenity_recycling\">Reciclado</string>\n  <string name=\"tag.amenity_place_of_worship\">Lugar of\\nworship</string>\n  <string name=\"tag.amenity_post_office\">Oficina de Correos</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Escola</string>\n  <string name=\"tag.amenitymore_police\">Policía</string>\n  <string name=\"tag.amenitymore_fire_station\">Bombeiros</string>\n  <string name=\"tag.amenitymore_bank\">Banco Oficina</string>\n  <string name=\"tag.amenitymore_playground\">Campo de Xogos</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostal</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurante</string>\n  <string name=\"tag.amenitymore_fastfood\">Comida lixo</string>\n  <string name=\"tag.amenitymore_camp_site\">Camping</string>\n  <string name=\"tag.way_bridge\">Ponte</string>\n  <string name=\"tag.way_zebra_crossing\">Paso de peóns</string>\n  <string name=\"tag.way_motorway\">Autoestrada</string>\n  <string name=\"tag.way_trunk\">Troncal</string>\n  <string name=\"tag.way_primary\">Primaria</string>\n  <string name=\"tag.way_secondary\">Secundaria</string>\n  <string name=\"tag.way_tertiary\">Terciaria</string>\n  <string name=\"tag.way_residential\">Residencial</string>\n  <string name=\"tag.way_service\">Servizo</string>\n  <string name=\"tag.track_track\">Pista</string>\n  <string name=\"tag.track_cycleway\">Carrilbici</string>\n  <string name=\"tag.track_footway\">Paseo</string>\n  <string name=\"tag.track_bridleway\">Bridleway</string>\n  <string name=\"tag.track_steps\">Escaleiras</string>\n  <string name=\"tag.track_living_street\">Residencial</string>\n  <string name=\"tag.track_pedestrian\">Peonil</string>\n  <string name=\"tag.track_grade1\">Grado 1</string>\n  <string name=\"tag.track_grade2\">Grado 2</string>\n  <string name=\"tag.track_grade3\">Grado 3</string>\n  <string name=\"tag.track_grade4\">Grado 4</string>\n  <string name=\"tag.track_grade5\">Grado 5</string>\n  <string name=\"tag.landuse_farm\">Granxa</string>\n  <string name=\"tag.landuse_landfill\">Terraplén</string>\n  <string name=\"tag.landuse_basin\">Conca</string>\n  <string name=\"tag.landuse_reservoir\">Depósito</string>\n  <string name=\"tag.landuse_forest\">Forestal</string>\n  <string name=\"tag.landuse_allotments\">Asignacións</string>\n  <string name=\"tag.landuse_cemetery\">Cemiterio</string>\n  <string name=\"tag.landuse_recreation_ground\">Recreation\\nground</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker para Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirado por OSMTracker en Windows Mobile, permite que acompañe as súas viaxes, marcar puntos de forma significativa (gravación de voz, imaxes), exportalos en formato GPX para uso posterior con ferramentas Open Street Map como JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Rexistro de rutas</string>\n  <string name=\"tracklogger_waiting_gps\">A agardar que funcione o GPS para activar os botóns...</string>\n  <string name=\"tracklogger_voicerec_title\">Gravación de voz</string>\n  <string name=\"tracklogger_voicerec_text\">A gravar {0}s de son.</string>\n  <string name=\"tracklogger_voicerec_stop\">Deter</string>\n  <string name=\"tracklogger_btnBack\">Atrás</string>\n  <string name=\"tracklogger_tracked\">Seguimento:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS desactivado</string>\n  <string name=\"tracklogger_gps_disabled_hint\">O GPS está desactivado. Desexa activalo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galería ou cámara?</string>\n  <string name=\"tracklogger_camera\">Tirar foto con cámara</string>\n  <string name=\"tracklogger_gallery\">Seleccionar foto da galería</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lita de punto de paso</string>\n  <string name=\"wplist_latitude\">Lista de paradas</string>\n  <string name=\"wplist_longitude\">Lat:</string>\n  <string name=\"wplist_elevation\">Ele:</string>\n  <string name=\"wplist_accuracy\">Prcs:</string>\n  <string name=\"wplist_compass\">Comp. principal:</string>\n  <string name=\"wplist_compass_accuracy\">Comp. precisión:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Xestor de rutas</string>\n  <string name=\"trackmgr_tracklist\">Lista de rutas:</string>\n  <string name=\"trackmgr_waypoints_count\">Paradas:</string>\n  <string name=\"trackmgr_trackpoints_count\">Puntos de ruta:</string>\n  <string name=\"trackmgr_empty\">Non tén ningunha ruta.</string>\n  <string name=\"trackmgr_newtrack_error\">Activar e crear unha nova pista: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Estás gravando a precisión <b>pista #{0}</b>\\nChoose na lista para continuar</string>\n  <string name=\"trackmgr_contextmenu_stop\">Deter seguimento</string>\n  <string name=\"trackmgr_contextmenu_resume\">Resumo de seguimento</string>\n  <string name=\"trackmgr_contextmenu_delete\">Borrar</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportar coma GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Subir a OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Amosar</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalles</string>\n  <string name=\"trackmgr_contextmenu_title\">Pista #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Pista #{0} será borrada</string>\n  <string name=\"trackmgr_deleteall_confirm\">Tódolas pistas serán borradas, Estás certo?</string>\n  <string name=\"trackmgr_exporting\">Exportando pista #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Preparando exportación…</string>\n  <string name=\"trackmgr_export_error\">Non se pode exportar pista: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Tádalas pistas serán exportadas, pode levar moito tempo. Estás certo?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalles de Pistas</string>\n  <string name=\"trackdetail_startdate\">Tempo de Inicio:</string>\n  <string name=\"trackdetail_enddate\">Tempo Fin:</string>\n  <string name=\"trackdetail_startloc\">Inicio a:</string>\n  <string name=\"trackdetail_endloc\">Fin a:</string>\n  <string name=\"trackdetail_exportdate\">Exportado:</string>\n  <string name=\"trackdetail_osm_upload_date\">Subir a OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportar coma GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Non exportar aínda)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Non subir aínda)</string>\n  <string name=\"trackdetail_export_display\">Amosar</string>\n  <string name=\"trackdetail_description\">Descrición</string>\n  <string name=\"trackdetail_tags\">Tags (separados por comas)</string>\n  <string name=\"trackdetail_description_mandatory\">Debes dar unha descrición</string>\n  <string name=\"osm_visibility_private\">Privado</string>\n  <string name=\"osm_visibility_public\">Público</string>\n  <string name=\"osm_visibility_trackable\">Trazable</string>\n  <string name=\"osm_visibility_identifiable\">identificable</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Subido a OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Gardar e subir</string>\n  <string name=\"osm_upload_tmpfile_failed\">Non se pode exportar a pista a un arquivo temporal</string>\n  <string name=\"osm_upload_oauth_failed\">Non se pode acceder a OSM</string>\n  <string name=\"osm_upload_sending\">Enviando pista #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Esperando por resposta do server OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Erro cando subiu a pista</string>\n  <string name=\"osm_upload_bad_response\">O server OSM devolve un erro: ({0}) mensaxe {1}</string>\n  <string name=\"osm_upload_unauthorized\">Error de autorización. Queres limpar as credenciais gardadas en OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Subido ben a OpenStreetMap</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Gravación de voz</string>\n  <string name=\"gpsstatus_record_stillimage\">Tirar foto</string>\n  <string name=\"gpsstatus_record_textnote\">Nota de texto</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configuración</string>\n  <string name=\"menu_waypointlist\">Paradas</string>\n  <string name=\"menu_about\">Desto</string>\n  <string name=\"menu_displaytrack\">Amosar pistas</string>\n  <string name=\"menu_stoptracking\">Parar &amp; gardar</string>\n  <string name=\"menu_newtrack\">Nova pista</string>\n  <string name=\"menu_deletetracks\">Borrar tódalas pistas</string>\n  <string name=\"menu_continue\">Continuar pista</string>\n  <string name=\"menu_stopcurrenttrack\">Deter pista actual</string>\n  <string name=\"menu_save\">Gardar</string>\n  <string name=\"menu_cancel\">Cancelar</string>\n  <string name=\"menu_export\">Exportar coma GPX</string>\n  <string name=\"menu_osm_upload\">Subido a OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centro a GPS</string>\n  <string name=\"menu_exportall\">Exportar todo como GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Imposible escribir para almacenamento externo.</string>\n  <string name=\"error_create_track_dir\">Non se pode crear o cartafol ca pista %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Por favor, asegúrese de que o almacenamento ext. estea correctamente inserido e montado.</string>\n  <string name=\"error_voicerec_failed\">A gravación de voz non vai</string>\n  <string name=\"error_userlayout_parsing\">Erro ao analizar o ficheiro XML. Por favor volver ao nivel de capa por defecto.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracked con OSMTracker para Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Coidado: os valores HDOP non son de HDOP como retorno do dispositivo GPS. Están aproximados á precisión de localización en metros.</string>\n  <!--About screen-->\n  <string name=\"about\">Para</string>\n  <string name=\"about_text\">Para máis información, documentos ou reportes impresos, por favor visita a páxina do proxecto:</string>\n  <string name=\"about_translate_text\">Axuda na tradución de OSMTracker:</string>\n  <string name=\"about_debug_info\">Información de erros</string>\n  <string name=\"about_export_db\">Exportar base de datos</string>\n  <string name=\"about_exporting_db\">Exportando base de datos...</string>\n  <string name=\"about_export_db_result\">Base de datos exportada nun: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker está enrutando</string>\n  <string name=\"notification_title\">OSMTracker está enrutando (#{0})</string>\n  <string name=\"notification_text\">Preme aquí para ver a pantalla de inicio</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Amosar pista</string>\n  <string name=\"displaytrack_map\">Amosar mapa de fondo</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Gardar</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisión</string>\n  <string name=\"various_accuracy_with_sats\">Precisión {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Esperar por GPS fixo… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Agarda por posición ...</string>\n  <string name=\"various_heading_unknown\">A posición non pode ser determinada</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap amosar pista</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Gravación de voz</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-he/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">הלוגו של OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">הגדל</string>\n  <string name=\"acc.zoom_out\">הקטן</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">מד עוצמת אות לוויני</string>\n  <string name=\"acc.record_indicator\">מד הקלטה בפעולה</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">מד מצב מסלול</string>\n  <string name=\"acc.upload_status\">מד מצב העלאה ל-OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-he/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">הגדרות</string>\n  <string name=\"prefs_gps\">ג\\'י.פי.אס</string>\n  <string name=\"prefs_gps_os_settings\">הגדרות ג\\'י.פי.אס</string>\n  <string name=\"prefs_gps_os_settings_summary\">הצג מסך הגדרות ג\\'י.פי.אס של המערכת</string>\n  <string name=\"prefs_check_gps_startup\">בדוק ג\\'י.פי.אס בהפעלה</string>\n  <string name=\"prefs_check_gps_startup_summary\">בדוק אם ג\\'י.פי.אס כבוי בהפעלה, והצע להפעיל אותו</string>\n  <string name=\"prefs_gps_ignore_clock\">התעלם משעון ג\\'י.פי.אס</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">התעלם משעון ג\\'י.פי.אס והשתמש בשעון מערכת האנדרואיד עבור חותמות זמן</string>\n  <string name=\"prefs_gps_logging_interval\">מרווח רישום ג\\'י.פי.אס</string>\n  <string name=\"prefs_gps_logging_interval_summary\">השתמש ב- 0 עבור הקצר ביותר (משפיע על אורך חיי הסוללה)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">שניות</string>\n  <string name=\"prefs_ui\">ממשק משתמש</string>\n  <string name=\"prefs_ui_picture_source\">מקור ברירת מחדל של תמונות</string>\n  <string name=\"prefs_ui_picture_source_summary\">לקחת תמונה מהמצלמה או מהגלריה?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>מצלמה</item>\n    <item>גלריה</item>\n    <item>שאל תמיד</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">הגדרות לחצנים</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">בחר רשימת לחצנים מותאמת אישית (ראה תיעוד)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">עיצוב מקורי</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">ברירת מחדל</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">עיצוב שהורד</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">לא הורדת קבצי עיצוב</string>\n  <string name=\"prefs_ui_available_layout\">עיצובים זמינים</string>\n  <string name=\"prefs_ui_github_repository_settings\">הגדרות GitHub Repository</string>\n  <string name=\"prefs_ui_orientation\">כיוון</string>\n  <string name=\"prefs_ui_orientation_summary\">כיוון מועדף של המסך</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>אוטומטי</item>\n    <item>לאורך</item>\n    <item>לרוחב</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">אורך הקלטה קולית</string>\n  <string name=\"prefs_voicerec_duration_seconds\">שניות</string>\n  <string name=\"prefs_theme\">תבנית התצוגה של המסך הראשי</string>\n  <string name=\"prefs_theme_summary\">אתחול האפליקציה נדרש על מנת לבצע את השינויים</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>ברירת מחדל של מערכת ההפעלה</item>\n    <item>ברירת מחדל של מערכת ההפעלה (כהה)</item>\n    <item>ברירת מחדל של מערכת ההפעלה (בהיר)</item>\n    <item>ניגודיות גבוהה</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">מסך דולק תמיד</string>\n  <string name=\"prefs_display_always_on_summary\">המסך ישאר דולק בעת הקלטת מסלול. בטל כדי לחסוך בסוללה</string>\n  <string name=\"prefs_displaytrack_osm\">מפת רקע</string>\n  <string name=\"prefs_displaytrack_osm_summary\">הצג את מפת OpenStreetMap כרקע למסלול. דורש חיבור לאינטרנט</string>\n  <string name=\"prefs_output\">הגדרות GPX</string>\n  <string name=\"prefs_storage_dir_hint\">יחל במסלול הבא (לא במסלול הנוכחי)</string>\n  <string name=\"prefs_output_one_dir_per_track\">תיקייה אחת לכל מסלול</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">שמור כל מסלול והקבצים הנלווים לו בתיקייה נפרדת</string>\n  <string name=\"prefs_output_filename\">שם קובץ למסלולים בעלי שם</string>\n  <string name=\"prefs_output_filename_summary\">תבנית לשם הקובץ, אם למסלול יש שם</string>\n  <string name=\"prefs_output_accuracy\">שמור את הדיוק בקובץ ה-GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">הוסף את הדיוק לקובץ ה-GPX בשם נקודת הציון או כהערה לנקודת הציון</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>ללא שמירה</item>\n    <item>בשם נקודת הציון</item>\n    <item>כהערה לנקודת הציון</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">השתמש בהערכת HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">קבע את ה HDOP בקובץ ה-GPX כהערכה שמבוססת על הדיוק</string>\n  <string name=\"prefs_sound_enabled\">אפשר צלילים</string>\n  <string name=\"prefs_sound_enabled_summary\">השמע צלילים בתחילת הקלטה ובסיומה</string>\n  <string name=\"prefs_osm_clear_oauth_data\">איפוס אימות פרטי משתמש OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">מחק את אימות פרטי משתמש OSM ואלץ את הכנסתם מחדש</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">ידרש אימות מחדש כדי לשוב ולהעלות מסלולים. את/ה בטוח/ה?</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>ללא שמירה</item>\n    <item>כהערה</item>\n    <item>כהרחבה</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">מגדיר האם וכיצד ישמר כיוון המצפן בקובץ ה-GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-he/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">שונות</string>\n  <string name=\"tag.restriction\">הגבלות</string>\n  <string name=\"tag.car\">רכב</string>\n  <string name=\"tag.tourism\">תיירות</string>\n  <string name=\"tag.amenity\">נוחות</string>\n  <string name=\"tag.amenity_more\">נוחות (+)</string>\n  <string name=\"tag.way\">דרך</string>\n  <string name=\"tag.track\">מסלול</string>\n  <string name=\"tag.landuse\">שימוש בקרקע</string>\n  <string name=\"tag.misc_bus_stop\">תחנת אוטובוס</string>\n  <string name=\"tag.misc_railway\">פסי רכבת</string>\n  <string name=\"tag.misc_telephone\">טלפון</string>\n  <string name=\"tag.misc_post_box\">תיבת דואר</string>\n  <string name=\"tag.misc_atm\">כספומט</string>\n  <string name=\"tag.misc_bollard\">עמוד</string>\n  <string name=\"tag.misc_toilets\">שירותים</string>\n  <string name=\"tag.misc_shelter\">מקלט</string>\n  <string name=\"tag.misc_surveillance\">מעקב</string>\n  <string name=\"tag.restriction_20\">20 לכל היותר</string>\n  <string name=\"tag.restriction_30\">30 לכל היותר</string>\n  <string name=\"tag.restriction_40\">40 לכל היותר</string>\n  <string name=\"tag.restriction_50\">50 לכל היותר</string>\n  <string name=\"tag.restriction_60\">60 לכל היותר</string>\n  <string name=\"tag.restriction_70\">70 לכל היותר</string>\n  <string name=\"tag.restriction_80\">80 לכל היותר</string>\n  <string name=\"tag.restriction_90\">90 לכל היותר</string>\n  <string name=\"tag.restriction_100\">100 לכל היותר</string>\n  <string name=\"tag.restriction_110\">110 לכל היותר</string>\n  <string name=\"tag.restriction_120\">120 לכל היותר</string>\n  <string name=\"tag.restriction_130\">130 לכל היותר</string>\n  <string name=\"tag.restriction_no_exit\">אין יציאה</string>\n  <string name=\"tag.restriction_traffic_light\">רמזור</string>\n  <string name=\"tag.restriction_one_way\">חד סיטרי</string>\n  <string name=\"tag.car_fuel_station\">תחנת דלק</string>\n  <string name=\"tag.car_parking\">חניה</string>\n  <string name=\"tag.car_emergency_phone\">טלפון חרום</string>\n  <string name=\"tag.car_turning_circle\">מעגל תנועה</string>\n  <string name=\"tag.car_speed_camera\">מצלמת מהירות</string>\n  <string name=\"tag.tourism_view_point\">נקודת תצפית</string>\n  <string name=\"tag.tourism_information\">מידע</string>\n  <string name=\"tag.tourism_picnic\">חניון יום</string>\n  <string name=\"tag.tourism_attraction\">אטרקציה</string>\n  <string name=\"tag.tourism_theme_park\">פארק שעשועים</string>\n  <string name=\"tag.tourism_castle\">טירה</string>\n  <string name=\"tag.tourism_monument\">יד זיכרון</string>\n  <string name=\"tag.tourism_museum\">מוזיאון</string>\n  <string name=\"tag.tourism_cinema\">בית קולנוע</string>\n  <string name=\"tag.amenity_bench\">ספסל</string>\n  <string name=\"tag.amenity_water\">מים</string>\n  <string name=\"tag.amenity_pharmacy\">בית מרקחת</string>\n  <string name=\"tag.amenity_shop\">חנות</string>\n  <string name=\"tag.amenity_marina\">מרינה</string>\n  <string name=\"tag.amenity_sport\">ספורט</string>\n  <string name=\"tag.amenity_taxi\">תחנת מונית</string>\n  <string name=\"tag.amenity_doctors\">בית חולים,\\nרופאים</string>\n  <string name=\"tag.amenity_recycling\">מיחזור</string>\n  <string name=\"tag.amenity_place_of_worship\">בית תפילה</string>\n  <string name=\"tag.amenity_post_office\">דואר</string>\n  <string name=\"tag.amenity_library\">ספריה</string>\n  <string name=\"tag.amenitymore_school\">בית ספר</string>\n  <string name=\"tag.amenitymore_police\">משטרה</string>\n  <string name=\"tag.amenitymore_fire_station\">תחנת כיבוי אש</string>\n  <string name=\"tag.amenitymore_bank\">בנק</string>\n  <string name=\"tag.amenitymore_playground\">מגרש משחקים</string>\n  <string name=\"tag.amenitymore_pub\">פאב</string>\n  <string name=\"tag.amenitymore_hotel\">מלון</string>\n  <string name=\"tag.amenitymore_motel\">מוטל</string>\n  <string name=\"tag.amenitymore_hostel\">אכסניה</string>\n  <string name=\"tag.amenitymore_restaurant\">מסעדה</string>\n  <string name=\"tag.amenitymore_fastfood\">מזון מהיר</string>\n  <string name=\"tag.amenitymore_camp_site\">חניון לילה</string>\n  <string name=\"tag.way_bridge\">גשר</string>\n  <string name=\"tag.way_zebra_crossing\">מעבר חציה</string>\n  <string name=\"tag.way_motorway\">דרך מהירה</string>\n  <string name=\"tag.way_trunk\">כביש בין-עירוני</string>\n  <string name=\"tag.way_primary\">כביש ראשי</string>\n  <string name=\"tag.way_secondary\">כביש משני</string>\n  <string name=\"tag.way_tertiary\">כביש צדדי</string>\n  <string name=\"tag.way_residential\">דרך עירונית</string>\n  <string name=\"tag.way_service\">כביש שרות</string>\n  <string name=\"tag.track_track\">מסלול</string>\n  <string name=\"tag.track_cycleway\">דרך לאופניים</string>\n  <string name=\"tag.track_footway\">דרך להולכי רגל</string>\n  <string name=\"tag.track_bridleway\">דרך לסוסים</string>\n  <string name=\"tag.track_steps\">מדרגות</string>\n  <string name=\"tag.track_living_street\">מדרחוב</string>\n  <string name=\"tag.track_pedestrian\">מדרכה</string>\n  <string name=\"tag.track_grade1\">דרך עפר מצויינת</string>\n  <string name=\"tag.track_grade2\">דרך לכל רכב</string>\n  <string name=\"tag.track_grade3\">דרך לג\\'יפים רכים</string>\n  <string name=\"tag.track_grade4\">דרך לג\\'יפים קשוחים</string>\n  <string name=\"tag.track_grade5\">עבירות קשה</string>\n  <string name=\"tag.landuse_farm\">חווה</string>\n  <string name=\"tag.landuse_landfill\">מזבלה</string>\n  <string name=\"tag.landuse_basin\">מאגר שטפונות</string>\n  <string name=\"tag.landuse_reservoir\">מאגר מים</string>\n  <string name=\"tag.landuse_forest\">יער</string>\n  <string name=\"tag.landuse_allotments\">גינות ירק</string>\n  <string name=\"tag.landuse_cemetery\">בית קברות</string>\n  <string name=\"tag.landuse_recreation_ground\">מגרש ספורט</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-he/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker עבור אנדרואיד</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">בהשראת OSMTracker עבור Windows Mobile, האפליקציה מאפשרת לך לעקוב אחר מסלולים, לסמן נקודות עניין (באמצעות הקלטת קול ותמונות), ייצוא המידע בפורמט GPX לשימוש עתידי עם כלי Open Street Map כמו JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">תיעוד מסלול</string>\n  <string name=\"tracklogger_waiting_gps\">ממתין למיקום ג\\'י.פי.אס כדי לאפשר לחצנים</string>\n  <string name=\"tracklogger_voicerec_title\">הקלטת קול</string>\n  <string name=\"tracklogger_voicerec_text\">מקליט קטע קולי באורך {0} שניות.</string>\n  <string name=\"tracklogger_voicerec_stop\">עצור</string>\n  <string name=\"tracklogger_btnBack\">חזרה</string>\n  <string name=\"tracklogger_tracked\">תועד:</string>\n  <string name=\"tracklogger_gps_disabled\">ג\\'י.פי.אס מבוטל</string>\n  <string name=\"tracklogger_gps_disabled_hint\">ג\\'י.פי.אס מבוטל. האם ברצונך לאפשר?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">גלריה או מצלמה?</string>\n  <string name=\"tracklogger_camera\">צלם תמונה במצלמה</string>\n  <string name=\"tracklogger_gallery\">בחר תמונה מהגלריה</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">רשימת נקודות ציון</string>\n  <string name=\"wplist_latitude\">קו רוחב:</string>\n  <string name=\"wplist_longitude\">קו אורך:</string>\n  <string name=\"wplist_elevation\">גובה:</string>\n  <string name=\"wplist_accuracy\">דיוק:</string>\n  <string name=\"wplist_compass\">כיוון מצפן:</string>\n  <string name=\"wplist_compass_accuracy\">דיוק מצפן:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">מנהל מסלולים</string>\n  <string name=\"trackmgr_tracklist\">רשימת מסלולים:</string>\n  <string name=\"trackmgr_waypoints_count\">נקודות ציון:</string>\n  <string name=\"trackmgr_trackpoints_count\">נקודות מסלול:</string>\n  <string name=\"trackmgr_empty\">אין לך מסלולים</string>\n  <string name=\"trackmgr_newtrack_error\">לא ניתן ליצור מסלול חדש: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">הנך מקליט כרגע <b> מסלול מספר {0}</b>\\n\nבחר אותו מהרשימה כדי להמשיך</string>\n  <string name=\"trackmgr_contextmenu_stop\">עצור מסלול</string>\n  <string name=\"trackmgr_contextmenu_resume\">חזור למסלול</string>\n  <string name=\"trackmgr_contextmenu_delete\">מחק</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">העלאה ל OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">הצג</string>\n  <string name=\"trackmgr_contextmenu_details\">פרטים</string>\n  <string name=\"trackmgr_contextmenu_title\">הקלטה מס. {0}</string>\n  <string name=\"trackmgr_delete_confirm\">הקלטה מס. {0} תימחק</string>\n  <string name=\"trackmgr_deleteall_confirm\">כל ההקלטות תמחקנה. להמשיך?</string>\n  <string name=\"trackmgr_exporting\">מייצא את הקלטה {0}...</string>\n  <string name=\"trackmgr_exporting_prepare\">מתכונן ליצוא...</string>\n  <string name=\"trackmgr_export_error\">יצוא של הקלטה {0} נכשל...</string>\n  <string name=\"trackmgr_exportall_confirm\">כל ההקלטות ייוצאו, דבר שעשוי לארוך זמן רב. להמשיך?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">פרטי ההקלטה</string>\n  <string name=\"trackdetail_startdate\">זמן התחלה:</string>\n  <string name=\"trackdetail_enddate\">זמן סיום:</string>\n  <string name=\"trackdetail_startloc\">נקודת התחלה:</string>\n  <string name=\"trackdetail_endloc\">נקודת סיום:</string>\n  <string name=\"trackdetail_exportdate\">יצוא:</string>\n  <string name=\"trackdetail_osm_upload_date\">העלאה ל OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">ייצא כקובץ GPX</string>\n  <string name=\"trackdetail_export_notyet\">לא בוצע עדיין</string>\n  <string name=\"trackdetail_osm_upload_notyet\">לא נשלח עדיין</string>\n  <string name=\"trackdetail_export_display\">הצג</string>\n  <string name=\"trackdetail_description\">תיאור</string>\n  <string name=\"trackdetail_tags\">תגיות (מופרדות בפסיקים)</string>\n  <string name=\"trackdetail_description_mandatory\">חובה למלא את התיאור</string>\n  <string name=\"osm_visibility_private\">פרטי (Private)</string>\n  <string name=\"osm_visibility_public\">פומבי (Public)</string>\n  <string name=\"osm_visibility_trackable\">ניתן לעקיבה (Trackable)</string>\n  <string name=\"osm_visibility_identifiable\">ניתן לזיהוי (Identifiable)</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">העלאה ל OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">שמירה והעלאה</string>\n  <string name=\"osm_upload_tmpfile_failed\">לא ניתן לייצא את ההקלטה לקובץ זמני</string>\n  <string name=\"osm_upload_oauth_failed\">לא ניתן לאמת את משתמש OSM</string>\n  <string name=\"osm_upload_sending\">שולח האת הקלטה מס. {0}...</string>\n  <string name=\"osm_upload_waiting_response\">ממתין לתשובת שרת OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">תקלה בזמן העלאת ההקלטה</string>\n  <string name=\"osm_upload_bad_response\">שרת OSM החזיר שגיאה: ({0}) הודעה {1}</string>\n  <string name=\"osm_upload_unauthorized\">שגיאת אימות. האם למחוק את האישורים הקיימים מ OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">העלאת המסלול ל OpenStreetMap הסתיימה בהצלחה</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">הקלטת הודעה קולית</string>\n  <string name=\"gpsstatus_record_stillimage\">צילום תמונה</string>\n  <string name=\"gpsstatus_record_textnote\">הערה בכתב</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">הגדרות</string>\n  <string name=\"menu_waypointlist\">נקודות עיניין</string>\n  <string name=\"menu_about\">אודות</string>\n  <string name=\"menu_displaytrack\">הצגת הקלטה</string>\n  <string name=\"menu_stoptracking\">עצור ושמור</string>\n  <string name=\"menu_newtrack\">הקלטה חדשה</string>\n  <string name=\"menu_deletetracks\">מחק את כל ההקלטות</string>\n  <string name=\"menu_continue\">המשך הקלטה</string>\n  <string name=\"menu_stopcurrenttrack\">עצור הקלטה</string>\n  <string name=\"menu_save\">שמור</string>\n  <string name=\"menu_cancel\">ביטול</string>\n  <string name=\"menu_export\">ייצא כקובץ GPX</string>\n  <string name=\"menu_osm_upload\">העלעה ל OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">מרכז למיקום ה GPS</string>\n  <string name=\"menu_exportall\">יצא הכל כ GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">לא ניתן לכתוב להתקן הזיכרון החיצוני</string>\n  <string name=\"error_create_track_dir\">לא ניתן ליצור תיקיית הקלטות %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">בדקו אם התקן הזיכרון החיצוני הוכנס כראוי והתחבר</string>\n  <string name=\"error_voicerec_failed\">ההקלטה הקולית נכשלה</string>\n  <string name=\"error_userlayout_parsing\">שגיאה בניתוח קובץ ה XML של העימוד. נא לחזור לעימוד המקורי</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\"> Tracked with OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">אזהרה: ערכי HDOP לא התקבלו מה GPS אלא הוערכו על פי דיוק המיקום במטרים.</string>\n  <!--About screen-->\n  <string name=\"about\">אודות</string>\n  <string name=\"about_text\">למידע נוסף, תיעוד ודיווח על תקלות, אנא בקרו באתר הבית של הפרוייקט:</string>\n  <string name=\"about_translate_text\">עיזרו לתרגם את OSMTracker:</string>\n  <string name=\"about_debug_info\">מידע לניפוי שגיאות</string>\n  <string name=\"about_export_db\">ייצא את מסד הנתונים</string>\n  <string name=\"about_exporting_db\">מייצא את מסד הנתונים...</string>\n  <string name=\"about_export_db_result\">תוצאת יצוא מסד הנתונים: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker מקליט</string>\n  <string name=\"notification_title\">OSMTracket מקליט ({0})</string>\n  <string name=\"notification_text\">לחצו כאן להצגת המסך הראשי</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">הצגת ההקלטה</string>\n  <string name=\"displaytrack_map\">הצגת מפת רקע</string>\n  <string name=\"displaytrack_north\">צפון</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">שמירה</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">מטר</string>\n  <string name=\"various_accuracy\">דיוק</string>\n  <string name=\"various_accuracy_with_sats\">דיוק {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">ממתין למיקום GPS... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\"> {0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">ממתין לכיוון...</string>\n  <string name=\"various_heading_unknown\">לא ניתן לקבוע את הכיוון</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">הצגת הקלטת OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">עדכן והתקן</string>\n  <string name=\"buttons_presets_context_menu_delete\">מחק</string>\n  <string name=\"buttons_presets_updating_layout\">מעדכן</string>\n  <string name=\"buttons_presets_successful_update\">העיצוב עודכן בהצלחה</string>\n  <string name=\"buttons_presets_unsuccessful_update\">העיצוב לא עודכן, נא לנסות שנית מאוחר יותר</string>\n  <string name=\"buttons_presets_delete_message\">לאשר מחיקה של עיצוב }0{?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">כן</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">תיקיית הסמלילים נמחקה בהצלחה</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">לקובץ זה לא משוייכת תיקיית סמלילים</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">שגיאה: לא ניתן להתחבר לאינטרנט</string>\n  <string name=\"available_layouts_response_null_exception\">שגיאה: לא ניתן להתחבר למאגר העיצובים</string>\n  <string name=\"available_layouts_connecting_message\">(מתחבר...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">הורד</string>\n  <string name=\"available_layouts_not_available_language\">השפה שלכם לא זמינה. בחרו מהרשימה</string>\n  <string name=\"available_layouts_language_dialog_title\">שפות זמינות</string>\n  <string name=\"available_layouts_checking_language_dialog\">בודק שפות מקומיות זמינות</string>\n  <string name=\"available_layouts_downloading_dialog\">מוריד...</string>\n  <string name=\"available_layouts_successful_download\">העיצוב הורד בהצלחה</string>\n  <string name=\"available_layouts_unsuccessful_download\">לא ניתן להוריד את העיצוב, נא לנסות שנית מאוחר יותר</string>\n  <string name=\"available_layouts_null_response_received\">שגיאה בקבלת נתונים מהשרת</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">ברירת מחדל</string>\n  <string name=\"github_repository_settings_custom_checkbox\">אישי</string>\n  <string name=\"github_repository_settings_username\">שם משתמש GitHub:</string>\n  <string name=\"github_repository_settings_repository_name\">שם Repository:</string>\n  <string name=\"github_repository_settings_branch_name\">שם הענף:</string>\n  <string name=\"github_repository_settings_valid_server\">GitHub Repository חוקי</string>\n  <string name=\"github_repository_settings_invalid_server\">GitHub Repository לא חוקי</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-he/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">הקלטת קול</string>\n  <string name=\"wpt_stillimage\">תמונה</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hr/accessibility.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikator snage signala</string>\n  <!--Track list-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hr/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Postavke</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS postavke</string>\n  <string name=\"prefs_gps_os_settings_summary\">Prikaži zaslon s GPS postavkama</string>\n  <string name=\"prefs_check_gps_startup\">Provjeri GPS pri pokretanju</string>\n  <string name=\"prefs_check_gps_startup_summary\">Provjerava je li GPS je onemogućen pri pokretanju i nudi uključivanje </string>\n  <string name=\"prefs_gps_ignore_clock\">Zanemari GPS sat</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignoriraj GPS sat i koristi Android sat za vremenske oznake</string>\n  <string name=\"prefs_gps_logging_interval\">Interval GPS bilježenja</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Koristite 0 za najkraći mogući (utječe na trajanje baterije)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekundi</string>\n  <string name=\"prefs_ui\">Korisničko sučelje</string>\n  <string name=\"prefs_ui_picture_source\">Zadani izvor fotografija</string>\n  <string name=\"prefs_ui_picture_source_summary\">Iskoristite fotografije iz fotoaparata ili galerije?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Fotoaparat</item>\n    <item>Galerija</item>\n    <item>Uvijek pitaj</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Zadano</string>\n  <string name=\"prefs_ui_orientation\">Orijentacija</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatski</item>\n    <item>Portret</item>\n    <item>Pejzaž</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Trajanje glasovnog zapisa</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekundi</string>\n  <string name=\"prefs_theme\">Tema glavnog zaslona</string>\n  <string name=\"prefs_theme_summary\">Potrebno je ponovno pokrenuti aplikaciju kako bi nastupile promjene</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS zadano</item>\n    <item>OS zadano (tamno)</item>\n    <item>OS zadano (svijetlo)</item>\n    <item>Visoki kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Zaslon uvijek uključen</string>\n  <string name=\"prefs_display_always_on_summary\">Zaslon će ostati uključen za vrijeme bilježenja. Isključite da biste uštedjeli bateriju</string>\n  <string name=\"prefs_displaytrack_osm\">Pozadinska karta</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Prikaži OpenStreetMap kartu ispod traga. Zahtjeva internet vezu</string>\n  <string name=\"prefs_output\">GPX postavke</string>\n  <string name=\"prefs_storage_dir\">Memorijska kartica (SD) mapa</string>\n  <string name=\"prefs_storage_dir_hint\">Primijeniti će se na sljedeći zapis (ne na trenutni)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Jedna mapa po zapisu</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Spremite svaki zapis i povezane datoteke na svoju mapu</string>\n  <string name=\"prefs_output_filename\">Ime za naziv zapisa</string>\n  <string name=\"prefs_output_filename_summary\">Uzorak za datoteke, ako zapis ima ime</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Naziv zapisa</item>\n    <item>Ime, datum početka i vrijeme</item>\n    <item>Datum i vrijeme</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">GPX preciznost</string>\n  <string name=\"prefs_output_accuracy_summary\">Dodaj informacije o točnosti u GPX datoteci, s nazivom međutočke ili u komentaru međutočke</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Ništa</item>\n    <item>S nazivom međutočke</item>\n    <item>U komentaru međutočke</item>\n  </string-array>\n  <string name=\"prefs_sound_enabled\">Uključi zvuk</string>\n  <string name=\"prefs_sound_enabled_summary\">Zvučna obavijest kada kada snimanje glasa počinje i završava</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Reset OSM provjere autentičnosti</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ništa</item>\n    <item>u komentaru</item>\n    <item>u produžetku</item>\n  </string-array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hr/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger_voicerec_title\">Glasovni zapis</string>\n  <string name=\"tracklogger_voicerec_text\">Snimanje {0}s zvučnog zapisa.</string>\n  <string name=\"tracklogger_voicerec_stop\">Zaustavi</string>\n  <string name=\"tracklogger_btnBack\">Natrag</string>\n  <string name=\"tracklogger_gps_disabled\">GPS isključen</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS je isključen. Želite li ga uključiti?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerija ili fotoaparat?</string>\n  <string name=\"tracklogger_camera\">Uslikaj fotografiju</string>\n  <string name=\"tracklogger_gallery\">Odaberite fotografiju iz galerije</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Popis međutočaka</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr_contextmenu_delete\">Izbrisati</string>\n  <string name=\"trackmgr_contextmenu_export\">Izvezi kao GPX</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalji</string>\n  <string name=\"trackmgr_contextmenu_title\">Staza #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Staza #{0} bit će izbrisana</string>\n  <string name=\"trackmgr_deleteall_confirm\">Sve staze će biti izbrisane. Jesi li sigurani?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail_startdate\">Vrijeme početka:</string>\n  <string name=\"trackdetail_enddate\">Vrijeme završetka:</string>\n  <!--OSM upload-->\n  <!--GPS Status & record bar-->\n  <!--Menu-->\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <!--Notification-->\n  <!--Display track-->\n  <!--Track detail-->\n  <!--Various-->\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hr/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Snimanje glasa</string>\n  <string name=\"wpt_stillimage\">Fotografija</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Nagyítás</string>\n  <string name=\"acc.zoom_out\">Kicsinyítés</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Műholdas jel erősségének kijelzője</string>\n  <string name=\"acc.record_indicator\">Rögzítés folyamatban kijelző</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Nyomkövetés állapot kijelző</string>\n  <string name=\"acc.upload_status\">OpenStreetMap feltöltés állapot kijelző</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Beállítások</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS beállítások</string>\n  <string name=\"prefs_gps_os_settings_summary\">A rendszer GPS-beállítások képernyőjének megjelenítése</string>\n  <string name=\"prefs_check_gps_startup\">GPS ellenőrzése indításkor</string>\n  <string name=\"prefs_check_gps_startup_summary\">Ellenőrizze, hogy a GPS indításkor le van-e tiltva, és ajánlja fel annak engedélyezését.</string>\n  <string name=\"prefs_gps_ignore_clock\">GPS óra figyelmen kívül hagyása</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">A GPS óra figyelmen kívül hagyása és az Android óra használata az időbélyegzéshez</string>\n  <string name=\"prefs_use_barometer\">Légnyomás naplózása (hPa)</string>\n  <string name=\"prefs_use_barometer_summary\">Be-/kikapcsolásához újra kell indítani az alkalmazást</string>\n  <string name=\"prefs_gps_logging_interval\">GPS-naplózás időköze</string>\n  <string name=\"prefs_gps_logging_interval_summary\">A lehető legsűrűbb naplózási időközhöz írjon 0-t (befolyásolja az akkumulátor élettartamát).</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">másodperc</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS-naplózás távolsága</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Az útvonalpotok közötti legkisebb távolság, a lehető legkisebbhez írjon be 0-t</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">méter</string>\n  <string name=\"prefs_ui\">Felhasználói felület</string>\n  <string name=\"prefs_ui_picture_source\">Alapértelmezett fényképforrás</string>\n  <string name=\"prefs_ui_picture_source_summary\">A fotókat a kameráról vagy a galériából vegye?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galéria</item>\n    <item>Mindig kérdezzen rá</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Gomb-előbeállítások</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Válasszon egy egyedi gombkészletet (lásd dokumentáció)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">ALAPÉRTELMEZETT ELRENDEZÉS</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Alapértelmezett</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">LETÖLTÖTT ELRENDEZÉS</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Nincs letöltött elrendezésfájl</string>\n  <string name=\"prefs_ui_available_layout\">Rendelkezésre álló elrendezések</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github tár beállításai</string>\n  <string name=\"prefs_ui_orientation\">Tájolás</string>\n  <string name=\"prefs_ui_orientation_summary\">Előnyben részesített tájolás a gombos képernyőhöz</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatikus</item>\n    <item>Álló</item>\n    <item>Fekvő</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Hangrögzítés hosszúsága</string>\n  <string name=\"prefs_voicerec_duration_seconds\">másodperc</string>\n  <string name=\"prefs_theme\">Főképernyő grafikus témája</string>\n  <string name=\"prefs_theme_summary\">A változások érvénybe lépéséhez újra kell indítani az alkalmazást</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Rendszer alapértelmezett</item>\n    <item>Rendszer alapértelmezett (sötét)</item>\n    <item>Rendszer alapértelmezett (világos)</item>\n    <item>Nagy kontrasztú</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Képernyő mindig bekapcsolva</string>\n  <string name=\"prefs_display_always_on_summary\">A képernyő bekapcsolva marad nyomkövetéskor. Kapcsolja ki az akku jobb üzemidejéhez</string>\n  <string name=\"prefs_displaytrack_osm\">Háttértérkép</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Az OpenStreetMap megjelenítése a nyomkövetés alatt. Adatkapcsolatot igényel</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Mindig megjelenjen az OpenStreetMap a háttérben? Adatkapcsolatot igényel</string>\n  <string name=\"prefs_output\">GPX beállítások</string>\n  <string name=\"prefs_storage_dir\">Tárolómappa a dokumentumokban</string>\n  <string name=\"prefs_storage_dir_hint\">A következő nyomkövetésnél lép életbe (nem az aktuálisnál)\n</string>\n  <string name=\"prefs_output_one_dir_per_track\">Egy könyvtár nyomvonalanként</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Minden nyomkövetés és kapcsolódó fájljai egy saját könyvtárba mentése</string>\n  <string name=\"prefs_output_filename\">Fájlnév az elnevezett nyomvonalakhoz</string>\n  <string name=\"prefs_output_filename_summary\">Fájlnév minta, ha a nyomvonalnak neve van</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nyomkövetés neve</item>\n    <item>Név, kezdeti dátum és időpont</item>\n    <item>Kezdeti dátum és időpont, név</item>\n    <item>Kezdeti dátum és időpont</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Pontosság a GPX fájlban</string>\n  <string name=\"prefs_output_accuracy_summary\">Pontosság információ hozzáadása a GPX fájlhoz, útpont névvel vagy útpont megjegyzéssel</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>None</item>\n    <item>With waypoint name</item>\n    <item>In waypoint comment</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">A HDOP becslés használata</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Töltse ki a HDOP értéket a GPX fájlban egy becsült értékkel a pontosságból</string>\n  <string name=\"prefs_sound_enabled\">Hang engedélyezése</string>\n  <string name=\"prefs_sound_enabled_summary\">Hang lejátszása rögzítés indításakor és befejezésekor</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSM authentikáció alaphelyzetbe állítása</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Az OSM belépési adatok és jogosultságok elfelejtése és az OSMTracker kényszerítése, hogy megkérdezze újra azokat</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Az OSMTrackert majd újból azonosítani kell a nyomvonalak feltöltéséhez. Biztosan ezt szeretné?</string>\n  <string name=\"prefs_map_tile\">Térképcsempe-szolgáltató</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Semmi</item>\n    <item>megjegyzésben</item>\n    <item>kiterjesztésben</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Iránytű címsorának exportálása</string>\n  <string name=\"prefs_compass_heading_summary\">Definiálja, hogy bekerüljön-e és hogyan az iránytű adat az exportált GPX fájlba</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Egyéb</string>\n  <string name=\"tag.restriction\">Korlátozások</string>\n  <string name=\"tag.car\">Autó</string>\n  <string name=\"tag.tourism\">Turizmus</string>\n  <string name=\"tag.amenity\">Szolgáltatás</string>\n  <string name=\"tag.amenity_more\">Szolgáltatás (+)</string>\n  <string name=\"tag.way\">Út</string>\n  <string name=\"tag.track\">Nyomkövetés</string>\n  <string name=\"tag.landuse\">Területhasználat</string>\n  <string name=\"tag.misc_bus_stop\">Buszmegálló</string>\n  <string name=\"tag.misc_railway\">Vasút</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Postaláda</string>\n  <string name=\"tag.misc_atm\">Bankautomata</string>\n  <string name=\"tag.misc_bollard\">Terelőoszlop</string>\n  <string name=\"tag.misc_toilets\">WC</string>\n  <string name=\"tag.misc_shelter\">Menedékház</string>\n  <string name=\"tag.misc_surveillance\">Megfigyelés</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Zsákutca</string>\n  <string name=\"tag.restriction_traffic_light\">Jelzőlámpa</string>\n  <string name=\"tag.restriction_one_way\">Egyirányú</string>\n  <string name=\"tag.car_fuel_station\">Benzinkút</string>\n  <string name=\"tag.car_parking\">Parkoló</string>\n  <string name=\"tag.car_emergency_phone\">Segélyhívó telefon</string>\n  <string name=\"tag.car_turning_circle\">Fordulókör</string>\n  <string name=\"tag.car_speed_camera\">Sebességmérő kamera</string>\n  <string name=\"tag.tourism_view_point\">Kilátó</string>\n  <string name=\"tag.tourism_information\">Információ</string>\n  <string name=\"tag.tourism_picnic\">Piknikezőhely</string>\n  <string name=\"tag.tourism_attraction\">Látnivaló</string>\n  <string name=\"tag.tourism_theme_park\">Vidámpark</string>\n  <string name=\"tag.tourism_castle\">Vár</string>\n  <string name=\"tag.tourism_monument\">Monumentális, épületszerű emlékmű</string>\n  <string name=\"tag.tourism_museum\">Múzeum</string>\n  <string name=\"tag.tourism_cinema\">Mozi</string>\n  <string name=\"tag.amenity_bench\">Pad</string>\n  <string name=\"tag.amenity_water\">Víz</string>\n  <string name=\"tag.amenity_pharmacy\">Gyógyszertár</string>\n  <string name=\"tag.amenity_shop\">Bolt</string>\n  <string name=\"tag.amenity_marina\">Kishajókikötő</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Kórház,\\nOrvosok</string>\n  <string name=\"tag.amenity_recycling\">Újrahasznosítás</string>\n  <string name=\"tag.amenity_place_of_worship\">Istentiszteleti\\nhely</string>\n  <string name=\"tag.amenity_post_office\">Posta</string>\n  <string name=\"tag.amenity_library\">Könyvtár</string>\n  <string name=\"tag.amenitymore_school\">Iskola</string>\n  <string name=\"tag.amenitymore_police\">Rendőrség</string>\n  <string name=\"tag.amenitymore_fire_station\">Tűzoltóság</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Játszótér</string>\n  <string name=\"tag.amenitymore_pub\">Kocsma</string>\n  <string name=\"tag.amenitymore_hotel\">Szálloda</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Turistaszálló</string>\n  <string name=\"tag.amenitymore_restaurant\">Étterem</string>\n  <string name=\"tag.amenitymore_fastfood\">Büfé, gyorsétterem</string>\n  <string name=\"tag.amenitymore_camp_site\">Kemping</string>\n  <string name=\"tag.way_bridge\">Híd</string>\n  <string name=\"tag.way_zebra_crossing\">Gyalogosátkelő</string>\n  <string name=\"tag.way_motorway\">Autópálya</string>\n  <string name=\"tag.way_trunk\">Autóút</string>\n  <string name=\"tag.way_primary\">Első- vagy másodrendű főút</string>\n  <string name=\"tag.way_secondary\">Összekötő út</string>\n  <string name=\"tag.way_tertiary\">Bekötőút</string>\n  <string name=\"tag.way_residential\">Lakóút</string>\n  <string name=\"tag.way_service\">Szervizút</string>\n  <string name=\"tag.track_track\">Földút</string>\n  <string name=\"tag.track_cycleway\">Bicikliút</string>\n  <string name=\"tag.track_footway\">Gyalogút</string>\n  <string name=\"tag.track_bridleway\">Lovaglóút</string>\n  <string name=\"tag.track_steps\">Lépcső</string>\n  <string name=\"tag.track_living_street\">Lakó-pihenő övezet</string>\n  <string name=\"tag.track_pedestrian\">Sétálóutca</string>\n  <string name=\"tag.track_grade1\">1. fokú</string>\n  <string name=\"tag.track_grade2\">2. fokú</string>\n  <string name=\"tag.track_grade3\">3. fokú</string>\n  <string name=\"tag.track_grade4\">4. fokú</string>\n  <string name=\"tag.track_grade5\">5. fokú</string>\n  <string name=\"tag.landuse_farm\">Tanya</string>\n  <string name=\"tag.landuse_landfill\">Hulladéklerakó</string>\n  <string name=\"tag.landuse_basin\">Medence</string>\n  <string name=\"tag.landuse_reservoir\">Víztároló</string>\n  <string name=\"tag.landuse_forest\">Erdő</string>\n  <string name=\"tag.landuse_allotments\">Kiskertek</string>\n  <string name=\"tag.landuse_cemetery\">Temető</string>\n  <string name=\"tag.landuse_recreation_ground\">Rekreációs\\nterület</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker Android™-ra</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">A Windows Mobile OSMTracker által inspirált program lehetővé teszi az utazások nyomon követését, a jelentős úticélok megjelölését (hangfelvétel, fényképek), valamint GPX formátumba exportálását, hogy később az OpenStreetMap eszközökkel, például a JOSM-mal is használhassa őket.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Nyomvonalrögzítő</string>\n  <string name=\"tracklogger_waiting_gps\">Várakozás a GPS beállására a gombok engedélyezéséhez…</string>\n  <string name=\"tracklogger_voicerec_title\">Hangrögzítés</string>\n  <string name=\"tracklogger_voicerec_text\">{0} másodperces hangfájl rögzítése.</string>\n  <string name=\"tracklogger_voicerec_stop\">Leállítás</string>\n  <string name=\"tracklogger_btnBack\">Vissza</string>\n  <string name=\"tracklogger_tracked\">Rögzítve:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS kikapcsolva</string>\n  <string name=\"tracklogger_gps_disabled_hint\">A GPS ki van kapcsolva. Szeretné engedélyezni?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galéria vagy kamera?</string>\n  <string name=\"tracklogger_camera\">Fénykép készítése a kamerával</string>\n  <string name=\"tracklogger_gallery\">Fénykép kiválasztása galériából</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Útpontlista</string>\n  <string name=\"wplist_latitude\">Szél.:</string>\n  <string name=\"wplist_longitude\">Hossz.:</string>\n  <string name=\"wplist_elevation\">Mag.:</string>\n  <string name=\"wplist_accuracy\">Pontosság:</string>\n  <string name=\"wplist_compass\">Iránytű állása:</string>\n  <string name=\"wplist_compass_accuracy\">Iránytű pontossága:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Nyomvonalkezelő</string>\n  <string name=\"trackmgr_tracklist\">Nyomvonallista:</string>\n  <string name=\"trackmgr_waypoints_count\">Útpontok:</string>\n  <string name=\"trackmgr_trackpoints_count\">Nyompontok:</string>\n  <string name=\"trackmgr_empty\">Nincs egyetlen nyomvonala sem.</string>\n  <string name=\"trackmgr_newtrack_hint\">Nyomja meg új nyomvonal rögzítéséhez.</string>\n  <string name=\"trackmgr_newtrack_error\">Nem sikerült új nyomvonalat létrehozni: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Jelenleg a <b>#{0}.nyomvonalat</b> rögzíti\\nVálasszon a listáról a folytatáshoz.</string>\n  <string name=\"trackmgr_contextmenu_stop\">Nyomvonalkészítés leállítása</string>\n  <string name=\"trackmgr_contextmenu_resume\">Nyomvonalkészítés folytatása</string>\n  <string name=\"trackmgr_contextmenu_delete\">Törlés</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportálás</string>\n  <string name=\"trackmgr_contextmenu_share\">Megosztása</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Feltöltés az OpenStreetMapre</string>\n  <string name=\"trackmgr_contextmenu_display\">Megjelenítés</string>\n  <string name=\"trackmgr_contextmenu_details\">Részletek</string>\n  <string name=\"trackmgr_contextmenu_title\">{0}. nyomvonal </string>\n  <string name=\"trackmgr_delete_confirm\"> {0}. nyomvonal törlődik</string>\n  <string name=\"trackmgr_deleteall_confirm\">Minden nyomvonal törlésre kerül. Biztosan ezt akarja?</string>\n  <string name=\"trackmgr_exporting\">#{0} nyomvonal exportálása…</string>\n  <string name=\"trackmgr_exporting_prepare\">Exportálás előkészítése…</string>\n  <string name=\"trackmgr_export_error\">{0} nyomvonal exportálása sikertelen</string>\n  <string name=\"trackmgr_exportall_confirm\">Minden nyomvonal exportáltatik, ami sokáig tarthat. Biztosan ezt akarja?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Nem sikerült a következő nyomvonal feldolgozása: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Nyomvonal részletei</string>\n  <string name=\"trackdetail_startdate\">Kezdési időpont:</string>\n  <string name=\"trackdetail_enddate\">Befejezési időpont:</string>\n  <string name=\"trackdetail_startloc\">Kezdőpont:</string>\n  <string name=\"trackdetail_endloc\">Végpont:</string>\n  <string name=\"trackdetail_exportdate\">Exportálva:</string>\n  <string name=\"trackdetail_osm_upload_date\">Feltöltve az OpenStreetMapre:</string>\n  <string name=\"trackdetail_btn_export\">Exportálás GPX fájlként</string>\n  <string name=\"trackdetail_export_notyet\">(Még nincs exportálva)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Még nincs feltöltve)</string>\n  <string name=\"trackdetail_export_display\">Megjelenítés</string>\n  <string name=\"trackdetail_name\">Név</string>\n  <string name=\"trackdetail_description\">Leírás</string>\n  <string name=\"trackdetail_tags\">Címkék (vesszővel elválasztva)</string>\n  <string name=\"trackdetail_description_mandatory\">Meg kell adnia egy leírást</string>\n  <string name=\"osm_visibility_private\">Privát</string>\n  <string name=\"osm_visibility_public\">Nyilvános</string>\n  <string name=\"osm_visibility_trackable\">Követhető</string>\n  <string name=\"osm_visibility_identifiable\">Azonosítható</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap feltöltés</string>\n  <string name=\"osm_upload_ok\">Mentés és feltöltés</string>\n  <string name=\"osm_upload_tmpfile_failed\">Nem sikerült a nyomvonal exportálása az ideiglenes fájlba.</string>\n  <string name=\"osm_upload_oauth_failed\">Az OSM bejelentkezés nem sikerült</string>\n  <string name=\"osm_upload_sending\">#{0} nyomvonal küldése…</string>\n  <string name=\"osm_upload_waiting_response\">Várakozás az OpenStreetMap-szerver válaszára…</string>\n  <string name=\"osm_upload_error\">Hiba a nyomvonal feltöltésekor</string>\n  <string name=\"osm_upload_bad_response\">Az OSM szerver hibával tért vissza: ({0}) üzenet {1}</string>\n  <string name=\"osm_upload_unauthorized\">Bejelentkezési hiba. Szeretné törölni a mentett OpenStreetMap bejelentkezési információkat?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap feltöltés sikeres</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Hangrögzítés</string>\n  <string name=\"gpsstatus_record_stillimage\">Fényképezés</string>\n  <string name=\"gpsstatus_record_textnote\">Szöveges megjegyzés</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">Beállítások</string>\n  <string name=\"menu_waypointlist\">Útpontok</string>\n  <string name=\"menu_about\">Névjegy</string>\n  <string name=\"menu_displaytrack\">Nyomvonal megjelenítése</string>\n  <string name=\"menu_stoptracking\">Leállítás &amp; mentés</string>\n  <string name=\"menu_newtrack\">Új nyomvonal</string>\n  <string name=\"menu_deletetracks\">Minden nyomvonal törlése</string>\n  <string name=\"menu_continue\">Nyomvonal folytatása</string>\n  <string name=\"menu_stopcurrenttrack\">Aktuális nyomvonalrögzítés leállítása</string>\n  <string name=\"menu_save\">Mentés</string>\n  <string name=\"menu_cancel\">Mégsem</string>\n  <string name=\"menu_export\">Exportálás GPX fájlként</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap feltöltés</string>\n  <string name=\"menu_center_to_gps\">GPS-hez központosítás</string>\n  <string name=\"menu_exportall\">Minden exportálása GPX fájlba</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">A külső tárolóra írás nem sikerült.</string>\n  <string name=\"error_create_track_dir\">%s nyomvonalmappa létrehozása sikertelen</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Kérjük, ellenőrizze a külső tároló csatlakoztatását.</string>\n  <string name=\"error_voicerec_failed\">Hangrögzítés sikertelen</string>\n  <string name=\"error_userlayout_parsing\">Hiba az XML-sémafájl értelmezésekor. Kérjük, térjen vissza az alapértelmezett sémához.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracked with OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Figyelem: A HDOP értékek nem azok a HDOP értékek, amit a GPS eszköz ad vissza. Ezek becsült értékek a hely pontosságából, méterben.</string>\n  <!--About screen-->\n  <string name=\"about\">Névjegy</string>\n  <string name=\"about_text\">További információkért, dokumentációért és hibabejelentésért, kérjük tekintse meg a projekt honlapját:</string>\n  <string name=\"about_translate_text\">Segítsen az OSMTracker fordításában:</string>\n  <string name=\"about_debug_info\">Hibakeresési információ</string>\n  <string name=\"about_export_db\">Adatbázis exportálása</string>\n  <string name=\"about_exporting_db\">Adatbázis exportálása folyamatban…</string>\n  <string name=\"about_export_db_result\">Adatbázis exportálásának eredménye: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">Az OSMTracker éppen nyomvonalat rögzít</string>\n  <string name=\"notification_title\">Az OSMTracker éppen nyomvonalat rögzít (#{0})</string>\n  <string name=\"notification_text\">Érintse meg itt a fő képernyő mgjelenítéséhez</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Nyomvonal megjelenítése</string>\n  <string name=\"displaytrack_map\">Háttér térkép megjelenítése</string>\n  <string name=\"displaytrack_north\">É</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Mentés</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Pontosság</string>\n  <string name=\"various_accuracy_with_sats\">Pontosság {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Várakozás a GPS-javításra… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Várakozás az irányra…</string>\n  <string name=\"various_heading_unknown\">Az irány nem határozható meg</string>\n  <string name=\"various_export_finished\">Az exportálási folyamat sikeresen befejeződött</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap nyomvonal megjelenítése</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Frissítés &amp; telepítés</string>\n  <string name=\"buttons_presets_context_menu_delete\">Törlés</string>\n  <string name=\"buttons_presets_updating_layout\">Frissítés…</string>\n  <string name=\"buttons_presets_successful_update\">Az elrendezés sikeresen frissül</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Az elrendezés nem frissült, próbálja meg később újra</string>\n  <string name=\"buttons_presets_delete_message\">Biztosan törölni szeretné ezt az elrendezést: {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Igen</string>\n  <string name=\"buttons_presets_successful_delete\">Az elrendezés sikeresen törlődött</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Az ikonmappa sikeresen törölve</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Ehhez a fájlhoz nem volt ikonmappa társítva</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Az elrendezést nem sikerült törölni</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Hiba: nem sikerül kapcsolódni az internethez</string>\n  <string name=\"available_layouts_response_null_exception\">Hiba: nem sikerül csatlakozni az egyedi elrendezések alapértelmezett tárházához</string>\n  <string name=\"available_layouts_connecting_message\">(Kapcsolódás…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Letöltés</string>\n  <string name=\"available_layouts_not_available_language\">Az Ön nyelve nem áll rendelkezésre, válasszon egyet a listából</string>\n  <string name=\"available_layouts_language_dialog_title\">Rendelkezésre álló nyelvek</string>\n  <string name=\"available_layouts_checking_language_dialog\">Helyi nyelvű verziók ellenőrzése</string>\n  <string name=\"available_layouts_downloading_dialog\">Letöltés…</string>\n  <string name=\"available_layouts_successful_download\">Az elrendezés sikeresen letöltve</string>\n  <string name=\"available_layouts_unsuccessful_download\">Az elrendezés nem tölthető le, próbálja meg később újra</string>\n  <string name=\"available_layouts_null_response_received\">Hiba történt az adatok kiszolgálóról történő lekérdezése közben</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Alapértelmezett</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Egyedi</string>\n  <string name=\"github_repository_settings_username\">Github felhasználónév:</string>\n  <string name=\"github_repository_settings_repository_name\">Tár neve:</string>\n  <string name=\"github_repository_settings_branch_name\">Ág neve:</string>\n  <string name=\"github_repository_settings_valid_server\">A Github tár érvényes</string>\n  <string name=\"github_repository_settings_invalid_server\">A Github tár érvénytelen</string>\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker Android™-ra – bevezetés</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Isten hozta az OSMTracker for Android™ 👋 alkalmazásban</string>\n  <string name=\"app_intro_slide1_description\">Ez az alkalmazás szabad szoftver, amely tiszteletben tartja az Ön szabadságát!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Jó nyomvonalkövetést! 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">Az OSMTracker for Android az Ön GPS helyzetének segítségével rögzít nyomvonalpontokat és útpontokat, még akkor is, ha az alkalmazás a háttérben fut.\n\\nAz Ön adatait nem használjuk fel hirdetések támogatására.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Hangrögzítés</string>\n  <string name=\"wpt_stillimage\">Fénykép</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hy/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">ՕԷսԷմԹրաքերի պատկերանիշ</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Խոշորացնել</string>\n  <string name=\"acc.zoom_out\">Հեռվացնել</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Արբանյակային ազդանշանի ուժգնության ցուցիչ</string>\n  <string name=\"acc.record_indicator\">Արձանագրել ընթացքի մեջ ցուցիչը</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Հսկեք կարգավիճակի ցուցիչը</string>\n  <string name=\"acc.upload_status\">ՕփենՍթրիթՄափի բեռնման կարգավիճակի ցուցիչ</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hy/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">Անդրոիդի ՕԷսԷմԹրաքեր</string>\n  <string name=\"app_short_name\">ՕԷսԷմԹրաքեր</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger_voicerec_title\">Ձայնագրում</string>\n  <string name=\"tracklogger_voicerec_stop\">Կանգնել</string>\n  <string name=\"tracklogger_btnBack\">Հետ</string>\n  <!--Waypoint List-->\n  <string name=\"wplist_latitude\">Լայն՝</string>\n  <string name=\"wplist_longitude\">Երկայն՝</string>\n  <string name=\"wplist_elevation\">Բարձր՝</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr_contextmenu_delete\">Ջնջել</string>\n  <string name=\"trackmgr_contextmenu_display\">Ցույց տալ</string>\n  <string name=\"trackmgr_contextmenu_details\">Մանրամասնություններ</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail_description\">Նկարագրություն</string>\n  <!--OSM upload-->\n  <!--GPS Status & record bar-->\n  <!--Menu-->\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <!--Notification-->\n  <!--Display track-->\n  <!--Track detail-->\n  <!--Various-->\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-id/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Perbesar</string>\n  <string name=\"acc.zoom_out\">Perkecil</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikator kekuatan sinyal satelit</string>\n  <string name=\"acc.record_indicator\">Indikator rekaman tengah berlangsung</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikator status trek</string>\n  <string name=\"acc.upload_status\">Indikator status unggah OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-id/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Pengaturan</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Pengaturan GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Tampilkan pengaturan layar sistem GPS</string>\n  <string name=\"prefs_check_gps_startup\">Cek GPS saat mulai</string>\n  <string name=\"prefs_check_gps_startup_summary\">Cek jika GPS mati saat memulai, dan tawarkan untuk menghidupkan</string>\n  <string name=\"prefs_gps_ignore_clock\">Abaikan jam GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Jangan gunakan jam GPS, gunakan jam sistem Android</string>\n  <string name=\"prefs_gps_logging_interval\">Interfal masuk GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Gunakan 0 untuk kemungkinan terpendek (batrai boros)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">detik</string>\n  <string name=\"prefs_ui\">Tampilan pengguna</string>\n  <string name=\"prefs_ui_picture_source\">Sumber baku foto</string>\n  <string name=\"prefs_ui_picture_source_summary\">Ambil foto dari kamera atau galeri?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galeri</item>\n    <item>Selalu tanya</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Atur tombol</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Pilih tombol buatan (lihat dokumentasi)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Baku</string>\n  <string name=\"prefs_ui_orientation\">Orientasi</string>\n  <string name=\"prefs_ui_orientation_summary\">Pilih orientasi untuk layar tombol</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Otomatis</item>\n    <item>Potret</item>\n    <item>Bentang</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Durasi rekaman suara</string>\n  <string name=\"prefs_voicerec_duration_seconds\">detik</string>\n  <string name=\"prefs_theme\">Gambar tema layar utama</string>\n  <string name=\"prefs_theme_summary\">Muat ulang aplikasi untuk melihat perubahan</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS baku</item>\n    <item>OS baku (gelap)</item>\n    <item>OS baku (terang)</item>\n    <item>Sangat kontras</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Layar selalu hidup</string>\n  <string name=\"prefs_display_always_on_summary\">Layar akan selalu hidup saat melacak, Matikan untuk menghemat batrai</string>\n  <string name=\"prefs_displaytrack_osm\">Peta latar belakang</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Tampilkan peta OpenSreetMap pada trek. Butuh koneksi internet</string>\n  <string name=\"prefs_output\">Pengaturan GPX</string>\n  <string name=\"prefs_storage_dir\">Folder penyimpanan luar (kartu memori)</string>\n  <string name=\"prefs_storage_dir_hint\">Efektif untuk trek selanjutnya (bukan trek yg ini)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Satu folder per trek</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Simpan setiap trek berikut berkas yg terkait dalam folder tersendiri</string>\n  <string name=\"prefs_output_filename\">Judul berkas untuk nama trek</string>\n  <string name=\"prefs_output_filename_summary\">Pola untuk nama file jika trek memiliki nama</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nama trek</item>\n    <item>Nama, tanggal dan waktu mulai</item>\n    <item>Tanggal dan waktu mulai</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Akurasi dalam berkas GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Tambahkan info akurasi dalam berkas GPX, dengan nama posisi atau pada komentar posisi</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nihil</item>\n    <item>Dengan nama posisi</item>\n    <item>Dlm komentar posisi</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Gunakan perkiraan HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Isikan HDOP pada GPX dengan nilai perkiraan dari akurasi</string>\n  <string name=\"prefs_sound_enabled\">Hidupkan suara</string>\n  <string name=\"prefs_sound_enabled_summary\">Mainkan suara saat mulai merekam dan berakhir</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Kembalikan otentifikasi OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Lupakan izin identitas OSM dan paksa OSMTracker memintanya kembali</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Anda harus mengotorisasi OSMTracker kembali untuk mengunggah trek. Anda yakin?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Nihil</item>\n    <item>dlm komentar</item>\n    <item>dlm ekstensi</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Definisikan apa dan bagaimana data kompas diekspor ke berkas GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-id/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Lain-lain</string>\n  <string name=\"tag.restriction\">Terbatas</string>\n  <string name=\"tag.car\">Mobil</string>\n  <string name=\"tag.tourism\">Pariwisata</string>\n  <string name=\"tag.amenity\">Fasilitas</string>\n  <string name=\"tag.amenity_more\">Fasilitas (+)</string>\n  <string name=\"tag.way\">Jalur</string>\n  <string name=\"tag.track\">Trek</string>\n  <string name=\"tag.landuse\">Kegunaan</string>\n  <string name=\"tag.misc_bus_stop\">Halte</string>\n  <string name=\"tag.misc_railway\">Rel kereta</string>\n  <string name=\"tag.misc_telephone\">Telepon</string>\n  <string name=\"tag.misc_post_box\">Kotak pos</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">Tambatan kapal</string>\n  <string name=\"tag.misc_toilets\">WC Umum</string>\n  <string name=\"tag.misc_shelter\">Pondok</string>\n  <string name=\"tag.misc_surveillance\">CCTV</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Buntu</string>\n  <string name=\"tag.restriction_traffic_light\">Lampu merah</string>\n  <string name=\"tag.restriction_one_way\">Satu arah</string>\n  <string name=\"tag.car_fuel_station\">Pom bensin</string>\n  <string name=\"tag.car_parking\">Parkiran</string>\n  <string name=\"tag.car_emergency_phone\">Telpon umum</string>\n  <string name=\"tag.car_turning_circle\">Bundaran putar</string>\n  <string name=\"tag.car_speed_camera\">Kamera pengawas\nkecepatan</string>\n  <string name=\"tag.tourism_view_point\">Panorama</string>\n  <string name=\"tag.tourism_information\">Informasi</string>\n  <string name=\"tag.tourism_picnic\">Tempat\npiknik</string>\n  <string name=\"tag.tourism_attraction\">Atraksi</string>\n  <string name=\"tag.tourism_theme_park\">Taman</string>\n  <string name=\"tag.tourism_castle\">Istana/\nKastil</string>\n  <string name=\"tag.tourism_monument\">Monumen</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Bioskop</string>\n  <string name=\"tag.amenity_bench\">Bangku\ntaman</string>\n  <string name=\"tag.amenity_water\">Perairan</string>\n  <string name=\"tag.amenity_pharmacy\">Apotik</string>\n  <string name=\"tag.amenity_shop\">Toko</string>\n  <string name=\"tag.amenity_marina\">Pelabuhan</string>\n  <string name=\"tag.amenity_sport\">Olahraga</string>\n  <string name=\"tag.amenity_taxi\">Taksi</string>\n  <string name=\"tag.amenity_recycling\">Bak\nsampah</string>\n  <string name=\"tag.amenity_post_office\">Kantor pos</string>\n  <string name=\"tag.amenity_library\">Pustaka</string>\n  <string name=\"tag.amenitymore_school\">Sekolah</string>\n  <string name=\"tag.amenitymore_police\">Polisi</string>\n  <string name=\"tag.amenitymore_fire_station\">Pemadam\nkebakaran</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Arena\nbermain</string>\n  <string name=\"tag.amenitymore_pub\">Kafe</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Penginapan</string>\n  <string name=\"tag.amenitymore_hostel\">Losmen</string>\n  <string name=\"tag.amenitymore_restaurant\">Restoran</string>\n  <string name=\"tag.amenitymore_fastfood\">Berger\nKentaki</string>\n  <string name=\"tag.amenitymore_camp_site\">Perkemahan</string>\n  <string name=\"tag.way_bridge\">Jembatan</string>\n  <string name=\"tag.way_zebra_crossing\">Zebra cross</string>\n  <string name=\"tag.way_motorway\">Jalur\nmotor</string>\n  <string name=\"tag.way_trunk\">Jalan\ntol</string>\n  <string name=\"tag.way_primary\">Jalan\nutama</string>\n  <string name=\"tag.way_secondary\">Jalan\numum</string>\n  <string name=\"tag.way_tertiary\">Jalan\nkecil</string>\n  <string name=\"tag.way_residential\">Jalan\nperumahan</string>\n  <string name=\"tag.way_service\">Gang</string>\n  <string name=\"tag.track_track\">Trek</string>\n  <string name=\"tag.track_cycleway\">Jalur\nsepeda</string>\n  <string name=\"tag.track_footway\">Trotoar</string>\n  <string name=\"tag.track_bridleway\">Jalan\ntanah</string>\n  <string name=\"tag.track_steps\">Tangga</string>\n  <string name=\"tag.track_living_street\">Jalanan\nramai</string>\n  <string name=\"tag.track_pedestrian\">Kaki lima</string>\n  <string name=\"tag.track_grade1\">Kelas 1</string>\n  <string name=\"tag.track_grade2\">Kelas 2</string>\n  <string name=\"tag.track_grade3\">Kelas 3</string>\n  <string name=\"tag.track_grade4\">Kelas 4</string>\n  <string name=\"tag.track_grade5\">Kelas 5</string>\n  <string name=\"tag.landuse_farm\">Pertanian</string>\n  <string name=\"tag.landuse_landfill\">TPA sampah</string>\n  <string name=\"tag.landuse_basin\">Kolam\npenampungan</string>\n  <string name=\"tag.landuse_reservoir\">Waduk</string>\n  <string name=\"tag.landuse_forest\">Hutan</string>\n  <string name=\"tag.landuse_allotments\">Perkebunan</string>\n  <string name=\"tag.landuse_cemetery\">Kuburan</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-id/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Terinspirasi dari OSMTracker pada Windows Mobile, yang memungkinkan Anda untuk melacak perjalanan, menandai titik secara signifikan (rekaman suara, foto), lalu diekspor ke dalam format GPX untuk digunakan pada Open Street Map tool seperti JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Catatan trek</string>\n  <string name=\"tracklogger_waiting_gps\">Menunggu GPS terkunci untuk menampilkan tombol...</string>\n  <string name=\"tracklogger_voicerec_title\">Perekaman suara</string>\n  <string name=\"tracklogger_voicerec_text\">Merekam {0} klip audio.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stop</string>\n  <string name=\"tracklogger_btnBack\">Kembali</string>\n  <string name=\"tracklogger_tracked\">Terlacak</string>\n  <string name=\"tracklogger_gps_disabled\">GPS mati</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS mati. Anda ingin hidupkan?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galeri atau kamera?</string>\n  <string name=\"tracklogger_camera\">Ambil foto dengan kamera</string>\n  <string name=\"tracklogger_gallery\">Pilih foto dari galeri</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Daftar posisi</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Akurasi: </string>\n  <string name=\"wplist_compass\">Arah kompas:</string>\n  <string name=\"wplist_compass_accuracy\">Akurasi kompas:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Pengaturan trek</string>\n  <string name=\"trackmgr_tracklist\">Daftar trek:</string>\n  <string name=\"trackmgr_waypoints_count\">Posisi:</string>\n  <string name=\"trackmgr_trackpoints_count\">Trekpoin: </string>\n  <string name=\"trackmgr_empty\">Anda tidak memiliki trek apapun.</string>\n  <string name=\"trackmgr_newtrack_error\">Tidak dapat membuat trek baru: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stop pelacakan</string>\n  <string name=\"trackmgr_contextmenu_resume\">Lanjutkan pelacakan</string>\n  <string name=\"trackmgr_contextmenu_delete\">Hapus</string>\n  <string name=\"trackmgr_contextmenu_export\">Ekspor sebagai GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Unggah ke OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Tampilkan</string>\n  <string name=\"trackmgr_contextmenu_details\">Rincian</string>\n  <string name=\"trackmgr_contextmenu_title\">Trek #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Trek #{0} akan dihapus</string>\n  <string name=\"trackmgr_deleteall_confirm\">Semua trek akan dihapus. Anda yakin?</string>\n  <string name=\"trackmgr_exporting\">Mengekspor trek #{0}…</string>\n  <string name=\"trackmgr_export_error\">Tidak dapat mengekspor trek: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Semua trek akan diekspor, yang akan memakan waktu. Anda yakin?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Rincian Trek</string>\n  <string name=\"trackdetail_startdate\">Waktu mulai:</string>\n  <string name=\"trackdetail_enddate\">Waktu selesai:</string>\n  <string name=\"trackdetail_startloc\">Mulai pada:</string>\n  <string name=\"trackdetail_endloc\">Selesai pada:</string>\n  <string name=\"trackdetail_exportdate\">Diekspor pada:</string>\n  <string name=\"trackdetail_osm_upload_date\">Diunggah ke OSM pada:</string>\n  <string name=\"trackdetail_btn_export\">Ekspor sebagai GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Belum diekspor)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Belum diunggah)</string>\n  <string name=\"trackdetail_export_display\">Tampilkan</string>\n  <string name=\"trackdetail_description\">Keterangan</string>\n  <string name=\"trackdetail_tags\">Tag (pisahkan dgn koma)</string>\n  <string name=\"trackdetail_description_mandatory\">Anda harus berikan keterangan</string>\n  <string name=\"osm_visibility_private\">Pribadi</string>\n  <string name=\"osm_visibility_public\">Publik</string>\n  <string name=\"osm_visibility_trackable\">Terlacak</string>\n  <string name=\"osm_visibility_identifiable\">Teridentifikasi</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Unggahan OpenSreetMap</string>\n  <string name=\"osm_upload_ok\">Simpan dan unggah</string>\n  <string name=\"osm_upload_tmpfile_failed\">Tidak dapat mengekspor trek ke berkas sementara</string>\n  <string name=\"osm_upload_oauth_failed\">Tidak dapat mengotentifikasi ke OSM</string>\n  <string name=\"osm_upload_sending\">Mengirim trek #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Menunggu respon dari server OpenSreetMap...</string>\n  <string name=\"osm_upload_error\">Kesalahan saat mengunggah trek</string>\n  <string name=\"osm_upload_bad_response\">Terjadi kesalahan pada server OSM: ({0}) pesan {1}</string>\n  <string name=\"osm_upload_unauthorized\">Kesalahan Otorisasi. </string>\n  <string name=\"osm_upload_sucess\">Unggahan OpenStreetMap sukses</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Rekam suara</string>\n  <string name=\"gpsstatus_record_stillimage\">Ambil foto</string>\n  <string name=\"gpsstatus_record_textnote\">Catatan</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Pengaturan</string>\n  <string name=\"menu_waypointlist\">Posisi</string>\n  <string name=\"menu_about\">Tentang</string>\n  <string name=\"menu_displaytrack\">Tampilkan trek</string>\n  <string name=\"menu_stoptracking\">Stop &amp; simpan</string>\n  <string name=\"menu_newtrack\">Trek baru</string>\n  <string name=\"menu_deletetracks\">Hapus semua trek</string>\n  <string name=\"menu_continue\">Lanjutkan trek</string>\n  <string name=\"menu_stopcurrenttrack\">Stop trek ini</string>\n  <string name=\"menu_save\">Simpan</string>\n  <string name=\"menu_cancel\">Batal</string>\n  <string name=\"menu_export\">Ekspor sebagai GPX</string>\n  <string name=\"menu_osm_upload\">Unggahan OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Ketengahkan GPS</string>\n  <string name=\"menu_exportall\">Ekspor semua sebagai GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Tidak dapat menyimpan ke memori ekternal</string>\n  <string name=\"error_create_track_dir\">Tidak dapat membuat folder trek %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Silakan periksa apakah kartu memori telah pada tempatnya.</string>\n  <string name=\"error_voicerec_failed\">Perekaman suara gagal</string>\n  <string name=\"error_userlayout_parsing\">Kesalahan saat parsing berkas layout XML. Mohon kembalikan ke layout baku.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Dilacak dengan OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Peringatan: Nilai HDOP bukan HDOP dari perangkat GPS. Namun pendekatan dari akurasi lokasi dalam ukuran meter.</string>\n  <!--About screen-->\n  <string name=\"about\">Tentang</string>\n  <string name=\"about_text\">Untuk informasi lebih lanjut, dokumen, dan laporan masalah, silakan kunjungi halaman situs proyek:</string>\n  <string name=\"about_translate_text\">Bantu menerjemahkan OSMTracker:</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker melacak</string>\n  <string name=\"notification_title\">OSMTracker melacak (#{0})</string>\n  <string name=\"notification_text\">Tap disini untuk menampilkan layar utama</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Tampilkan trek</string>\n  <string name=\"displaytrack_map\">Tampilkan peta latar</string>\n  <string name=\"displaytrack_north\">U</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Simpan</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Akurasi</string>\n  <string name=\"various_accuracy_with_sats\">Akurasi {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Menunggu GPS mengunci… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Menunggu arah...</string>\n  <string name=\"various_heading_unknown\">Arah tidak dapat ditentukan</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Tampilan trek OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-id/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Rekaman suara</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Simbolo di OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Aumentare lo zoom</string>\n  <string name=\"acc.zoom_out\">Diminuire lo zoom</string>\n  <string name=\"acc.zoom_center\">Centro</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicatore di potenza del segnale satellitare</string>\n  <string name=\"acc.record_indicator\">Indicatore di registrazione in corso</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicatore di stato della traccia</string>\n  <string name=\"acc.upload_status\">Indicatore dello stato di caricamento su OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Impostazioni</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Impostazioni GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Mostra la schermata impostazioni del sistema GPS</string>\n  <string name=\"prefs_check_gps_startup\">Verifica GPS all\\'avvio</string>\n  <string name=\"prefs_check_gps_startup_summary\">Verifica se il GPS è disabilitato all\\'avvio e chiede di abilitarlo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignora orologio GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignora l\\'orologio del GPS e utilizza quello Android per il salvataggio dell\\'ora</string>\n  <string name=\"prefs_use_barometer\">Registra pressione barometrica [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">La commutazione richiede il riavvio della traccia</string>\n  <string name=\"prefs_gps_logging_interval\">Intervallo registrazione GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Usa 0 per il più breve possibile (influisce sulla durata batteria)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">secondi</string>\n  <string name=\"prefs_gps_logging_min_distance\">Distanza registrazione GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Distanza minima in metri tra i punti della traccia, usa 0 per quella minima possibile</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metri</string>\n  <string name=\"prefs_ui\">Interfaccia utente</string>\n  <string name=\"prefs_ui_picture_source\">Sorgente immagini predefinita</string>\n  <string name=\"prefs_ui_picture_source_summary\">Utilizzare le immagini della fotocamera o della galleria?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Fotocamera</item>\n    <item>Galleria</item>\n    <item>Chiedi ogni volta</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Formato tasti</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Permette di definire un formato personalizzato dei tasti (vedi manuale)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">DEFAULT LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Predefinito</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">LAYOUT SCARICATO</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Non hai scaricato file di layout</string>\n  <string name=\"prefs_ui_available_layout\">Layout disponibili</string>\n  <string name=\"prefs_ui_github_repository_settings\">Impostazioni del Github Repository</string>\n  <string name=\"prefs_ui_orientation\">Orientamento</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientamento preferito per i tasti dello schermo</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatico</item>\n    <item>Orizzontale</item>\n    <item>Verticale</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Durata registrazione vocale</string>\n  <string name=\"prefs_voicerec_duration_seconds\">secondi</string>\n  <string name=\"prefs_theme\">Tema schermata principale</string>\n  <string name=\"prefs_theme_summary\">Riavvia l\\'applicazione per impostare le modifiche</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS predefinito</item>\n    <item>OS predefinito (scuro)</item>\n    <item>OS predefinito (chiaro)</item>\n    <item>Contrasto elevato</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Schermo sempre attivo</string>\n  <string name=\"prefs_display_always_on_summary\">Lo schermo rimarrà attivo durante la registrazione della traccia. Disattiva per risparmiare la batteria</string>\n  <string name=\"prefs_displaytrack_osm\">Sfondo OSM</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Mostra OpenStreetMap sotto la traccia. È necessaria una connessione dati</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Mostra sempre lo sfondo OpenStreetMap? Richiede una connessione dati</string>\n  <string name=\"prefs_output\">Salvataggio file GPX</string>\n  <string name=\"prefs_storage_dir\">Cartella di archiviazione in ‘documents’</string>\n  <string name=\"prefs_storage_dir_hint\">Valido per la traccia successiva (non per quella attuale)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Una directory per traccia</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Salva ogni traccia e i file associati nella propria directory</string>\n  <string name=\"prefs_output_filename\">Nome file traccia salvata</string>\n  <string name=\"prefs_output_filename_summary\">Schema per il nome del file se la traccia ha un nome</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nome traccia</item>\n    <item>Nome, data e ora inizio</item>\n    <item>Data e ora inizio, nome</item>\n    <item>Data e ora inizio</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Etichetta del nome file</string>\n  <string name=\"prefs_output_filename_label_summary\">Questa etichetta verrà aggiunta alla fine del nome del file</string>\n  <string name=\"prefs_output_accuracy\">Precisione nel file GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Inserisce le info di precisione nel file GPX, con il nome del POI o in una scheda separata</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nessuna</item>\n    <item>Con nome POI</item>\n    <item>Nel commento del POI</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Usa approssimazione HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Inserisce HDOP nel GPX con un valore di approssimazione per la precisione</string>\n  <string name=\"prefs_sound_enabled\">Abilita suoni</string>\n  <string name=\"prefs_sound_enabled_summary\">Riproduci suoni ad inizio e fine registrazioni vocali</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Ripristina l\\'autenticazione su OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Dimentica le credenziali e le autorizzazioni di OSM e forza OSMTracker a chiederle di nuovo</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Devi autorizzare nuovamente OSMTracker a caricare i tracciati. Sei sicuro?</string>\n  <string name=\"prefs_map_tile\">Fornitore dei tasselli della mappa</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Nessuno</item>\n    <item>come commento</item>\n    <item>per esteso</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Esporta orientamento bussola</string>\n  <string name=\"prefs_compass_heading_summary\">Definisce se e come i dati della bussola devono essere esportati nel file GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Generici</string>\n  <string name=\"tag.restriction\">Limitazioni</string>\n  <string name=\"tag.car\">Automobile</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Servizi</string>\n  <string name=\"tag.amenity_more\">Servizi (+)</string>\n  <string name=\"tag.way\">Percorso</string>\n  <string name=\"tag.track\">Pista</string>\n  <string name=\"tag.landuse\">Uso del terreno</string>\n  <string name=\"tag.misc_bus_stop\">Fermata dell\\'autobus</string>\n  <string name=\"tag.misc_railway\">Ferrovia</string>\n  <string name=\"tag.misc_telephone\">Telefono</string>\n  <string name=\"tag.misc_post_box\">Cassetta Postale</string>\n  <string name=\"tag.misc_atm\">Bancomat</string>\n  <string name=\"tag.misc_bollard\">Colonnina</string>\n  <string name=\"tag.misc_toilets\">Bagni pubblici</string>\n  <string name=\"tag.misc_shelter\">Pensilina/ricovero</string>\n  <string name=\"tag.misc_surveillance\">Telecamera di sorveglianza</string>\n  <string name=\"tag.restriction_20\">Massimo 20</string>\n  <string name=\"tag.restriction_30\">30</string>\n  <string name=\"tag.restriction_40\">Massimo 40</string>\n  <string name=\"tag.restriction_50\">50</string>\n  <string name=\"tag.restriction_60\">Massimo 60</string>\n  <string name=\"tag.restriction_70\">Massimo 70</string>\n  <string name=\"tag.restriction_80\">80</string>\n  <string name=\"tag.restriction_90\">Massimo 90</string>\n  <string name=\"tag.restriction_100\">100</string>\n  <string name=\"tag.restriction_110\">110</string>\n  <string name=\"tag.restriction_120\">120</string>\n  <string name=\"tag.restriction_130\">Massimo 130</string>\n  <string name=\"tag.restriction_no_exit\">Senza uscita</string>\n  <string name=\"tag.restriction_traffic_light\">Semaforo</string>\n  <string name=\"tag.restriction_one_way\">Senso unico</string>\n  <string name=\"tag.car_fuel_station\">Stazione di rifornimento</string>\n  <string name=\"tag.car_parking\">Parcheggio</string>\n  <string name=\"tag.car_emergency_phone\">Telefono di emergenza</string>\n  <string name=\"tag.car_turning_circle\">Slargo per inversione di marcia</string>\n  <string name=\"tag.car_speed_camera\">Rilevatore di velocità</string>\n  <string name=\"tag.tourism_view_point\">Punto panoramico</string>\n  <string name=\"tag.tourism_information\">Informazioni</string>\n  <string name=\"tag.tourism_picnic\">Area picnic</string>\n  <string name=\"tag.tourism_attraction\">Attrazione turistica</string>\n  <string name=\"tag.tourism_theme_park\">Parco divertimenti</string>\n  <string name=\"tag.tourism_castle\">Castello</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museo</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Panchina</string>\n  <string name=\"tag.amenity_water\">Acqua</string>\n  <string name=\"tag.amenity_pharmacy\">Farmacia</string>\n  <string name=\"tag.amenity_shop\">Negozio</string>\n  <string name=\"tag.amenity_marina\">Porto turistico</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Ospedale,\\nAmbulatorio</string>\n  <string name=\"tag.amenity_recycling\">Riciclaggio</string>\n  <string name=\"tag.amenity_place_of_worship\">Luogo\\ndi culto</string>\n  <string name=\"tag.amenity_post_office\">Ufficio postale</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Scuola</string>\n  <string name=\"tag.amenitymore_police\">Polizia</string>\n  <string name=\"tag.amenitymore_fire_station\">Vigili del fuoco</string>\n  <string name=\"tag.amenitymore_bank\">Banca</string>\n  <string name=\"tag.amenitymore_playground\">Parco giochi</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Ostello</string>\n  <string name=\"tag.amenitymore_restaurant\">Ristorante</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast food</string>\n  <string name=\"tag.amenitymore_camp_site\">Campeggio</string>\n  <string name=\"tag.way_bridge\">Ponte</string>\n  <string name=\"tag.way_zebra_crossing\">Strisce pedonali</string>\n  <string name=\"tag.way_motorway\">Autostrada/tangenziale</string>\n  <string name=\"tag.way_trunk\">Trunk</string>\n  <string name=\"tag.way_primary\">Primaria</string>\n  <string name=\"tag.way_secondary\">Secondaria</string>\n  <string name=\"tag.way_tertiary\">Terziaria</string>\n  <string name=\"tag.way_residential\">Residenziale</string>\n  <string name=\"tag.way_service\">Servizio</string>\n  <string name=\"tag.track_track\">Pista</string>\n  <string name=\"tag.track_cycleway\">Pista ciclabile</string>\n  <string name=\"tag.track_footway\">Marciapiede</string>\n  <string name=\"tag.track_bridleway\">Sentiero equitazione</string>\n  <string name=\"tag.track_steps\">Rampa di scale</string>\n  <string name=\"tag.track_living_street\">Living street</string>\n  <string name=\"tag.track_pedestrian\">Area pedonale</string>\n  <string name=\"tag.track_grade1\">Grado 1</string>\n  <string name=\"tag.track_grade2\">Grado 2</string>\n  <string name=\"tag.track_grade3\">Grado 3</string>\n  <string name=\"tag.track_grade4\">Grado 4</string>\n  <string name=\"tag.track_grade5\">Grado 5</string>\n  <string name=\"tag.landuse_farm\">Area pedonale</string>\n  <string name=\"tag.landuse_landfill\">Discarica</string>\n  <string name=\"tag.landuse_basin\">Bacino</string>\n  <string name=\"tag.landuse_reservoir\">Serbatoio</string>\n  <string name=\"tag.landuse_forest\">Foresta</string>\n  <string name=\"tag.landuse_allotments\">Orti pubblici</string>\n  <string name=\"tag.landuse_cemetery\">Cimitero</string>\n  <string name=\"tag.landuse_recreation_ground\">Area di\\nsvago</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker per Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Ispirato a OSMTracker di Windows Mobile, permette di tracciare i propri viaggi, segnare i punti di interesse importanti (registrazione vocale, foto), esportarli in formato GPX per un uso successivo con strumenti di Open Street Map come JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Registrazione traccia</string>\n  <string name=\"tracklogger_waiting_gps\">In attesa del GPS per abilitare i pulsanti…</string>\n  <string name=\"tracklogger_voicerec_title\">Registrazione vocale</string>\n  <string name=\"tracklogger_voicerec_text\">Registrazione audio di {0}s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Ferma</string>\n  <string name=\"tracklogger_btnBack\">Indietro</string>\n  <string name=\"tracklogger_tracked\">Tracciato: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS disattivato</string>\n  <string name=\"tracklogger_gps_disabled_hint\">Il GPS è disattivato. Vuoi attivarlo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galleria o fotocamera?</string>\n  <string name=\"tracklogger_camera\">Scatta foto con la fotocamera</string>\n  <string name=\"tracklogger_gallery\">Seleziona foto dalla galleria</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Elenco POI</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Prec: </string>\n  <string name=\"wplist_compass\">Direz. bussola:</string>\n  <string name=\"wplist_compass_accuracy\">Prec. bussola:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gestione tracce</string>\n  <string name=\"trackmgr_tracklist\">Elenco tracce:</string>\n  <string name=\"trackmgr_waypoints_count\">POI: </string>\n  <string name=\"trackmgr_trackpoints_count\">Punti traccia: </string>\n  <string name=\"trackmgr_empty\">Nessuna traccia disponibile.</string>\n  <string name=\"trackmgr_newtrack_hint\">Premi per registrare una nuova traccia.</string>\n  <string name=\"trackmgr_newtrack_error\">Impossibile creare una nuova traccia: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Stai già registrando la <b>traccia #{0}</b>\\nSelezionala nell\\'elenco per continuare</string>\n  <string name=\"trackmgr_contextmenu_stop\">Ferma registrazione</string>\n  <string name=\"trackmgr_contextmenu_resume\">Riprendi registrazione</string>\n  <string name=\"trackmgr_contextmenu_delete\">Elimina</string>\n  <string name=\"trackmgr_contextmenu_export\">Esporta</string>\n  <string name=\"trackmgr_contextmenu_share\">Condividi</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Carica su OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Mostra</string>\n  <string name=\"trackmgr_contextmenu_details\">Dettagli</string>\n  <string name=\"trackmgr_contextmenu_title\">Traccia #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">La traccia #{0} sarà eliminata</string>\n  <string name=\"trackmgr_deleteall_confirm\">Tutte le tracce saranno eliminate. Sei sicuro?</string>\n  <string name=\"trackmgr_exporting\">Esportazione traccia #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Preparazione esportazione...</string>\n  <string name=\"trackmgr_export_error\">Impossibile esportare la traccia: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Tutti i tracciati verranno esportati, ma questo può richiedere un po\\' di tempo. Sei sicuro?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Impossibile processare la traccia: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Dettagli traccia</string>\n  <string name=\"trackdetail_startdate\">Orario inizio:</string>\n  <string name=\"trackdetail_enddate\">Orario fine:</string>\n  <string name=\"trackdetail_startloc\">Inizia alla posizione:</string>\n  <string name=\"trackdetail_endloc\">Finisce alla posizione:</string>\n  <string name=\"trackdetail_exportdate\">Esportata:</string>\n  <string name=\"trackdetail_osm_upload_date\">Caricato su OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Esporta in GPX</string>\n  <string name=\"trackdetail_export_notyet\">(non ancora esportata)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(non è stato ancora caricata)</string>\n  <string name=\"trackdetail_export_display\">Mostra</string>\n  <string name=\"trackdetail_name\">Nome</string>\n  <string name=\"trackdetail_description\">Descrizione:</string>\n  <string name=\"trackdetail_tags\">Etichette (separate da una virgola)</string>\n  <string name=\"trackdetail_description_mandatory\">Devi inserire una descrizione</string>\n  <string name=\"osm_visibility_private\">Privato</string>\n  <string name=\"osm_visibility_public\">Pubblico</string>\n  <string name=\"osm_visibility_trackable\">Rintracciabile</string>\n  <string name=\"osm_visibility_identifiable\">Identificabile</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Caricamento su OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Salva e carica</string>\n  <string name=\"osm_upload_tmpfile_failed\">Impossibile esportare la traccia in un file temporaneo</string>\n  <string name=\"osm_upload_oauth_failed\">Impossibile autenticarsi su OSM</string>\n  <string name=\"osm_upload_sending\">Sto inviando la traccia #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Aspettando una risposta dal server OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Errore durante il caricamento della traccia</string>\n  <string name=\"osm_upload_bad_response\">Il server di OSM ha restituito un messaggio di errore: ({0}) messaggio {1}</string>\n  <string name=\"osm_upload_unauthorized\">Errore di autenticazione. Vuoi cancellare le credenziali salvate di OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Caricamento su OpenStreetMap riuscito</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Registra voce</string>\n  <string name=\"gpsstatus_record_stillimage\">Scatta foto</string>\n  <string name=\"gpsstatus_record_textnote\">Scrivi nota</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Nome do waypoint/testo</string>\n  <string name=\"waypoint_name_hint\">Inserisci il nome del waypoint</string>\n  <string name=\"edit_waypoint_bt_preview\">Apri file</string>\n  <string name=\"edit_waypoint_bt_save\">Salvare</string>\n  <string name=\"edit_waypoint_bt_delete\">Eliminare</string>\n  <string name=\"edit_waypoint_bt_cancel\">Annullare</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Eliminare waypoint</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Eliminare il waypoint?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Eliminare</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Annullare</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Impostazioni</string>\n  <string name=\"menu_waypointlist\">POI</string>\n  <string name=\"menu_about\">Info</string>\n  <string name=\"menu_displaytrack\">Mostra traccia</string>\n  <string name=\"menu_stoptracking\">Ferma &amp; Salva</string>\n  <string name=\"menu_newtrack\">Nuova traccia</string>\n  <string name=\"menu_deletetracks\">Elimina tutte le tracce</string>\n  <string name=\"menu_continue\">Continua traccia</string>\n  <string name=\"menu_stopcurrenttrack\">Ferma la traccia attuale</string>\n  <string name=\"menu_save\">Salva</string>\n  <string name=\"menu_cancel\">Annulla</string>\n  <string name=\"menu_export\">Esporta in GPX</string>\n  <string name=\"menu_osm_upload\">Caricamento su OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centra nel GPS</string>\n  <string name=\"menu_exportall\">Esporta tutti come GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Impossibile scrivere nella memoria esterna.</string>\n  <string name=\"error_create_track_dir\">Impossibile creare la cartella della traccia %s.</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Verifica che la memoria esterna sia inserita e montata correttamente.</string>\n  <string name=\"error_voicerec_failed\">Registrazione vocale fallita</string>\n  <string name=\"error_userlayout_parsing\">Errore durante l\\'elaborazione del file XML del layout. Ripristinare il layout predefinito.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Permesso richiesto</string>\n  <string name=\"storage_permission_for_export_GPX\">Per esportare la traccia GPX dobbiamo scrivere sullo storage.</string>\n  <string name=\"storage_permission_for_display_track\">Per visualizzare correttamente la traccia abbiamo bisogno di accedere allo spazio di archiviazione.</string>\n  <string name=\"storage_permission_for_share_track\">Per condividere correttamente la traccia abbiamo bisogno di accedere allo storage.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Per caricare la traccia su OSM abbiamo bisogno di accedere allo storage.</string>\n  <string name=\"acccept\">Accettare</string>\n  <string name=\"gps_perms_required\">Impossibile continuare senza l\\'autorizzazione del GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracciato con OSMTracker per Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Attenzione: i valori HDOP non corrispondono agli HDOP restituiti dal dispositivo GPS. La precisione della posizione è approssimativa in metri e non dovrebbe essere tenuta in conto.</string>\n  <!--About screen-->\n  <string name=\"about\">Info</string>\n  <string name=\"about_text\">Per maggiori informazioni e segnalazioni di problemi visita la pagina principale del progetto:</string>\n  <string name=\"about_translate_text\">Aiuta a tradurre OSMTracker:</string>\n  <string name=\"about_debug_info\">Info debug</string>\n  <string name=\"about_export_db\">Esporta database</string>\n  <string name=\"about_exporting_db\">Esportazione database...</string>\n  <string name=\"about_export_db_result\">Risultato esportazione database: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker sta registrando</string>\n  <string name=\"notification_title\">OSMTracker sta registrando (#{0})</string>\n  <string name=\"notification_text\">Tocca qui per mostrare lo schermo principale</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Mostra traccia</string>\n  <string name=\"displaytrack_map\">Visualizza sfondo mappa</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Salva</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisione</string>\n  <string name=\"various_accuracy_with_sats\">Precisione {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">In attesa aggancio GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">In attesa della direzione...</string>\n  <string name=\"various_heading_unknown\">La direzione non può essere determinata</string>\n  <string name=\"various_export_finished\">Esportazione completata con successo</string>\n  <string name=\"various_waiting_position\">Posizione non disponibile</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Mostra traccia OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Aggiorna &amp; installa</string>\n  <string name=\"buttons_presets_context_menu_delete\">Elimina</string>\n  <string name=\"buttons_presets_updating_layout\">Aggiornamento...</string>\n  <string name=\"buttons_presets_successful_update\">Il layout è stato aggiornato con successo</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Il layout non è stato aggiornato, riprovare più tardi</string>\n  <string name=\"buttons_presets_delete_message\">Vuoi veramente eliminare il layout {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Sì</string>\n  <string name=\"buttons_presets_successful_delete\">Il layout è stato eliminato con successo</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">La directory delle icone è stata eliminata con successo</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Il file non aveva alcuna directory delle icone associata</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Impossibile eliminare il layout</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Errore: impossibile connettersi a Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Errore: impossibile connettersi al repository predefinito dei layout personalizzati</string>\n  <string name=\"available_layouts_connecting_message\">(connessione in corso...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Scarica</string>\n  <string name=\"available_layouts_not_available_language\">La tua lingua non è disponibile, selezionane una dalla lista</string>\n  <string name=\"available_layouts_language_dialog_title\">Lingue disponibili</string>\n  <string name=\"available_layouts_checking_language_dialog\">Controllo delle versioni della lingua locale</string>\n  <string name=\"available_layouts_downloading_dialog\">Scaricamento in corso...</string>\n  <string name=\"available_layouts_successful_download\">Il layout è stato scaricato con successo</string>\n  <string name=\"available_layouts_unsuccessful_download\">Non è stato possibile scaricare il layout, riprovare più tardi</string>\n  <string name=\"available_layouts_null_response_received\">Errore durante il trasferimento dei dati dal server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Predefinito</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Personalizzato</string>\n  <string name=\"github_repository_settings_username\">Utente Github:</string>\n  <string name=\"github_repository_settings_repository_name\">Nome repository:</string>\n  <string name=\"github_repository_settings_branch_name\">Nome branch:</string>\n  <string name=\"github_repository_settings_valid_server\">Repository Github valido</string>\n  <string name=\"github_repository_settings_invalid_server\">Repository Github non valido</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker per Android™ Introduzione</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Benvenuti su OSMTracker per Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Questa app è un software libero che rispetta la tua libertà!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Buona tracciatura 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker per Android userà la tua posizione GPS per registrare punti traccia e waypoint, anche mentre l’App è in background.\n\\nI tuoi dati non sono usati per supportare la pubblicità.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Registrazione vocale</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTrackerロゴ</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">拡大</string>\n  <string name=\"acc.zoom_out\">縮小</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">衛星信号の強弱表示</string>\n  <string name=\"acc.record_indicator\">記録の進捗状況表示</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">トラックの状況表示</string>\n  <string name=\"acc.upload_status\">OpenStreetMapへのアップロード進捗状況表示</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">設定</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPSの設定</string>\n  <string name=\"prefs_gps_os_settings_summary\">システムのGPS設定画面を表示</string>\n  <string name=\"prefs_check_gps_startup\">起動時にGPSをチェック</string>\n  <string name=\"prefs_check_gps_startup_summary\">起動時にGPSが無効ならば有効にするよう提案</string>\n  <string name=\"prefs_gps_ignore_clock\">GPS時刻を無視</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">タイムスタンプに、GPSの時計を参照せずにAndroidの時計を使用</string>\n  <string name=\"prefs_use_barometer\">気圧の記録 [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">切り替えにはトラックを再起動する必要があります</string>\n  <string name=\"prefs_gps_logging_interval\">GPS記録間隔</string>\n  <string name=\"prefs_gps_logging_interval_summary\">0を指定すると可能な限り短い間隔 (バッテリー消費量大)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">秒</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS ログ距離</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">トラックの点同士の最短距離をメートル単位で指定します。0を使用すると可能な限り短くなります。</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">メートル</string>\n  <string name=\"prefs_ui\">ユーザーインターフェース</string>\n  <string name=\"prefs_ui_picture_source\">デフォルトの画像ソース</string>\n  <string name=\"prefs_ui_picture_source_summary\">カメラで撮影しますか？またはギャラリーから選択しますか？</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>カメラ</item>\n    <item>ギャラリー</item>\n    <item>毎回確認</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">ボタンレイアウト</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">カスタムボタンレイアウトを選択してください（ドキュメント参照）</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">既定のレイアウト</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">デフォルト</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">ダウンロードしたレイアウト</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">レイアウトファイルをダウンロードしていません</string>\n  <string name=\"prefs_ui_available_layout\">利用できるレイアウト</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github リポジトリ設定</string>\n  <string name=\"prefs_ui_orientation\">画面の方向</string>\n  <string name=\"prefs_ui_orientation_summary\">ボタン画面の推奨方向</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>自動</item>\n    <item>縦長</item>\n    <item>横長</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">録音時間</string>\n  <string name=\"prefs_voicerec_duration_seconds\">秒</string>\n  <string name=\"prefs_theme\">スクリーン表示テーマ</string>\n  <string name=\"prefs_theme_summary\">変更を反映するにはアプリの再起動が必要です</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OSデフォルト</item>\n    <item>OSデフォルト (ダーク)</item>\n    <item>OSデフォルト (ライト)</item>\n    <item>ハイコントラスト</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">スクリーンを常時オン</string>\n  <string name=\"prefs_display_always_on_summary\">トラッキング中はスクリーンを常時オン、省電力機能を無効にする</string>\n  <string name=\"prefs_displaytrack_osm\">背景の地図</string>\n  <string name=\"prefs_displaytrack_osm_summary\">トラックの背景にOpenStreetMapの地図を表示する。データ通信接続が必要</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">常に背景にOpenStreetMapを表示しますか？データ通信接続が必要です</string>\n  <string name=\"prefs_output\">GPX設定</string>\n  <string name=\"prefs_storage_dir_hint\">次回から反映 (現在の分は適用外)</string>\n  <string name=\"prefs_output_one_dir_per_track\">トラック別のディレクトリ</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">各トラックと関連ファイルを個別のディレクトリに保存</string>\n  <string name=\"prefs_output_filename\">トラック名をファイル名にする</string>\n  <string name=\"prefs_output_filename_summary\">ファイル名のパターン</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>トラック名</item>\n    <item>トラック名_開始日時</item>\n    <item>開始日時_トラック名</item>\n    <item>開始日時</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">GPXファイルの補完</string>\n  <string name=\"prefs_output_accuracy_summary\">GPXファイル内のウェイポイントやコメントを補完する</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>なし</item>\n    <item>ウェイポイント名称</item>\n    <item>ウェイポイントコメント</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">HDOP近似値を使用する</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">GPXファイルのHDOP値に実際の位置からの誤差を出力する</string>\n  <string name=\"prefs_sound_enabled\">サウンド有効</string>\n  <string name=\"prefs_sound_enabled_summary\">録音の開始と終了時に音を鳴らす</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSMの認証情報をリセット</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">OSMの認証と許可を消去し、強制的にOSMTrackerが再び確認するようにする</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">再びトラックをアップロードするには、OSMTrackerの認証が必要です。続けますか？</string>\n  <string name=\"prefs_map_tile\">地図タイルプロバイダー</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>なし</item>\n    <item>コメント内</item>\n    <item>拡張データ内</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">コンパスの向きをエクスポート</string>\n  <string name=\"prefs_compass_heading_summary\">コンパスのデータをGPXファイルに出力するか、または出力方法を指定します</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">その他</string>\n  <string name=\"tag.restriction\">制限</string>\n  <string name=\"tag.car\">自動車</string>\n  <string name=\"tag.tourism\">観光</string>\n  <string name=\"tag.amenity\">施設</string>\n  <string name=\"tag.amenity_more\">施設 (+)</string>\n  <string name=\"tag.way\">道路</string>\n  <string name=\"tag.track\">道</string>\n  <string name=\"tag.landuse\">土地利用</string>\n  <string name=\"tag.misc_bus_stop\">バス停</string>\n  <string name=\"tag.misc_railway\">鉄道</string>\n  <string name=\"tag.misc_telephone\">電話</string>\n  <string name=\"tag.misc_post_box\">郵便ポスト</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">車両止</string>\n  <string name=\"tag.misc_toilets\">トイレ</string>\n  <string name=\"tag.misc_shelter\">吾妻屋</string>\n  <string name=\"tag.misc_surveillance\">監視カメラ</string>\n  <string name=\"tag.restriction_20\">20キロ制限</string>\n  <string name=\"tag.restriction_30\">30キロ制限</string>\n  <string name=\"tag.restriction_40\">40キロ制限</string>\n  <string name=\"tag.restriction_50\">50キロ制限</string>\n  <string name=\"tag.restriction_60\">60キロ制限</string>\n  <string name=\"tag.restriction_70\">70キロ制限</string>\n  <string name=\"tag.restriction_80\">80キロ制限</string>\n  <string name=\"tag.restriction_90\">90キロ制限</string>\n  <string name=\"tag.restriction_100\">100キロ制限</string>\n  <string name=\"tag.restriction_110\">110キロ制限</string>\n  <string name=\"tag.restriction_120\">120キロ制限</string>\n  <string name=\"tag.restriction_130\">130キロ制限</string>\n  <string name=\"tag.restriction_no_exit\">行止まり</string>\n  <string name=\"tag.restriction_traffic_light\">信号</string>\n  <string name=\"tag.restriction_one_way\">一方通行</string>\n  <string name=\"tag.car_fuel_station\">GS</string>\n  <string name=\"tag.car_parking\">駐車場</string>\n  <string name=\"tag.car_emergency_phone\">非常電話</string>\n  <string name=\"tag.car_turning_circle\">ロータリー</string>\n  <string name=\"tag.car_speed_camera\">オービス</string>\n  <string name=\"tag.tourism_view_point\">ビューポイント</string>\n  <string name=\"tag.tourism_information\">案内書</string>\n  <string name=\"tag.tourism_picnic\">休憩所</string>\n  <string name=\"tag.tourism_attraction\">アトラクション</string>\n  <string name=\"tag.tourism_theme_park\">テーマパーク</string>\n  <string name=\"tag.tourism_castle\">城</string>\n  <string name=\"tag.tourism_monument\">碑</string>\n  <string name=\"tag.tourism_museum\">博物館</string>\n  <string name=\"tag.tourism_cinema\">映画館</string>\n  <string name=\"tag.amenity_bench\">ベンチ</string>\n  <string name=\"tag.amenity_water\">水場</string>\n  <string name=\"tag.amenity_pharmacy\">薬局</string>\n  <string name=\"tag.amenity_shop\">店</string>\n  <string name=\"tag.amenity_marina\">港</string>\n  <string name=\"tag.amenity_sport\">スポーツ</string>\n  <string name=\"tag.amenity_taxi\">タクシー</string>\n  <string name=\"tag.amenity_doctors\">病院・医院</string>\n  <string name=\"tag.amenity_recycling\">ゴミ集積所</string>\n  <string name=\"tag.amenity_place_of_worship\">宗教施設</string>\n  <string name=\"tag.amenity_post_office\">郵便局</string>\n  <string name=\"tag.amenity_library\">図書館</string>\n  <string name=\"tag.amenitymore_school\">学校</string>\n  <string name=\"tag.amenitymore_police\">警察</string>\n  <string name=\"tag.amenitymore_fire_station\">消防</string>\n  <string name=\"tag.amenitymore_bank\">銀行</string>\n  <string name=\"tag.amenitymore_playground\">遊び場</string>\n  <string name=\"tag.amenitymore_pub\">飲み屋</string>\n  <string name=\"tag.amenitymore_hotel\">ホテル</string>\n  <string name=\"tag.amenitymore_motel\">モーテル</string>\n  <string name=\"tag.amenitymore_hostel\">民宿</string>\n  <string name=\"tag.amenitymore_restaurant\">レストラン</string>\n  <string name=\"tag.amenitymore_fastfood\">ファースト\nフード</string>\n  <string name=\"tag.amenitymore_camp_site\">キャンプ場</string>\n  <string name=\"tag.way_bridge\">橋</string>\n  <string name=\"tag.way_zebra_crossing\">横断歩道</string>\n  <string name=\"tag.way_motorway\">自動車専用道</string>\n  <string name=\"tag.way_trunk\">国道</string>\n  <string name=\"tag.way_primary\">主要地方道</string>\n  <string name=\"tag.way_secondary\">一般県道</string>\n  <string name=\"tag.way_tertiary\">市町村道</string>\n  <string name=\"tag.way_residential\">居住区域内道</string>\n  <string name=\"tag.way_service\">敷地内道</string>\n  <string name=\"tag.track_track\">山道</string>\n  <string name=\"tag.track_cycleway\">自転車道</string>\n  <string name=\"tag.track_footway\">歩道</string>\n  <string name=\"tag.track_bridleway\">乗馬道</string>\n  <string name=\"tag.track_steps\">階段</string>\n  <string name=\"tag.track_living_street\">生活道路</string>\n  <string name=\"tag.track_pedestrian\">歩道</string>\n  <string name=\"tag.track_grade1\">簡易舗装</string>\n  <string name=\"tag.track_grade2\">砂利道</string>\n  <string name=\"tag.track_grade3\">ダート</string>\n  <string name=\"tag.track_grade4\">悪路</string>\n  <string name=\"tag.track_grade5\">轍</string>\n  <string name=\"tag.landuse_farm\">農地</string>\n  <string name=\"tag.landuse_landfill\">埋立地</string>\n  <string name=\"tag.landuse_basin\">調整池</string>\n  <string name=\"tag.landuse_reservoir\">貯水池</string>\n  <string name=\"tag.landuse_forest\">森林</string>\n  <string name=\"tag.landuse_allotments\">市民菜園</string>\n  <string name=\"tag.landuse_cemetery\">霊園</string>\n  <string name=\"tag.landuse_recreation_ground\">レクリエーション\\n広場</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Windows Mobile 版 OSMTracker の後継で、あなたの旅の軌跡を記録し、ウェイポイントに印（音声録音や写真）をつけたり、GPX 形式でエクスポートして、後で JOSM などの Open Street Map 用ツールで編集したりできます。</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">トラックロガー</string>\n  <string name=\"tracklogger_waiting_gps\">GPS 位置が特定できるまでボタンは無効です...</string>\n  <string name=\"tracklogger_voicerec_title\">音声録音中</string>\n  <string name=\"tracklogger_voicerec_text\">録音 {0}秒</string>\n  <string name=\"tracklogger_voicerec_stop\">停止</string>\n  <string name=\"tracklogger_btnBack\">戻る</string>\n  <string name=\"tracklogger_tracked\">トラック: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS 無効</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS は無効です。有効にしますか？</string>\n  <string name=\"tracklogger_choose_gallery_camera\">ギャラリーとカメラのどちらですか？</string>\n  <string name=\"tracklogger_camera\">カメラで写真を撮る</string>\n  <string name=\"tracklogger_gallery\">ギャラリーから写真を選択する</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">ウェイポイントリスト</string>\n  <string name=\"wplist_latitude\">緯度: </string>\n  <string name=\"wplist_longitude\">経度: </string>\n  <string name=\"wplist_elevation\">標高: </string>\n  <string name=\"wplist_accuracy\">精度: </string>\n  <string name=\"wplist_compass\">コンパスの向き:</string>\n  <string name=\"wplist_compass_accuracy\">コンパスの精度:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">トラック管理</string>\n  <string name=\"trackmgr_tracklist\">トラックリスト:</string>\n  <string name=\"trackmgr_waypoints_count\">ウェイポイント: </string>\n  <string name=\"trackmgr_trackpoints_count\">トラックポイント: </string>\n  <string name=\"trackmgr_empty\">トラックデータがありません。</string>\n  <string name=\"trackmgr_newtrack_hint\">押すと新しいトラックを記録します。</string>\n  <string name=\"trackmgr_newtrack_error\">新しいトラックが作成できません: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">現在<b>トラック #{0}</b>を記録中\n続行するにはリストから選択して下さい。</string>\n  <string name=\"trackmgr_contextmenu_stop\">トラッキングの停止</string>\n  <string name=\"trackmgr_contextmenu_resume\">トラッキングの再開</string>\n  <string name=\"trackmgr_contextmenu_delete\">削除</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">OpenStreetMap へアップロード</string>\n  <string name=\"trackmgr_contextmenu_display\">表示</string>\n  <string name=\"trackmgr_contextmenu_details\">詳細</string>\n  <string name=\"trackmgr_contextmenu_title\">トラック #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">トラック #{0} を削除します</string>\n  <string name=\"trackmgr_deleteall_confirm\">全てのトラックを削除します。よろしいですか？</string>\n  <string name=\"trackmgr_exporting\">トラック #{0} をエクスポート中…</string>\n  <string name=\"trackmgr_exporting_prepare\">エクスポートの準備中です...</string>\n  <string name=\"trackmgr_export_error\">トラック {0} をエクスポートできません</string>\n  <string name=\"trackmgr_exportall_confirm\">全てのトラックをエクスポートします。時間がかかる可能性があります。よろしいですか？</string>\n  <string name=\"trackmgr_prepare_for_share_error\">トラック {0} を処理できませんでした</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">トラックの詳細</string>\n  <string name=\"trackdetail_startdate\">開始時刻:</string>\n  <string name=\"trackdetail_enddate\">終了時刻:</string>\n  <string name=\"trackdetail_startloc\">開始位置:</string>\n  <string name=\"trackdetail_endloc\">終了位置:</string>\n  <string name=\"trackdetail_exportdate\">エクスポート時刻:</string>\n  <string name=\"trackdetail_osm_upload_date\">OpenStreetMap アップロード時刻:</string>\n  <string name=\"trackdetail_btn_export\">GPX でエクスポート</string>\n  <string name=\"trackdetail_export_notyet\">（まだエクスポートしていません）</string>\n  <string name=\"trackdetail_osm_upload_notyet\">（まだアップロードしていません）</string>\n  <string name=\"trackdetail_export_display\">表示</string>\n  <string name=\"trackdetail_description\">説明</string>\n  <string name=\"trackdetail_tags\">タグ（カンマ区切り）</string>\n  <string name=\"trackdetail_description_mandatory\">説明は必須項目です</string>\n  <string name=\"osm_visibility_private\">非公開</string>\n  <string name=\"osm_visibility_public\">公開</string>\n  <string name=\"osm_visibility_trackable\">追跡可能</string>\n  <string name=\"osm_visibility_identifiable\">識別可能</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap へのアップロード</string>\n  <string name=\"osm_upload_ok\">保存してアップロード</string>\n  <string name=\"osm_upload_tmpfile_failed\">トラックの一時ファイルへのエクスポートに失敗しました</string>\n  <string name=\"osm_upload_oauth_failed\">OSM の認証に失敗しました</string>\n  <string name=\"osm_upload_sending\">トラック {0} を送信しています...</string>\n  <string name=\"osm_upload_waiting_response\">OpenStreetMap サーバーの応答を待っています...</string>\n  <string name=\"osm_upload_error\">トラックのアップロード中にエラーが発生しました</string>\n  <string name=\"osm_upload_bad_response\">OSM サーバーがエラーを返しました: ({0}) メッセージ {1}</string>\n  <string name=\"osm_upload_unauthorized\">認証エラーです。保存されている OpenStreetMap の認証データをクリアしますか？</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap へのアップロードに成功しました</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">音声録音</string>\n  <string name=\"gpsstatus_record_stillimage\">写真撮影</string>\n  <string name=\"gpsstatus_record_textnote\">テキスト</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">設定</string>\n  <string name=\"menu_waypointlist\">ウェイポイント</string>\n  <string name=\"menu_about\">概要</string>\n  <string name=\"menu_displaytrack\">トラック表示</string>\n  <string name=\"menu_stoptracking\">停止 &amp; 保存</string>\n  <string name=\"menu_newtrack\">新規トラック</string>\n  <string name=\"menu_deletetracks\">全てのトラックを削除</string>\n  <string name=\"menu_continue\">トラックを続行</string>\n  <string name=\"menu_stopcurrenttrack\">現在のトラックを停止</string>\n  <string name=\"menu_save\">保存</string>\n  <string name=\"menu_cancel\">取消</string>\n  <string name=\"menu_export\">GPX でエクスポート</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap へのアップロード</string>\n  <string name=\"menu_center_to_gps\">GPS 位置を中央にする</string>\n  <string name=\"menu_exportall\">全てを GPX でエクスポート</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">外部ストレージに書き込み出来ません。</string>\n  <string name=\"error_create_track_dir\">‘%s’ フォルダを作成できません。</string>\n  <string name=\"error_externalstorage_not_writable_hint\">外部ストレージが挿入され、正しくマウントされていることを確認してください。</string>\n  <string name=\"error_voicerec_failed\">音声録音に失敗しました</string>\n  <string name=\"error_userlayout_parsing\">XML レイアウトファイルが認識できません。デフォルトレイアウトに戻してください。</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">OSMTracker for Android™ で追跡</string>\n  <string name=\"gpx_hdop_approximation_cmt\">警告: HDOP 値が GPS 機器から返された HDOP 値と異なります。これは正しい位置からのメートル単位の距離です。</string>\n  <!--About screen-->\n  <string name=\"about\">バージョン情報</string>\n  <string name=\"about_text\">詳細情報,ドキュメント,議論については、ホームページを参照してください:</string>\n  <string name=\"about_translate_text\">OSMTracker の翻訳を支援してください。</string>\n  <string name=\"about_debug_info\">デバッグ情報</string>\n  <string name=\"about_export_db\">データベースをエクスポート</string>\n  <string name=\"about_exporting_db\">データベースをエクスポート中...</string>\n  <string name=\"about_export_db_result\">データベースのエクスポート結果: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker トラッキング中</string>\n  <string name=\"notification_title\">OSMTracker トラッキング中 (#{0})</string>\n  <string name=\"notification_text\">表示するにはスクリーンをタップしてください</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">トラックを表示</string>\n  <string name=\"displaytrack_map\">背景に地図を表示</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">保存</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">精度</string>\n  <string name=\"various_accuracy_with_sats\">精度 {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">GPS 測定待ち... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">方位測定待ち...</string>\n  <string name=\"various_heading_unknown\">方位が特定できませんでした</string>\n  <string name=\"various_export_finished\">エクスポート処理が完了しました</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap トラック表示</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">更新とインストール</string>\n  <string name=\"buttons_presets_context_menu_delete\">削除</string>\n  <string name=\"buttons_presets_updating_layout\">更新中...</string>\n  <string name=\"buttons_presets_successful_update\">レイアウトの更新に成功しました</string>\n  <string name=\"buttons_presets_unsuccessful_update\">レイアウトは更新されませんでした。後で試してください</string>\n  <string name=\"buttons_presets_delete_message\">本当に {0} レイアウトを削除しますか？</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">はい</string>\n  <string name=\"buttons_presets_successful_delete\">レイアウトが削除されました</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">アイコンディレクトリが削除されました</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">このファイルはアイコンディレクトリに関連付けられていません</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">レイアウトが削除できませんでした</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">エラー: インターネットに接続できません</string>\n  <string name=\"available_layouts_response_null_exception\">エラー: 既定のカスタムレイアウトリポジトリに接続できません</string>\n  <string name=\"available_layouts_connecting_message\">(接続中...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">ダウンロード</string>\n  <string name=\"available_layouts_not_available_language\">あなたの言語は利用できません。リストから選択してください</string>\n  <string name=\"available_layouts_language_dialog_title\">利用できる言語</string>\n  <string name=\"available_layouts_checking_language_dialog\">ローカル言語バージョンをチェック中</string>\n  <string name=\"available_layouts_downloading_dialog\">ダウンロード中...</string>\n  <string name=\"available_layouts_successful_download\">レイアウトのダウンロードに成功しました</string>\n  <string name=\"available_layouts_unsuccessful_download\">レイアウトがダウンロードできませんでした。後で試してください</string>\n  <string name=\"available_layouts_null_response_received\">サーバーからデータを受け取る際にエラーが発生しました</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">既定</string>\n  <string name=\"github_repository_settings_custom_checkbox\">カスタム</string>\n  <string name=\"github_repository_settings_username\">Github ユーザー名:</string>\n  <string name=\"github_repository_settings_repository_name\">リポジトリ名:</string>\n  <string name=\"github_repository_settings_branch_name\">ブランチ名</string>\n  <string name=\"github_repository_settings_valid_server\">Github リポジトリが有効です</string>\n  <string name=\"github_repository_settings_invalid_server\">Github リポジトリが無効です</string>\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker for Android™ の紹介</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">OSMTracker for Android™ へようこそ👋</string>\n  <string name=\"app_intro_slide1_description\">このアプリはフリーソフトであり、あなたの自由を尊重します。</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">楽しくトラッキングしましょう 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker for Android は、バックグラウンドで動作しているときでもトラックポイントやウェイポイントを記録するために GPS 位置情報を使用します。\n\\nあなたのデータは広告の目的では使用されません。</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">録音</string>\n  <string name=\"wpt_stillimage\">写真</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kn/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">‍‍‍‍‍ಸೆಟ್ಟಿಂಗ್ಸ್ ‍‍</string>\n  <string name=\"prefs_gps\">‍ಜಿಪಿಎಸ್</string>\n  <string name=\"prefs_gps_os_settings\">‍‍‍‍‍ಜಿಪಿಎಸ್ ಸೆಟ್ಟಿಂಗ್ಸ್ </string>\n  <string name=\"prefs_check_gps_startup\">‍</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">‍ಸೆಕೆಂಡ್ಸ್</string>\n  <string name=\"prefs_output\">‍ಜಿಪಿಎಕ್ಸ್ ಸೆಟ್ಟಿಂಗ್ಸ್</string>\n  <string name=\"prefs_sound_enabled\">‍‍ದ್ವನಿ ಸಕ್ರಿಯಗೊಳಿಸಿ</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kn/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">ದ್ವನಿ ನ‍ಮೂದನೆ</string>\n  <string name=\"wpt_stillimage\">‍ಫೋಟೊ</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker 로고</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">확대</string>\n  <string name=\"acc.zoom_out\">축소</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">위성 신호 강도 표시기</string>\n  <string name=\"acc.record_indicator\">기록 진행 표시기</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">추적 상태 표시기</string>\n  <string name=\"acc.upload_status\">OpenStreetMap 올리기 상태 표시기</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">설정</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS 설정</string>\n  <string name=\"prefs_gps_os_settings_summary\">시스템 GPS 설정 화면을 표시합니다</string>\n  <string name=\"prefs_check_gps_startup\">시작할 때 GPS 확인</string>\n  <string name=\"prefs_check_gps_startup_summary\">GPS가 시작할 때 비활성화되어 있는지 확인하고 활성화할 수 있도록 제공합니다</string>\n  <string name=\"prefs_gps_ignore_clock\">GPS 시계 무시</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">타임스탬프로 GPS 시계를 무시하고 Android 시계를 사용합니다</string>\n  <string name=\"prefs_gps_logging_interval\">GPS 기록 간격</string>\n  <string name=\"prefs_gps_logging_interval_summary\">가능한 짧게 하려면 0을 사용하세요 (배터리 수명에 영향을 줍니다)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">초</string>\n  <string name=\"prefs_ui\">사용자 인터페이스</string>\n  <string name=\"prefs_ui_picture_source\">기본 사진 자료</string>\n  <string name=\"prefs_ui_picture_source_summary\">사진을 카메라에서 찍거나 갤러리에서 가져오겠습니까?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>카메라</item>\n    <item>갤러리</item>\n    <item>항상 묻기</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">버튼 프리셋</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">사용자 지정 버튼 셋을 선택합니다 (설명문서를 보세요)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">기본 레이아웃</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">기본값</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">다운로드된 레이아웃</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">다운로드된 레이아웃 파일이 없습니다</string>\n  <string name=\"prefs_ui_available_layout\">사용 가능한 레이아웃</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github 저장소 설정</string>\n  <string name=\"prefs_ui_orientation\">화면 방향</string>\n  <string name=\"prefs_ui_orientation_summary\">버튼 화면의 선호하는 방향</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>자동</item>\n    <item>세로</item>\n    <item>가로</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">음성 녹음 지속 시간</string>\n  <string name=\"prefs_voicerec_duration_seconds\">초</string>\n  <string name=\"prefs_theme\">주 화면 그래픽 테마</string>\n  <string name=\"prefs_theme_summary\">바뀜을 적용하려면 애플리케이션을 다시 시작해야 합니다</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS 기본값</item>\n    <item>OS 기본값 (어둡게)</item>\n    <item>OS 기본값 (밝게)</item>\n    <item>높은 명암</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">화면 항상 켜기</string>\n  <string name=\"prefs_display_always_on_summary\">화면이 트래킹하는 동안 항상 유지됩니다. 배터리를 절약하려면 비활성화하세요</string>\n  <string name=\"prefs_displaytrack_osm\">배경 지도</string>\n  <string name=\"prefs_displaytrack_osm_summary\">트랙 아래에 OpenStreetMap 지도를 표시합니다. 데이터 연결이 필요합니다</string>\n  <string name=\"prefs_output\">GPX 설정</string>\n  <string name=\"prefs_storage_dir_hint\">다음 트랙에 반영됩니다 (현재 것은 안됨)</string>\n  <string name=\"prefs_output_one_dir_per_track\">트랙마다 디렉터리 하나</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">자신의 디렉터리에 각 트랙과 관련 파일을 저장합니다</string>\n  <string name=\"prefs_output_filename\">트랙 이름의 파일 이름</string>\n  <string name=\"prefs_output_filename_summary\">트랙에 이름이 있으면 파일 이름의 패턴</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>트랙 이름</item>\n    <item>이름, 시작 날짜와 시간</item>\n    <item>시작 날짜와 시간, 이름</item>\n    <item>시작 날짜와 시간</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">GPX 파일의 정확도</string>\n  <string name=\"prefs_output_accuracy_summary\">GPX 파일에, 웨이포인트 이름이나 웨이포인트 주석에 정확성 정보를 추가합니다</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>없음</item>\n    <item>웨이포인트 이름</item>\n    <item>웨이포인트 주석</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">HDOP 근사값 사용</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">GPX의 HDOP에 실제 위치에서의 근사값을 채웁니다</string>\n  <string name=\"prefs_sound_enabled\">소리 활성화</string>\n  <string name=\"prefs_sound_enabled_summary\">음성 녹음을 시작하고 끝낼 때 소리를 재생합니다</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSM 인증 재설정</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">OSM 자격 증명과 권한을 잊고 강제로 OSMTracker에 다시 묻도록 합니다</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">트랙을 올리려면 OSMTracker를 다시 인증해야 합니다. 지우겠습니까?</string>\n  <string name=\"prefs_map_tile\">지도 타일 제공자</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>없음</item>\n    <item>주석에서</item>\n    <item>확장에서</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">나침반 데이터가 GPX 파일로 내보내져야 한다면과 어떻게 내보내야 하는지 정의합니다</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">기타</string>\n  <string name=\"tag.restriction\">제한</string>\n  <string name=\"tag.car\">자동차</string>\n  <string name=\"tag.tourism\">관광</string>\n  <string name=\"tag.amenity\">시설</string>\n  <string name=\"tag.amenity_more\">시설 (+)</string>\n  <string name=\"tag.way\">길</string>\n  <string name=\"tag.track\">트랙</string>\n  <string name=\"tag.landuse\">토지 이용</string>\n  <string name=\"tag.misc_bus_stop\">버스 정류장</string>\n  <string name=\"tag.misc_railway\">철도</string>\n  <string name=\"tag.misc_telephone\">전화</string>\n  <string name=\"tag.misc_post_box\">우체통</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">볼라드</string>\n  <string name=\"tag.misc_toilets\">화장실</string>\n  <string name=\"tag.misc_shelter\">대피소</string>\n  <string name=\"tag.misc_surveillance\">감시 카메라</string>\n  <string name=\"tag.restriction_20\">최대 20</string>\n  <string name=\"tag.restriction_30\">최대 30</string>\n  <string name=\"tag.restriction_40\">최대 40</string>\n  <string name=\"tag.restriction_50\">최대 50</string>\n  <string name=\"tag.restriction_60\">최대 60</string>\n  <string name=\"tag.restriction_70\">최대 70</string>\n  <string name=\"tag.restriction_80\">최대 80</string>\n  <string name=\"tag.restriction_90\">최대 90</string>\n  <string name=\"tag.restriction_100\">최대 100</string>\n  <string name=\"tag.restriction_110\">최대 110</string>\n  <string name=\"tag.restriction_120\">최대 120</string>\n  <string name=\"tag.restriction_130\">최대 130</string>\n  <string name=\"tag.restriction_no_exit\">출구 없음</string>\n  <string name=\"tag.restriction_traffic_light\">신호등</string>\n  <string name=\"tag.restriction_one_way\">일방통행</string>\n  <string name=\"tag.car_fuel_station\">주유소</string>\n  <string name=\"tag.car_parking\">주차장</string>\n  <string name=\"tag.car_emergency_phone\">긴급 전화</string>\n  <string name=\"tag.car_turning_circle\">원 돌기</string>\n  <string name=\"tag.car_speed_camera\">과속 카메라</string>\n  <string name=\"tag.tourism_view_point\">경승지</string>\n  <string name=\"tag.tourism_information\">안내소</string>\n  <string name=\"tag.tourism_picnic\">피크닉장</string>\n  <string name=\"tag.tourism_attraction\">명소</string>\n  <string name=\"tag.tourism_theme_park\">테마 파크</string>\n  <string name=\"tag.tourism_castle\">성</string>\n  <string name=\"tag.tourism_monument\">기념물</string>\n  <string name=\"tag.tourism_museum\">박물관</string>\n  <string name=\"tag.tourism_cinema\">영화관</string>\n  <string name=\"tag.amenity_bench\">벤치</string>\n  <string name=\"tag.amenity_water\">물</string>\n  <string name=\"tag.amenity_pharmacy\">약국</string>\n  <string name=\"tag.amenity_shop\">상점</string>\n  <string name=\"tag.amenity_marina\">마리나</string>\n  <string name=\"tag.amenity_sport\">스포츠</string>\n  <string name=\"tag.amenity_taxi\">택시</string>\n  <string name=\"tag.amenity_doctors\">병원,\\n의원</string>\n  <string name=\"tag.amenity_recycling\">재활용</string>\n  <string name=\"tag.amenity_place_of_worship\">예배당</string>\n  <string name=\"tag.amenity_post_office\">우체국</string>\n  <string name=\"tag.amenity_library\">도서관</string>\n  <string name=\"tag.amenitymore_school\">학교</string>\n  <string name=\"tag.amenitymore_police\">경찰서</string>\n  <string name=\"tag.amenitymore_fire_station\">소방서</string>\n  <string name=\"tag.amenitymore_bank\">은행</string>\n  <string name=\"tag.amenitymore_playground\">놀이터</string>\n  <string name=\"tag.amenitymore_pub\">술집</string>\n  <string name=\"tag.amenitymore_hotel\">호텔</string>\n  <string name=\"tag.amenitymore_motel\">모텔</string>\n  <string name=\"tag.amenitymore_hostel\">호스텔</string>\n  <string name=\"tag.amenitymore_restaurant\">음식점</string>\n  <string name=\"tag.amenitymore_fastfood\">패스트\n푸드</string>\n  <string name=\"tag.amenitymore_camp_site\">캠프장</string>\n  <string name=\"tag.way_bridge\">다리</string>\n  <string name=\"tag.way_zebra_crossing\">횡단 보도</string>\n  <string name=\"tag.way_motorway\">고속도로</string>\n  <string name=\"tag.way_trunk\">간선</string>\n  <string name=\"tag.way_primary\">주요</string>\n  <string name=\"tag.way_secondary\">보조</string>\n  <string name=\"tag.way_tertiary\">3차</string>\n  <string name=\"tag.way_residential\">주거</string>\n  <string name=\"tag.way_service\">취부</string>\n  <string name=\"tag.track_track\">트랙</string>\n  <string name=\"tag.track_cycleway\">자전거로</string>\n  <string name=\"tag.track_footway\">보도</string>\n  <string name=\"tag.track_bridleway\">승마로</string>\n  <string name=\"tag.track_steps\">계단</string>\n  <string name=\"tag.track_living_street\">주택가</string>\n  <string name=\"tag.track_pedestrian\">보행로</string>\n  <string name=\"tag.track_grade1\">비탈 1</string>\n  <string name=\"tag.track_grade2\">비탈 2</string>\n  <string name=\"tag.track_grade3\">비탈 3</string>\n  <string name=\"tag.track_grade4\">비탈 4</string>\n  <string name=\"tag.track_grade5\">비탈 5</string>\n  <string name=\"tag.landuse_farm\">농장</string>\n  <string name=\"tag.landuse_landfill\">매립지</string>\n  <string name=\"tag.landuse_basin\">웅덩이</string>\n  <string name=\"tag.landuse_reservoir\">저수지</string>\n  <string name=\"tag.landuse_forest\">숲</string>\n  <string name=\"tag.landuse_allotments\">텃밭</string>\n  <string name=\"tag.landuse_cemetery\">묘지</string>\n  <string name=\"tag.landuse_recreation_ground\">놀이\\n공원</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">Android용 OSMTracker™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Windows Mobile의 OSMTracker에 영감을 받은, 이것은 여정을 추적할 수 있고 중요한 웨이 포인트(음성 녹음, 사진)을 표시할 수 있고, 나중에 JOSM과 같은 Open Street Map 도구를 사용하기 위해 GPX 형식으로 내보낼 수 있습니다.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">트랙 로거</string>\n  <string name=\"tracklogger_waiting_gps\">버튼을 활성화하기 위해 GPS 측정을 기다리는 중…</string>\n  <string name=\"tracklogger_voicerec_title\">음성 녹음</string>\n  <string name=\"tracklogger_voicerec_text\">{0}초 오디오 클립을 녹음 중입니다.</string>\n  <string name=\"tracklogger_voicerec_stop\">멈춤</string>\n  <string name=\"tracklogger_btnBack\">뒤로</string>\n  <string name=\"tracklogger_tracked\">트랙됨:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS 비활성화됨</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS가 비활성화되어 있습니다. 활성화하겠습니까?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">갤러리나 카메라?</string>\n  <string name=\"tracklogger_camera\">카메라로 사진 찍기</string>\n  <string name=\"tracklogger_gallery\">갤러리에서 사진 선택</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">웨이포인트 목록</string>\n  <string name=\"wplist_latitude\">위도:</string>\n  <string name=\"wplist_longitude\">경도:</string>\n  <string name=\"wplist_elevation\">고도:</string>\n  <string name=\"wplist_accuracy\">정확도:</string>\n  <string name=\"wplist_compass\">나침반 방위:</string>\n  <string name=\"wplist_compass_accuracy\">나침반 정확도:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">트랙 관리자</string>\n  <string name=\"trackmgr_tracklist\">트랙 목록:</string>\n  <string name=\"trackmgr_waypoints_count\">웨이포인트:</string>\n  <string name=\"trackmgr_trackpoints_count\">트랙포인트:</string>\n  <string name=\"trackmgr_empty\">어떠한 트랙도 없습니다.</string>\n  <string name=\"trackmgr_newtrack_error\">새 트랙을 만들 수 없습니다: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">현재  <b>트랙 #{0}</b>을 기록하고 있습니다\\n계속하려면 목록에서 그것을 선택하세요</string>\n  <string name=\"trackmgr_contextmenu_stop\">트래킹 멈춤</string>\n  <string name=\"trackmgr_contextmenu_resume\">트래킹 재개</string>\n  <string name=\"trackmgr_contextmenu_delete\">삭제</string>\n  <string name=\"trackmgr_contextmenu_export\">내보내기</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">OpenStreetMap으로 올리기</string>\n  <string name=\"trackmgr_contextmenu_display\">표시</string>\n  <string name=\"trackmgr_contextmenu_details\">자세한 정보</string>\n  <string name=\"trackmgr_contextmenu_title\">트랙 #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">트랙 #{0}이 삭제됩니다</string>\n  <string name=\"trackmgr_deleteall_confirm\">모든 트랙이 삭제됩니다. 삭제하겠습니까?</string>\n  <string name=\"trackmgr_exporting\">트랙 #{0}을 내보내는 중…</string>\n  <string name=\"trackmgr_exporting_prepare\">내보내기 준비 중…</string>\n  <string name=\"trackmgr_export_error\">트랙을 내보낼 수 없습니다: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">모든 트랙을 내보내며, 시간이 오래 걸릴 수 있습니다. 내보내겠습니까?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">트랙 자세한 정보</string>\n  <string name=\"trackdetail_startdate\">시작 시간:</string>\n  <string name=\"trackdetail_enddate\">끝 시간:</string>\n  <string name=\"trackdetail_startloc\">시작 지점:</string>\n  <string name=\"trackdetail_endloc\">끝 지점:</string>\n  <string name=\"trackdetail_exportdate\">내보냄:</string>\n  <string name=\"trackdetail_osm_upload_date\">OpenStreetMap에 올림:</string>\n  <string name=\"trackdetail_btn_export\">GPX로 내보내기</string>\n  <string name=\"trackdetail_export_notyet\">(아직 내보내지 않았습니다)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(아직 올리지 않았습니다)</string>\n  <string name=\"trackdetail_export_display\">표시</string>\n  <string name=\"trackdetail_description\">설명</string>\n  <string name=\"trackdetail_tags\">태그 (쉼표로 구분)</string>\n  <string name=\"trackdetail_description_mandatory\">설명을 입력해야 합니다</string>\n  <string name=\"osm_visibility_private\">비공개</string>\n  <string name=\"osm_visibility_public\">공개</string>\n  <string name=\"osm_visibility_trackable\">추적 가능</string>\n  <string name=\"osm_visibility_identifiable\">식별 가능</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap 올리기</string>\n  <string name=\"osm_upload_ok\">저장하고 올리기</string>\n  <string name=\"osm_upload_tmpfile_failed\">임시 파일로 트랙을 내보낼 수 없습니다</string>\n  <string name=\"osm_upload_oauth_failed\">OSM에 인증할 수 없습니다</string>\n  <string name=\"osm_upload_sending\">트랙 #{0}을 보내는 중…</string>\n  <string name=\"osm_upload_waiting_response\">OpenStreetMap 서버 응답을 기다리는 중…</string>\n  <string name=\"osm_upload_error\">트랙을 올리는 동안 오류</string>\n  <string name=\"osm_upload_bad_response\">OSM 서버가 오류를 반환했습니다: ({0}) 메시지 {1}</string>\n  <string name=\"osm_upload_unauthorized\">인증 오류입니다. 저장된 OpenStreetMap 자격 증명을 지우겠습니까?</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap 올리기 성공</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">음성 녹음</string>\n  <string name=\"gpsstatus_record_stillimage\">사진 찍기</string>\n  <string name=\"gpsstatus_record_textnote\">텍스트 기록</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">설정</string>\n  <string name=\"menu_waypointlist\">웨이포인트</string>\n  <string name=\"menu_about\">정보</string>\n  <string name=\"menu_displaytrack\">트랙 표시</string>\n  <string name=\"menu_stoptracking\">멈춤 &amp; 저장</string>\n  <string name=\"menu_newtrack\">새 트랙</string>\n  <string name=\"menu_deletetracks\">모든 트랙 삭제</string>\n  <string name=\"menu_continue\">트랙 계속</string>\n  <string name=\"menu_stopcurrenttrack\">현재 트랙 멈춤</string>\n  <string name=\"menu_save\">저장</string>\n  <string name=\"menu_cancel\">취소</string>\n  <string name=\"menu_export\">GPX로 내보내기</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap 올리기</string>\n  <string name=\"menu_center_to_gps\">GPS를 가운데로 하기</string>\n  <string name=\"menu_exportall\">GPX로 모두 내보내기</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">외부 저장소로 쓸 수 없습니다.</string>\n  <string name=\"error_create_track_dir\">%s 트랙 폴더를 만들 수 없습니다</string>\n  <string name=\"error_externalstorage_not_writable_hint\">외부 저장소가 올바르게 삽입되어 있고 마운트되어 있는지 확인하세요.</string>\n  <string name=\"error_voicerec_failed\">음성 녹음에 실패했습니다</string>\n  <string name=\"error_userlayout_parsing\">XML 레이아웃 파일을 구문 분석하는 동안 오류가 있습니다. 기본 레이아웃으로 되돌리세요.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Android용 OSMTracker™로 트랙됨</string>\n  <string name=\"gpx_hdop_approximation_cmt\">경고: HDOP 값이 GPS 장치가 반환한 HDOP 값이지 않습니다. 이들은 미터 단위의 위치 정확도에서 근사하고 있습니다.</string>\n  <!--About screen-->\n  <string name=\"about\">정보</string>\n  <string name=\"about_text\">자세한 정보와 설명문서, 문제 보고서에 대해서는 프로젝트 홈 페이지를 방문하세요:</string>\n  <string name=\"about_translate_text\">OSMTracker 번역을 도와주세요:</string>\n  <string name=\"about_debug_info\">디버그 정보</string>\n  <string name=\"about_export_db\">데이터베이스 내보내기</string>\n  <string name=\"about_exporting_db\">데이터베이스를 내보내는 중…</string>\n  <string name=\"about_export_db_result\">데이터베이스 내보내기 결과: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker가 트랙 중입니다</string>\n  <string name=\"notification_title\">OSMTracker가 트랙 중입니다 (#{0})</string>\n  <string name=\"notification_text\">주 화면을 표시하려면 여기를 탭하세요</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">트랙 표시</string>\n  <string name=\"displaytrack_map\">배경 지도 표시</string>\n  <string name=\"displaytrack_north\">북</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">저장</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">정확도</string>\n  <string name=\"various_accuracy_with_sats\">정확도 {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">GPS 측정을 기다리는 중… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">방위 측정을 기다리는 중…</string>\n  <string name=\"various_heading_unknown\">방위를 결정할 수 없습니다</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap 트랙 표시</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">업데이트 및 설치</string>\n  <string name=\"buttons_presets_context_menu_delete\">삭제</string>\n  <string name=\"buttons_presets_updating_layout\">업데이트 중…</string>\n  <string name=\"buttons_presets_successful_update\">레이아웃이 성공적으로 업데이트되었습니다</string>\n  <string name=\"buttons_presets_unsuccessful_update\">레이아웃이 업데이트되지 않았습니다, 나중에 다시 시도하세요</string>\n  <string name=\"buttons_presets_delete_message\">{0} 레이아웃을 삭제하겠습니까?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">예</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">아이콘 디렉터리가 성공적으로 삭제되었습니다</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">이 파일에는 어떠한 연관된 아이콘 디렉터리도 없었습니다</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">오류: 인터넷에 연결할 수 없습니다</string>\n  <string name=\"available_layouts_response_null_exception\">오류: 기본 사용자 지정 레이아웃 저장소에 연결할 수 없습니다</string>\n  <string name=\"available_layouts_connecting_message\">(연결 중…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">다운로드</string>\n  <string name=\"available_layouts_not_available_language\">목록에서 선택한 당신의 언어는 사용할 수 없습니다</string>\n  <string name=\"available_layouts_language_dialog_title\">사용 가능한 언어</string>\n  <string name=\"available_layouts_checking_language_dialog\">현지 언어 버전을 확인 중</string>\n  <string name=\"available_layouts_downloading_dialog\">다운로드 중…</string>\n  <string name=\"available_layouts_successful_download\">레이아웃이 성공적으로 다운로드되었습니다</string>\n  <string name=\"available_layouts_unsuccessful_download\">레이아웃이 다운로드될 수 없습니다, 나중에 다시 시도하세요</string>\n  <string name=\"available_layouts_null_response_received\">서버에서 데이터를 가져오는 중 오류</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">기본값</string>\n  <string name=\"github_repository_settings_custom_checkbox\">사용자 지정</string>\n  <string name=\"github_repository_settings_username\">Github 사용자 이름: </string>\n  <string name=\"github_repository_settings_repository_name\">저장소 이름: </string>\n  <string name=\"github_repository_settings_branch_name\">브랜치 이름: </string>\n  <string name=\"github_repository_settings_valid_server\">Github 저장소 유효</string>\n  <string name=\"github_repository_settings_invalid_server\">Github 저장소 무효</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">음성 녹음</string>\n  <string name=\"wpt_stillimage\">사진</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logotipas</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Priartinti</string>\n  <string name=\"acc.zoom_out\">Nutolinti</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Palydovo signalo stiprumo indikatorius</string>\n  <!--Track list-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Nustatymai</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS nustatymai</string>\n  <string name=\"prefs_ui_picture_source\">Numatytasis nuotraukų šaltinis</string>\n  <string name=\"prefs_voicerec_duration\">Balso įrašo trukmė</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS numatytoji</item>\n    <item>OS numatytoji (tamsi)</item>\n    <item>OS numatytoji  (šviesi)</item>\n    <item>Raiški</item>\n  </string-array>\n  <string name=\"prefs_output\">GPX nustatymai</string>\n  <string name=\"prefs_sound_enabled\">Įjungti garsą</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources/>\n"
  },
  {
    "path": "app/src/main/res/values-lt/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger_voicerec_title\">Balso įrašymas</string>\n  <string name=\"tracklogger_voicerec_stop\">Stabdyti</string>\n  <string name=\"tracklogger_btnBack\">Atgal</string>\n  <string name=\"tracklogger_gps_disabled\">GPS išjungtas</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS išjungtas.Ar norite įjungti?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerija ar kamera?</string>\n  <string name=\"tracklogger_camera\">Fotografuoti</string>\n  <string name=\"tracklogger_gallery\">Pasirinkti nuotrauką iš galerijos</string>\n  <!--Waypoint List-->\n  <string name=\"wplist_latitude\">Plat.</string>\n  <string name=\"wplist_longitude\">Ilg.</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr_contextmenu_delete\">Ištrinti</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksportuoti kaip GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Siųsti į OpenStreetMap</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail_osm_upload_date\">Nusiųsta į OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Eksportuoti kaip GPX</string>\n  <string name=\"trackdetail_description\">Aprašymas</string>\n  <string name=\"trackdetail_tags\">Žymos (atskirtos kableliu)</string>\n  <string name=\"trackdetail_description_mandatory\">Pridėkite aprašymą</string>\n  <string name=\"osm_visibility_public\">Viešas</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload_ok\">Išsaugoti ir išsiųsti</string>\n  <string name=\"osm_upload_oauth_failed\">Nepavyksta prisijungti prie OSM</string>\n  <string name=\"osm_upload_waiting_response\">Laukiama OpenStreetMap serverio atsakymo…</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Balso įrašymas</string>\n  <string name=\"gpsstatus_record_stillimage\">Fotografuoti</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Nustatymai</string>\n  <string name=\"menu_about\">Apie</string>\n  <string name=\"menu_save\">Išsaugoti</string>\n  <string name=\"menu_cancel\">Atšaukti</string>\n  <string name=\"menu_export\">Eksportuoti kaip GPX</string>\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <string name=\"about\">Apie</string>\n  <string name=\"about_translate_text\">Pagelbėkite išversti OSMTracker:</string>\n  <string name=\"about_export_db\">Exportuoti duomenų bazę</string>\n  <string name=\"about_exporting_db\">Duomenų bazė eksportuojama...</string>\n  <!--Notification-->\n  <!--Display track-->\n  <string name=\"displaytrack_north\">Š</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Išsaugoti</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_delete\">Ištrinti</string>\n  <string name=\"buttons_presets_updating_layout\">Atnaujinama...</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Taip</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Klaida: nepavyko prisijungti prie interneto</string>\n  <string name=\"available_layouts_connecting_message\">(Jungiamasi...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Atsisiųsti</string>\n  <string name=\"available_layouts_language_dialog_title\">Galimos kalbos</string>\n  <string name=\"available_layouts_downloading_dialog\">Siunčiamasi...</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_repository_name\">Repozitorijos pavadinimas:</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Balso įrašymas</string>\n  <string name=\"wpt_stillimage\">Nuotraukos</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Pietuvināt</string>\n  <string name=\"acc.zoom_out\">Attālināt</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satelīta signāla stipruma indikators</string>\n  <string name=\"acc.record_indicator\">Aktīvas ierakstīšanas indikators</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Takas statusa indikators</string>\n  <string name=\"acc.upload_status\">OpenStreetMap augšupielādes statusa indikators</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Uzsādijumi</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS uzstādijumi</string>\n  <string name=\"prefs_gps_os_settings_summary\">Parādīt sistēmas GPS uzstādijumus</string>\n  <string name=\"prefs_check_gps_startup\">Pārbaudīt GPS ieslēdzot lietotni</string>\n  <string name=\"prefs_check_gps_startup_summary\">Pārbaudīt vai GPS ir ieslēgts un piedāvāt to ieslēgt, kad lietotne ieslēdzas</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorēt GPS pulksteni</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorēt GPS pulksteni un izmantot Android pulksteņa laiku</string>\n  <string name=\"prefs_gps_logging_interval\">GPS ierakstu intervāls</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Izmantot 0, īsākajam iepējamajam (ietekmē baterijas patēriņu)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekundes</string>\n  <string name=\"prefs_ui\">Lietotāja saskarne</string>\n  <string name=\"prefs_ui_picture_source\">Noklusētais attēlu avots</string>\n  <string name=\"prefs_ui_picture_source_summary\">Ņemt attēlus no kameras vai galerijas?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galerija</item>\n    <item>Vienmēr jautāt</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Pogu iepriekšuzstādijumi</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Izvēlieties personalizētu pogu kopu (skatiet dokumentāciju)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">NOKLUSĒJUMA IZKĀRTOJUMS</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Noklusētais</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">LEJUPIELĀDĒTS IZKĀRTOJUMS</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Tev nav lejupielādētas izkārtojuma datnes</string>\n  <string name=\"prefs_ui_available_layout\">Pieejamie Izkārtojumi</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github Repositorijas Iestatījumi</string>\n  <string name=\"prefs_ui_orientation\">Orientācija</string>\n  <string name=\"prefs_ui_orientation_summary\">Vēlamā orientācija pogu izvēlnei</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automātiski</item>\n    <item>Portrets</item>\n    <item>Ainava</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Balss ieraksta garums</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekundes</string>\n  <string name=\"prefs_theme\">Galvenā ekrāna grafiskā tēma</string>\n  <string name=\"prefs_theme_summary\">Lietotni ir nepieciešams restartēt, lai pielietotu izmaiņas</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS noklusējums</item>\n    <item>OS noklusējums (tumšs)</item>\n    <item>OS noklusējums (gaišs)</item>\n    <item>Augsta kontrasta</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Turēt ekrānu ieslēgtu</string>\n  <string name=\"prefs_display_always_on_summary\">Ekrāns paliks ieslēgts sekošanas laikā. Atspējo lai taupītu enerģiju</string>\n  <string name=\"prefs_displaytrack_osm\">Fona karte</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Attēlot OpenStreetMap karti zem ierakstītā ceļa. Vajadzīgs datu savienojums</string>\n  <string name=\"prefs_output\">GPX iestatījumi</string>\n  <string name=\"prefs_storage_dir_hint\">Funkcionē nākamajam ierakstam (ne pašreizējam)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Viena mape priekš ieraksta</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Saglabāt katru ierakstu un tā datnes savā mapē</string>\n  <string name=\"prefs_output_filename\">Datņu nosaukums priekš ierakstiem</string>\n  <string name=\"prefs_output_filename_summary\">Šablons datnes nosaukumam, ja ierakstam ir nosaukums</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Ieraksta nosaukums</item>\n    <item>Nosaukums,  sākuma datums un laiks</item>\n    <item>Sākuma datums un laiks, nosaukums</item>\n    <item>Sākuma datums un laiks</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Precizitāte GPX datnē</string>\n  <string name=\"prefs_output_accuracy_summary\">Pievienot precizitātes informāciju GPX datnei, ar punkta nosaukumu vai punkta komentārā</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nekur</item>\n    <item>Ar punkta nosaukumu</item>\n    <item>Punkta komentārā</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Izmantot HDOP aptuvināšanu</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Aizpildīt HDOP GPX datnē ar aptuvenu informāciju no precizitātes</string>\n  <string name=\"prefs_sound_enabled\">Iespējot skaņu</string>\n  <string name=\"prefs_sound_enabled_summary\">Atskaņot skaņas, kas balss ieraksts sākas un beidzas</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Atiestatīt OSM autentifikāciju</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Aizmirst OSM konta informāciju un atļaujas, un pieprasīt OSMTracker tās pieprasīt atkārtoti</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Tev būs atkārtoti jāautorizē OSMTracker lai augšupielādētu ierakstus. Vai esi pārliecināts?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Nekur</item>\n    <item>komentārā</item>\n    <item>paplašinājumā</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Uzstāda vai un kā kompasa dati tiks eksportēti uz GPX datni</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Dažādi</string>\n  <string name=\"tag.restriction\">Ierobežojums</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Tūrisms</string>\n  <string name=\"tag.amenity\">Ērtība</string>\n  <string name=\"tag.amenity_more\">Ērtība (+)</string>\n  <string name=\"tag.way\">Ceļš</string>\n  <string name=\"tag.track\">Taka</string>\n  <string name=\"tag.landuse\">Zemes izmantojums</string>\n  <string name=\"tag.misc_bus_stop\">Autobusu pietura</string>\n  <string name=\"tag.misc_railway\">Dzelzceļš</string>\n  <string name=\"tag.misc_telephone\">Telefons</string>\n  <string name=\"tag.misc_post_box\">Pastkastīte</string>\n  <string name=\"tag.misc_atm\">Bankomāts</string>\n  <string name=\"tag.misc_bollard\">Stabs</string>\n  <string name=\"tag.misc_toilets\">Toaletes</string>\n  <string name=\"tag.misc_shelter\">Patversme</string>\n  <string name=\"tag.misc_surveillance\">Novērošana</string>\n  <string name=\"tag.restriction_20\">Maks 20</string>\n  <string name=\"tag.restriction_30\">Maks 30</string>\n  <string name=\"tag.restriction_40\">Maks 40</string>\n  <string name=\"tag.restriction_50\">Maks 50</string>\n  <string name=\"tag.restriction_60\">Maks 60</string>\n  <string name=\"tag.restriction_70\">Maks 70</string>\n  <string name=\"tag.restriction_80\">Maks 80</string>\n  <string name=\"tag.restriction_90\">Maks 90</string>\n  <string name=\"tag.restriction_100\">Maks 100</string>\n  <string name=\"tag.restriction_110\">Maks 110</string>\n  <string name=\"tag.restriction_120\">Maks 120</string>\n  <string name=\"tag.restriction_130\">Maks 130</string>\n  <string name=\"tag.restriction_no_exit\">Nav izejas</string>\n  <string name=\"tag.restriction_traffic_light\">Luksafors</string>\n  <string name=\"tag.restriction_one_way\">Viena virziena</string>\n  <string name=\"tag.car_fuel_station\">Degvielas uzpildes stacija</string>\n  <string name=\"tag.car_parking\">Autostāvieta</string>\n  <string name=\"tag.car_emergency_phone\">Ārkārtas telefons</string>\n  <string name=\"tag.car_turning_circle\">Apgriešanās aplis</string>\n  <string name=\"tag.car_speed_camera\">Fotoradars</string>\n  <string name=\"tag.tourism_view_point\">Skatupunkts</string>\n  <string name=\"tag.tourism_information\">Informācija</string>\n  <string name=\"tag.tourism_picnic\">Piknika vieta</string>\n  <string name=\"tag.tourism_attraction\">Atrakcija</string>\n  <string name=\"tag.tourism_theme_park\">Izklaides parks</string>\n  <string name=\"tag.tourism_castle\">Pils</string>\n  <string name=\"tag.tourism_monument\">Piemineklis</string>\n  <string name=\"tag.tourism_museum\">Muzejs</string>\n  <string name=\"tag.tourism_cinema\">Kinoteātris</string>\n  <string name=\"tag.amenity_bench\">Sols</string>\n  <string name=\"tag.amenity_water\">Ūdens</string>\n  <string name=\"tag.amenity_pharmacy\">Aptieka</string>\n  <string name=\"tag.amenity_shop\">Veikals</string>\n  <string name=\"tag.amenity_marina\">Piestātne</string>\n  <string name=\"tag.amenity_sport\">Sports</string>\n  <string name=\"tag.amenity_taxi\">Taksometrs</string>\n  <string name=\"tag.amenity_doctors\">Slimnīca, \\nĀrsti</string>\n  <string name=\"tag.amenity_recycling\">Šķirošana</string>\n  <string name=\"tag.amenity_place_of_worship\">Lūgšanas vieta</string>\n  <string name=\"tag.amenity_post_office\">Pasta nodaļa</string>\n  <string name=\"tag.amenity_library\">Bibliotēka</string>\n  <string name=\"tag.amenitymore_school\">Skola</string>\n  <string name=\"tag.amenitymore_police\">Policija</string>\n  <string name=\"tag.amenitymore_fire_station\">Ugunsdzēsības dienests</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Rotaļlaukums</string>\n  <string name=\"tag.amenitymore_pub\">Bārs</string>\n  <string name=\"tag.amenitymore_hotel\">Hotelis</string>\n  <string name=\"tag.amenitymore_motel\">Motelis</string>\n  <string name=\"tag.amenitymore_hostel\">Hostelis</string>\n  <string name=\"tag.amenitymore_restaurant\">Restorāns</string>\n  <string name=\"tag.amenitymore_fastfood\">Ātrā Ēstuve</string>\n  <string name=\"tag.amenitymore_camp_site\">Kempinga vieta</string>\n  <string name=\"tag.way_bridge\">Tilts</string>\n  <string name=\"tag.way_zebra_crossing\">Gājēju pāreja</string>\n  <string name=\"tag.way_motorway\">Autoceļš</string>\n  <string name=\"tag.way_trunk\">Maģistrāls</string>\n  <string name=\"tag.way_primary\">Galvenais</string>\n  <string name=\"tag.way_secondary\">Otršķiras</string>\n  <string name=\"tag.way_tertiary\">Terialiālais</string>\n  <string name=\"tag.way_residential\">Rezidentāls</string>\n  <string name=\"tag.way_service\">Servisa</string>\n  <string name=\"tag.track_track\">Taka</string>\n  <string name=\"tag.track_cycleway\">Veloceliņš</string>\n  <string name=\"tag.track_footway\">Gājēju ceļš</string>\n  <string name=\"tag.track_bridleway\">Zirgu ceļš</string>\n  <string name=\"tag.track_steps\">Trepes</string>\n  <string name=\"tag.track_living_street\">Dzīvojamā iela</string>\n  <string name=\"tag.track_pedestrian\">Gājēju</string>\n  <string name=\"tag.track_grade1\">1. Klase</string>\n  <string name=\"tag.track_grade2\">2. Klase</string>\n  <string name=\"tag.track_grade3\">3. Klase</string>\n  <string name=\"tag.track_grade4\">4. Klase</string>\n  <string name=\"tag.track_grade5\">5. Klase</string>\n  <string name=\"tag.landuse_farm\">Ferma</string>\n  <string name=\"tag.landuse_landfill\">Izgāztuve</string>\n  <string name=\"tag.landuse_basin\">Baseins</string>\n  <string name=\"tag.landuse_reservoir\">Rezervārs</string>\n  <string name=\"tag.landuse_forest\">Mežš</string>\n  <string name=\"tag.landuse_allotments\">Piešķīrumi</string>\n  <string name=\"tag.landuse_cemetery\">Kapi</string>\n  <string name=\"tag.landuse_recreation_ground\">Izklaides \\nvieta</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker priekš Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Iesvesmots no OSMTracker priekš Windows Mobile, tas ļauj jums ierakstīt savus ceļojumus, atzīmēt noteiktus intereses punktus (Balss ierakstos, attēlos), eksportēt tos GPX formātā, lai vēlāk varētu izmantot ar rīkiem kā JOSM priekš OpenStreetMap.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Ceļa ieraksts</string>\n  <string name=\"tracklogger_waiting_gps\">Gaida GPS precizitāti, lai iespējotu pogas...</string>\n  <string name=\"tracklogger_voicerec_title\">Balss Ieraksts</string>\n  <string name=\"tracklogger_voicerec_text\">Ieraksta {0}s audio klipu.</string>\n  <string name=\"tracklogger_voicerec_stop\">Beigt</string>\n  <string name=\"tracklogger_btnBack\">Atpakaļ</string>\n  <string name=\"tracklogger_tracked\">Ierakstīts:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS izslēgts</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS ir izslēgts. Vai tu gribi to ieslēgt?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Gallerija vai kamera?</string>\n  <string name=\"tracklogger_camera\">Uzņemt attēlu ar kameru</string>\n  <string name=\"tracklogger_gallery\">Izvēlēties attēlu no galerijas</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Intereses punktu saraksts</string>\n  <string name=\"wplist_latitude\">Plat:</string>\n  <string name=\"wplist_longitude\">Gar:</string>\n  <string name=\"wplist_elevation\">Augst:</string>\n  <string name=\"wplist_accuracy\">Preciz:</string>\n  <string name=\"wplist_compass\">Komp. virziens:</string>\n  <string name=\"wplist_compass_accuracy\">Komp. preciz.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Ierakstu pārvaldnieks</string>\n  <string name=\"trackmgr_tracklist\">Ierakstu saraksts:</string>\n  <string name=\"trackmgr_waypoints_count\">Intereses punkti:</string>\n  <string name=\"trackmgr_trackpoints_count\">Ceļa punkti:</string>\n  <string name=\"trackmgr_empty\">Tev nav neviena ieraksta.</string>\n  <string name=\"trackmgr_newtrack_error\">Nevarēja izveidot jaunu ierakstu: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Tu pašlaik ieraksti <b>ceļš #{0}</b>\\nIzvēlies to sarakstā, lai turpinātu</string>\n  <string name=\"trackmgr_contextmenu_stop\">Beigt ierakstu</string>\n  <string name=\"trackmgr_contextmenu_resume\">Turpināt ierakstu</string>\n  <string name=\"trackmgr_contextmenu_delete\">Dzēst</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksportēt</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Augšupielādēt uz OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Displejs</string>\n  <string name=\"trackmgr_contextmenu_details\">Detaļas</string>\n  <string name=\"trackmgr_contextmenu_title\">Ieraksts #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Ieraksts #{0} tiks dzēsts</string>\n  <string name=\"trackmgr_deleteall_confirm\">Visi ieraksti tiks dzēsti. Vai tu esi pārliecināts?</string>\n  <string name=\"trackmgr_exporting\">Eksportē ierakstu  #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Sagatavo eksportu...</string>\n  <string name=\"trackmgr_export_error\">Nevarēja eksportēt ieraktu: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Visi ieraksti tiks eksportēti, kas var aizņemt daudz laika. Vai tiešām eksportēt?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Ieraksta detaļas</string>\n  <string name=\"trackdetail_startdate\">Sākuma laiks:</string>\n  <string name=\"trackdetail_enddate\">Beigu laiks:</string>\n  <string name=\"trackdetail_startloc\">Sākums:</string>\n  <string name=\"trackdetail_endloc\">Beigas:</string>\n  <string name=\"trackdetail_exportdate\">Eksportēts:</string>\n  <string name=\"trackdetail_osm_upload_date\">Augšupielādēts uz OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Eksportēt uz GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Nav vēl eksportēts)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Nav vēl augšupielādēts)</string>\n  <string name=\"trackdetail_export_display\">Displejs</string>\n  <string name=\"trackdetail_description\">Apraksts</string>\n  <string name=\"trackdetail_tags\">Tagi (komatu atdalīti)</string>\n  <string name=\"trackdetail_description_mandatory\">Tev ir jāievada apraksts</string>\n  <string name=\"osm_visibility_private\">Privāts</string>\n  <string name=\"osm_visibility_public\">Publisks</string>\n  <string name=\"osm_visibility_trackable\">Izsekojams</string>\n  <string name=\"osm_visibility_identifiable\">Identificējams</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap augšupielāde</string>\n  <string name=\"osm_upload_ok\">Saglabāt un augšupielādēt</string>\n  <string name=\"osm_upload_tmpfile_failed\">Nevarēja eksportēt ierakstu uz īslaicīgu datni</string>\n  <string name=\"osm_upload_oauth_failed\">Nevarēja autentificēties ar OSM</string>\n  <string name=\"osm_upload_sending\">Sūta ierakstu #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Gaida OpenStreetMap servera atbildi...</string>\n  <string name=\"osm_upload_error\">Kļūda augšupielādējot ierakstu</string>\n  <string name=\"osm_upload_bad_response\">OSM serveris atgrieza kļūdu: ({0}) ziņojums {1}</string>\n  <string name=\"osm_upload_unauthorized\">Autorizācijas kļūda. Vai nodzēst saglabātos OpenStreetMap piekļuves datus? </string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap augšupielāde izdevās</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Ierakstīt balsi</string>\n  <string name=\"gpsstatus_record_stillimage\">Uzņemt attēlu</string>\n  <string name=\"gpsstatus_record_textnote\">Teksta piezīme</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">Iestatījumi</string>\n  <string name=\"menu_waypointlist\">Intereses punkti</string>\n  <string name=\"menu_about\">Par</string>\n  <string name=\"menu_displaytrack\">Parādīt ierakstu</string>\n  <string name=\"menu_stoptracking\">Apturēt &amp; saglabāt</string>\n  <string name=\"menu_newtrack\">Jauns ieraksts</string>\n  <string name=\"menu_deletetracks\">Dzēst visus ierakstus</string>\n  <string name=\"menu_continue\">Turpināt ierkstu</string>\n  <string name=\"menu_stopcurrenttrack\">Apturēt pašreizējo ierakstu</string>\n  <string name=\"menu_save\">Saglabāt</string>\n  <string name=\"menu_cancel\">Atcelt</string>\n  <string name=\"menu_export\">Eksportēt uz GPX</string>\n  <string name=\"menu_osm_upload\">Augšupielādēt uz OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centrēt pēc GPS</string>\n  <string name=\"menu_exportall\">Eksportēt visu uz GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Nevarēja rakstīt arējā krātuvē</string>\n  <string name=\"error_create_track_dir\">Nevarēja izveidot ieraksta mapi %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Lūdzu pārbaudi vai ārējā krāt. ir pareizi ievietota un piemontēta.</string>\n  <string name=\"error_voicerec_failed\">Balss ieraksts neizdevās </string>\n  <string name=\"error_userlayout_parsing\">Kļūda parsējot XML izkārtojuma datni. Lūdzu atiestati uz noklusējuma izkārtojumu.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Ierakstīts izmantojot OSMTracker priekš Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Uzmanību: HDOP vērtības nav HDOP, kas tiek saņemts no GPS ierīces. Tās tiek aptuveni aprēķinātas no precizitātes metros.</string>\n  <!--About screen-->\n  <string name=\"about\">Par</string>\n  <string name=\"about_text\">Lai saņemtu vairāk informācijas, dokumentus un kļūdu ziņošanu, lūdzu ejiet uz mājaslapu:</string>\n  <string name=\"about_translate_text\">Palīdzi tulkot OSMTracker:</string>\n  <string name=\"about_debug_info\">Atkļūdošanas info</string>\n  <string name=\"about_export_db\">Eksportēt datubāzi</string>\n  <string name=\"about_exporting_db\">Eksportē datubāzi...</string>\n  <string name=\"about_export_db_result\">Datubāzes eksporta rezultāts: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker veic ierakstu</string>\n  <string name=\"notification_title\">OSMTracker veic ierakstu (#{0})</string>\n  <string name=\"notification_text\">Nospied šeit lai parādītu galveno ekrānu</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Attēlot ierakstu</string>\n  <string name=\"displaytrack_map\">Attēlot fona karti</string>\n  <string name=\"displaytrack_north\">Z</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Saglabāt</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precizitāte</string>\n  <string name=\"various_accuracy_with_sats\">Precizitāte {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Gaida GPS fix... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Gaida virziena noteikšanu...</string>\n  <string name=\"various_heading_unknown\">Virzienu nevar noteikt</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap ieraksta displejs</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Atjaunot &amp; Instalēt</string>\n  <string name=\"buttons_presets_context_menu_delete\">Dzēst</string>\n  <string name=\"buttons_presets_updating_layout\">Atjauno....</string>\n  <string name=\"buttons_presets_successful_update\">Izkārtojums atjaunots veiksmīgi</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Izkārtojums netika atjaunots, lūdzu mēģini vēlreiz</string>\n  <string name=\"buttons_presets_delete_message\">Vai tiešām izdzēst {0} izkārtojumu?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Jā</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Ikonu mape tika izdzēst veiksmīgi</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Šai datnei nebija pievienotas ikonu mapes</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Kļūda: nevar savienoties ar internetu</string>\n  <string name=\"available_layouts_response_null_exception\">Kļūda: nevarēja savienoties ar noklusēto pielāgoto izkārtojumu repositoriju</string>\n  <string name=\"available_layouts_connecting_message\">(Savienojas....)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Lejupielādēt</string>\n  <string name=\"available_layouts_not_available_language\">Jūsu valoda nav pieejama, izvēlies vienu no saraksta</string>\n  <string name=\"available_layouts_language_dialog_title\">Pieejamās valodas</string>\n  <string name=\"available_layouts_checking_language_dialog\">Pārbauda vietājās valodas versijas</string>\n  <string name=\"available_layouts_downloading_dialog\">Lejupielādē...</string>\n  <string name=\"available_layouts_successful_download\">Izkārtojums tika sekmīgi lejupielādēts</string>\n  <string name=\"available_layouts_unsuccessful_download\">Izkārtojums netika lejupielādēts, lūdzu mēģiniet vēlāk</string>\n  <string name=\"available_layouts_null_response_received\">Kļūda saņemot datus no servera</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Noklusējuma</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Pielāgots</string>\n  <string name=\"github_repository_settings_username\">Github lietotājvārds:</string>\n  <string name=\"github_repository_settings_repository_name\">Repositorijas nosaukums:</string>\n  <string name=\"github_repository_settings_branch_name\">Atzara nosaukums:</string>\n  <string name=\"github_repository_settings_valid_server\">Github repositorija derīga</string>\n  <string name=\"github_repository_settings_invalid_server\">Github repositorija nederīga</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Balss ieraksts</string>\n  <string name=\"wpt_stillimage\">Attēls</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoom inn</string>\n  <string name=\"acc.zoom_out\">Zoom ut</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satellittsignalstyrke</string>\n  <string name=\"acc.record_indicator\">Indikator for at sporing pågår</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikator for sporingsstatus</string>\n  <string name=\"acc.upload_status\">Opplastingsindikator</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Innstillinger</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-innstillinger</string>\n  <string name=\"prefs_gps_os_settings_summary\">Gå til systeminnstillinger for GPS</string>\n  <string name=\"prefs_check_gps_startup\">Sjekk GPS ved oppstart</string>\n  <string name=\"prefs_check_gps_startup_summary\">Sjekk om GPS er slått av ved programstart, og gi ev. høve til å slå den på</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorer GPS-tid</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorer GPS-tid og bruk Android-klokka for tidsstempel</string>\n  <string name=\"prefs_gps_logging_interval\">Loggingsintervall</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Bruk 0 for kortest mulig mellomrom mellom sporpunkt (og kortest batteritid)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekund</string>\n  <string name=\"prefs_ui\">Brukergrensesnitt</string>\n  <string name=\"prefs_ui_picture_source\">Standard fotokilde</string>\n  <string name=\"prefs_ui_picture_source_summary\">Ta bilder med kamera eller hent fra album?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Album</item>\n    <item>Spør alltid</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Knappesett</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Velg et annet knappesett (se dokumentasjon)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standard</string>\n  <string name=\"prefs_ui_orientation\">Retning</string>\n  <string name=\"prefs_ui_orientation_summary\">Foretrukket retning for knappeskjermen</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisk</item>\n    <item>Portrett</item>\n    <item>Landskap</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Lengde på lydopptak</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekund</string>\n  <string name=\"prefs_theme\">Drakt for knappeskjermen</string>\n  <string name=\"prefs_theme_summary\">Programmet må startes om for å aktivere endring</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS-standard</item>\n    <item>OS-standard (mørk)</item>\n    <item>OS-standard (lys)</item>\n    <item>Høy kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Skjerm alltid på</string>\n  <string name=\"prefs_display_always_on_summary\">Skjermen blir stående på under sporing. Slå av for å spare batteri</string>\n  <string name=\"prefs_displaytrack_osm\">Bakgrunnskart</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Vis OpenStreetMap-kartet under sporet. Bruker datatilkobling</string>\n  <string name=\"prefs_output\">GPX-innstillinger</string>\n  <string name=\"prefs_storage_dir\">Mappe på ekstern lagringsenhet (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Blir aktivert for neste spor</string>\n  <string name=\"prefs_output_one_dir_per_track\">En mappe per spor</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Lagre hvert spor og tilhørende filer til deres egne mapper</string>\n  <string name=\"prefs_output_filename\">Filnavn på navngitte spor</string>\n  <string name=\"prefs_output_filename_summary\">Mønster på filnavnet dersom sporet har fått navn</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Spornavn</item>\n    <item>Spornavn, startdato og -tid</item>\n    <item>Startdato og -tid</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Presisjon i GPX-fil</string>\n  <string name=\"prefs_output_accuracy_summary\">Legg til presisjonsinformasjon i GPX-fila, sammen med sporpunktnavn eller i sporpunktkommentar</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Intet</item>\n    <item>Sammen med sporpunktnavn</item>\n    <item>I sporpunktkommentar</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Bruk HDOP-estimat</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Estimer HDOP frå presisjonsverdi</string>\n  <string name=\"prefs_sound_enabled\">Aktiver lyd</string>\n  <string name=\"prefs_sound_enabled_summary\">Spill av en lyd når lydopptak begynner og slutter</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Fjern OSM-nøkkel</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Fjern brukerinformasjon og tilgangsinformasjon for OSM og få OSMTracker til å spørre om tilgang på nytt</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Du kommer til å måtte gi OSMTracker tillatelse til å laste opp spor til OSM igjen. Er du sikker?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ingen</item>\n    <item>i kommentar</item>\n    <item>i utvidelsen</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Bestemmer om og hvordan kompassdata skal eksporteres til GPX-filen.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Diverse</string>\n  <string name=\"tag.restriction\">Restriksjon</string>\n  <string name=\"tag.car\">Bil</string>\n  <string name=\"tag.tourism\">Turisme</string>\n  <string name=\"tag.amenity\">Fasiliteter 1</string>\n  <string name=\"tag.amenity_more\">Fasiliteter 2</string>\n  <string name=\"tag.way\">Veg</string>\n  <string name=\"tag.track\">Grus-/\nskogsveg</string>\n  <string name=\"tag.landuse\">Bruk av land</string>\n  <string name=\"tag.misc_bus_stop\">Busstopp</string>\n  <string name=\"tag.misc_railway\">Jernbane</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Postboks</string>\n  <string name=\"tag.misc_atm\">Minibank</string>\n  <string name=\"tag.misc_bollard\">Sperrestolpe</string>\n  <string name=\"tag.misc_toilets\">Toalett</string>\n  <string name=\"tag.misc_shelter\">Leskur</string>\n  <string name=\"tag.misc_surveillance\">Overvåking</string>\n  <string name=\"tag.restriction_20\">Maks 20</string>\n  <string name=\"tag.restriction_30\">Maks 30</string>\n  <string name=\"tag.restriction_40\">Maks 40</string>\n  <string name=\"tag.restriction_50\">Maks 50</string>\n  <string name=\"tag.restriction_60\">Maks 60</string>\n  <string name=\"tag.restriction_70\">Maks 70</string>\n  <string name=\"tag.restriction_80\">Maks 80</string>\n  <string name=\"tag.restriction_90\">Maks 90</string>\n  <string name=\"tag.restriction_100\">Maks 100</string>\n  <string name=\"tag.restriction_110\">Maks 110</string>\n  <string name=\"tag.restriction_120\">Maks 120</string>\n  <string name=\"tag.restriction_130\">Maks 130</string>\n  <string name=\"tag.restriction_no_exit\">Ingen utgang</string>\n  <string name=\"tag.restriction_traffic_light\">Trafikklys</string>\n  <string name=\"tag.restriction_one_way\">Enveis</string>\n  <string name=\"tag.car_fuel_station\">Bensinstasjon</string>\n  <string name=\"tag.car_parking\">Parkering</string>\n  <string name=\"tag.car_emergency_phone\">Nødtelefon</string>\n  <string name=\"tag.car_turning_circle\">Snuplass</string>\n  <string name=\"tag.car_speed_camera\">Fotoboks</string>\n  <string name=\"tag.tourism_view_point\">Utsiktspunkt</string>\n  <string name=\"tag.tourism_information\">Informasjon</string>\n  <string name=\"tag.tourism_picnic\">Rasteplass</string>\n  <string name=\"tag.tourism_attraction\">Attraksjon</string>\n  <string name=\"tag.tourism_theme_park\">Fornøyelsespark</string>\n  <string name=\"tag.tourism_castle\">Slott</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Benk</string>\n  <string name=\"tag.amenity_water\">Vann</string>\n  <string name=\"tag.amenity_pharmacy\">Apotek</string>\n  <string name=\"tag.amenity_shop\">Butikk</string>\n  <string name=\"tag.amenity_marina\">Båthavn</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Drosje</string>\n  <string name=\"tag.amenity_doctors\">Sykehus,\\nLege</string>\n  <string name=\"tag.amenity_recycling\">Resirkulering</string>\n  <string name=\"tag.amenity_place_of_worship\">Gudshus</string>\n  <string name=\"tag.amenity_post_office\">Postkontor</string>\n  <string name=\"tag.amenity_library\">Bibliotek</string>\n  <string name=\"tag.amenitymore_school\">Skole</string>\n  <string name=\"tag.amenitymore_police\">Politi</string>\n  <string name=\"tag.amenitymore_fire_station\">Brannstasjon</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Lekeplass</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotell</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Vandrerhjem</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Hurtigmat</string>\n  <string name=\"tag.amenitymore_camp_site\">Campingplass</string>\n  <string name=\"tag.way_bridge\">Bru</string>\n  <string name=\"tag.way_zebra_crossing\">Fotgjengerovergang</string>\n  <string name=\"tag.way_motorway\">Motorveg</string>\n  <string name=\"tag.way_trunk\">Riksveg</string>\n  <string name=\"tag.way_primary\">Skilta\nfylkesveg</string>\n  <string name=\"tag.way_secondary\">Uskilta\nfylkesveg</string>\n  <string name=\"tag.way_tertiary\">Lokal\nveg</string>\n  <string name=\"tag.way_residential\">Boligområde-\nveg</string>\n  <string name=\"tag.way_service\">Adkomstveg</string>\n  <string name=\"tag.track_track\">Grusveg</string>\n  <string name=\"tag.track_cycleway\">Sykkelveg</string>\n  <string name=\"tag.track_footway\">Gangveg</string>\n  <string name=\"tag.track_bridleway\">Rideveg</string>\n  <string name=\"tag.track_steps\">Trapp</string>\n  <string name=\"tag.track_living_street\">Gågate</string>\n  <string name=\"tag.track_pedestrian\">Fotgjenger</string>\n  <string name=\"tag.track_grade1\">grade1</string>\n  <string name=\"tag.track_grade2\">grade2</string>\n  <string name=\"tag.track_grade3\">grade3</string>\n  <string name=\"tag.track_grade4\">grade4</string>\n  <string name=\"tag.track_grade5\">grade5</string>\n  <string name=\"tag.landuse_farm\">Gard</string>\n  <string name=\"tag.landuse_landfill\">Søppelfylling</string>\n  <string name=\"tag.landuse_basin\">Basseng</string>\n  <string name=\"tag.landuse_reservoir\">Vassmagasin</string>\n  <string name=\"tag.landuse_forest\">Skog</string>\n  <string name=\"tag.landuse_allotments\">Parsell</string>\n  <string name=\"tag.landuse_cemetery\">Gravplass</string>\n  <string name=\"tag.landuse_recreation_ground\">Rekreasjons\\nområde</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Med inspirasjon fra OSMTracker på Windows Mobile, lar den deg spore reisene dine og merke av viktige punkt ved hjelp av stemmeopptak eller fotografier. Sporet kan du så eksportere til GPX-formatet som så kan brukes med ulike OpenStreetMap-verktøy som for eksempel JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Sporlogger</string>\n  <string name=\"tracklogger_waiting_gps\">Venter på posisjon fra GPS for å aktivere knappene…</string>\n  <string name=\"tracklogger_voicerec_title\">Lydopptak</string>\n  <string name=\"tracklogger_voicerec_text\">Ta opp et {0} sekunds lydklipp.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stopp</string>\n  <string name=\"tracklogger_btnBack\">Tilbake</string>\n  <string name=\"tracklogger_tracked\">Sporet: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS er avslått</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS er avslått. Vil du slå den på?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Album eller kamera?</string>\n  <string name=\"tracklogger_camera\">Fotografer med kamera.</string>\n  <string name=\"tracklogger_gallery\">Velg bilde fra album</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Rutepunktliste</string>\n  <string name=\"wplist_latitude\">Breddegrad: </string>\n  <string name=\"wplist_longitude\">Lengdegrad: </string>\n  <string name=\"wplist_elevation\">Høyde.:</string>\n  <string name=\"wplist_accuracy\">Presisjon: </string>\n  <string name=\"wplist_compass\">Kompass kurs:</string>\n  <string name=\"wplist_compass_accuracy\">Kompass nøyaktighet.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Sporbehandler</string>\n  <string name=\"trackmgr_tracklist\">Sporliste:</string>\n  <string name=\"trackmgr_waypoints_count\">Rutepunkt: </string>\n  <string name=\"trackmgr_trackpoints_count\">Sporpunkt: </string>\n  <string name=\"trackmgr_empty\">Du har ingen spor.</string>\n  <string name=\"trackmgr_newtrack_error\">Kan ikke lage spor: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Du tar nå opp <b>spor #{0}</b>\\nVelg det i listen for å fortsette med sporingen|</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stopp sporing</string>\n  <string name=\"trackmgr_contextmenu_resume\">Fortsett sporing</string>\n  <string name=\"trackmgr_contextmenu_delete\">Slett</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksporter som GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Last opp til OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Vis</string>\n  <string name=\"trackmgr_contextmenu_details\">Detaljer</string>\n  <string name=\"trackmgr_contextmenu_title\">Spor nr. {0}</string>\n  <string name=\"trackmgr_delete_confirm\">Spor nr. {0} vil bli slettet</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alle spor vil bli slettet. Er du sikker?</string>\n  <string name=\"trackmgr_exporting\">Eksporterer spor nr. {0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Forbereder eksport... </string>\n  <string name=\"trackmgr_export_error\">Kan ikke eksportere spor nr.: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alle spor vil bli eksportert, noe som kan ta lang tid. Er du sikker?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Spordetaljer</string>\n  <string name=\"trackdetail_startdate\">Starttid:</string>\n  <string name=\"trackdetail_enddate\">Sluttid:</string>\n  <string name=\"trackdetail_startloc\">Begynnelse:</string>\n  <string name=\"trackdetail_endloc\">Slutt:</string>\n  <string name=\"trackdetail_exportdate\">Eksportert:</string>\n  <string name=\"trackdetail_osm_upload_date\">Lasta opp til OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Eksportert som GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ikke eksportert ennå)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ikke lastet opp ennå)</string>\n  <string name=\"trackdetail_export_display\">Vis</string>\n  <string name=\"trackdetail_description\">Skildring</string>\n  <string name=\"trackdetail_tags\">Tagger (kommaseparerte)</string>\n  <string name=\"trackdetail_description_mandatory\">Du må skrive en beskrivelse</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Offentlig</string>\n  <string name=\"osm_visibility_trackable\">Sporbar</string>\n  <string name=\"osm_visibility_identifiable\">Identifiserbar</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap opplasting</string>\n  <string name=\"osm_upload_ok\">Lagre og last opp</string>\n  <string name=\"osm_upload_tmpfile_failed\">Kunne ikke eksportere sporet til en midlertidig fil</string>\n  <string name=\"osm_upload_oauth_failed\">Fikk ikke tilgang til OSM</string>\n  <string name=\"osm_upload_sending\">Sender spor nr. {0}…</string>\n  <string name=\"osm_upload_waiting_response\">Venter på svar fra OpenStreetMap</string>\n  <string name=\"osm_upload_error\">Feil ved opplasting av spor</string>\n  <string name=\"osm_upload_bad_response\">OSM-tjeneren svarte med feil ({0}) med innholdet «{1}»</string>\n  <string name=\"osm_upload_unauthorized\">Tilgangsfeil. Vil du fjerne den lagrede OpenStreetMap-legitimasjonen?</string>\n  <string name=\"osm_upload_sucess\">Opplasting til OpenStreetMap var vellykket</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Stemmeopptak</string>\n  <string name=\"gpsstatus_record_stillimage\">Ta bilde</string>\n  <string name=\"gpsstatus_record_textnote\">Tekstnotat</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Innstillinger</string>\n  <string name=\"menu_waypointlist\">Rutepunkt</string>\n  <string name=\"menu_about\">Om</string>\n  <string name=\"menu_displaytrack\">Vis spor</string>\n  <string name=\"menu_stoptracking\">Stopp &amp; lagre</string>\n  <string name=\"menu_newtrack\">Nytt spor</string>\n  <string name=\"menu_deletetracks\">Slett alle spor</string>\n  <string name=\"menu_continue\">Fortsett spor</string>\n  <string name=\"menu_stopcurrenttrack\">Stopp gjeldende spor</string>\n  <string name=\"menu_save\">Lagre</string>\n  <string name=\"menu_cancel\">Avbryt</string>\n  <string name=\"menu_export\">Eksporter som GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap opplasting</string>\n  <string name=\"menu_center_to_gps\">Sentrer på GPS</string>\n  <string name=\"menu_exportall\">Eksporter alle som GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Kan ikke skrive til ekstern lagringsenhet.</string>\n  <string name=\"error_create_track_dir\">Kunne ikke lage spormappe %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Sjekk om ekstern lagringsenhet er skikkelig satt inn i mobilen og aktivert.</string>\n  <string name=\"error_voicerec_failed\">Stemmeopptak fungerte ikke</string>\n  <string name=\"error_userlayout_parsing\">Feil ved tolking av XML-layoutfil. Bruk heller standard layout.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Sporet med OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Advarsel: HDOP-verdier er ikke HDOP-verdiene fra selve GPS-enheten. De er estimerte fra posisjonspresisjon.</string>\n  <!--About screen-->\n  <string name=\"about\">Om</string>\n  <string name=\"about_text\">Besøk prosjekthjemmesiden for mer informasjon, dokumentasjon og feilrapportering:</string>\n  <string name=\"about_translate_text\">Hjelp med oversettelse av OSMTracker:</string>\n  <string name=\"about_debug_info\">Feilsøkingsinfo</string>\n  <string name=\"about_export_db\">Eksporter database</string>\n  <string name=\"about_exporting_db\">Eksporterer database...</string>\n  <string name=\"about_export_db_result\">Resultat av database eksport: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker sporer</string>\n  <string name=\"notification_title\">OSMTracker sporer (nr. {0})</string>\n  <string name=\"notification_text\">Trykk her for hovedskjermbilde</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Vis spor</string>\n  <string name=\"displaytrack_map\">Vis bakgrunnskart</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Lagre</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Presisjon</string>\n  <string name=\"various_accuracy_with_sats\">Nøyaktighet {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Venter på GPS-posisjon… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Venter på kurs...</string>\n  <string name=\"various_heading_unknown\">Kurs kan ikke fastslås.</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap sporvising</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Lydopptak</string>\n  <string name=\"wpt_stillimage\">Bilde</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Inzoomen</string>\n  <string name=\"acc.zoom_out\">Uitzoomen</string>\n  <string name=\"acc.zoom_center\">Centreren</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Aanduiding satelliet-signaalsterkte</string>\n  <string name=\"acc.record_indicator\">Aanduiding opname bezig</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Aanduiding trajectstatus</string>\n  <string name=\"acc.upload_status\">Aanduiding status OpenStreetMap-upload</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Instellingen</string>\n  <string name=\"prefs_gps\">Gps</string>\n  <string name=\"prefs_gps_os_settings\">Gps-instellingen</string>\n  <string name=\"prefs_gps_os_settings_summary\">Gps-instellingscherm van systeem weergeven</string>\n  <string name=\"prefs_check_gps_startup\">Gps controleren tijdens opstarten</string>\n  <string name=\"prefs_check_gps_startup_summary\">Controleren of gps uitgeschakeld is tijdens opstarten, en aanbieden om het in te schakelen</string>\n  <string name=\"prefs_gps_ignore_clock\">Gps-klok negeren</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Gps-klok negeren en de Android-klok gebruiken voor tijdstempels</string>\n  <string name=\"prefs_use_barometer\">Luchtdruk loggen [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">In-/uitschakelen vereist opnieuw starten van traject</string>\n  <string name=\"prefs_gps_logging_interval\">Gps-loginterval</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Gebruik 0 voor de kortst mogelijke (beïnvloedt levensduur van de batterij)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">seconden</string>\n  <string name=\"prefs_gps_logging_interval_empty\">Gps-loginterval mag niet leeg zijn</string>\n  <string name=\"prefs_gps_logging_min_distance\">Gps-logafstand</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Minimale afstand tussen trajectpunten in meter. Gebruik 0 voor de kortst mogelijke afstand</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">meter</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">Minimale afstand tussen trajectpunten in mag niet leeg zijn</string>\n  <string name=\"prefs_ui\">Gebruikersinterface</string>\n  <string name=\"prefs_ui_picture_source\">Standaard fotobron</string>\n  <string name=\"prefs_ui_picture_source_summary\">Foto\\'s nemen van camera of galerij?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Camera</item>\n    <item>Galerij</item>\n    <item>Altijd vragen</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Knop-voorinstellingen</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Een aangepaste set knoppen kiezen (zie documenten)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">STANDAARD LAY-OUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standaard</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">GEDOWNLOADE LAY-OUT</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">U heeft geen gedownloade lay-outbestanden</string>\n  <string name=\"prefs_ui_available_layout\">Beschikbare lay-outs</string>\n  <string name=\"prefs_ui_github_repository_settings\">Instellingen van Github-Repository</string>\n  <string name=\"prefs_ui_orientation\">Oriëntatie</string>\n  <string name=\"prefs_ui_orientation_summary\">Voorkeursoriëntatie van het knoppenscherm</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisch</item>\n    <item>Staand</item>\n    <item>Liggend</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duur stemopname</string>\n  <string name=\"prefs_voicerec_duration_seconds\">seconden</string>\n  <string name=\"prefs_theme\">Thema hoofdscherm</string>\n  <string name=\"prefs_theme_summary\">Herstarten van de toepassing vereist om wijziging toe te passen</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS standaard</item>\n    <item>OS standaard (donker)</item>\n    <item>OS standaard (licht)</item>\n    <item>Hoog contrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Scherm altijd aan</string>\n  <string name=\"prefs_display_always_on_summary\">Scherm zal aan blijven tijdens opnemen. Uitschakelen om batterij te besparen</string>\n  <string name=\"prefs_displaytrack_osm\">Achtergrondkaart</string>\n  <string name=\"prefs_displaytrack_osm_summary\">OpenStreetMap-kaart weergeven onder traject. Heeft een dataverbinding nodig</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Altijd OpenStreetMap-achtergrond weergeven? Vereist een dataverbinding.</string>\n  <string name=\"prefs_output\">GPX-instellingen</string>\n  <string name=\"prefs_storage_dir\">Opslagmap in documenten</string>\n  <string name=\"prefs_storage_dir_hint\">Effectief voor het volgende traject (niet het huidige)</string>\n  <string name=\"prefs_storage_dir_empty\">Opslagmap-waarde mag niet leeg zijn</string>\n  <string name=\"prefs_output_one_dir_per_track\">Een map per traject</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Elk traject en bijbehorende bestanden in eigen map opslaan</string>\n  <string name=\"prefs_output_filename\">Bestandsnaam voor trajecten</string>\n  <string name=\"prefs_output_filename_summary\">Patroon voor bestandsnaam als het traject een naam heeft</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Trajectnaam</item>\n    <item>Naam, begindatum en -tijd</item>\n    <item>Begindatum en -tijd, naam</item>\n    <item>Begindatum en -tijd</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Bestandsnaam-label</string>\n  <string name=\"prefs_output_filename_label_summary\">Dit label wordt toegevoegd aan het einde van de bestandsnaam</string>\n  <string name=\"prefs_output_accuracy\">Nauwkeurigheid in GPX-bestand</string>\n  <string name=\"prefs_output_accuracy_summary\">Nauwkeurigheid toevoegen in GPX-bestand, met naam van referentiepunt of in referentiepunt-opmerking</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Geen</item>\n    <item>Met naam van referentiepunt</item>\n    <item>In referentiepunt-opmerking</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">HDOP-benadering gebruiken</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">HDOP in GPX vullen met een benaderingswaarde van nauwkeurigheid</string>\n  <string name=\"prefs_sound_enabled\">Geluid inschakelen</string>\n  <string name=\"prefs_sound_enabled_summary\">Geluiden afspelen wanneer opnemen begint en eindigt</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSM-authenticatie herstellen</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">OSM-inloggegevens en toestemming vergeten en OSMTracker forceren om ze nogmaals op te vragen.</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">U zal OSMTracker terug moeten autoriseren om trajecten te uploaden. Bent u zeker?</string>\n  <string name=\"prefs_map_tile\">Kaartvak-provider</string>\n  <string name=\"prefs_map_tile_summary\">Selecteer de provider voor tegels om de kaart te renderen</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Geen</item>\n    <item>in opmerking</item>\n    <item>in extensie</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Kompasrichting exporteren</string>\n  <string name=\"prefs_compass_heading_summary\">Bepaalt of en hoe de kompas-data geëxporteerd moet worden naar het GPX-bestand</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Div</string>\n  <string name=\"tag.restriction\">Beperking</string>\n  <string name=\"tag.car\">Auto</string>\n  <string name=\"tag.tourism\">Toerisme</string>\n  <string name=\"tag.amenity\">Voorziening</string>\n  <string name=\"tag.amenity_more\">Voorziening (+)</string>\n  <string name=\"tag.way\">Weg</string>\n  <string name=\"tag.track\">Pad</string>\n  <string name=\"tag.landuse\">Landgebruik</string>\n  <string name=\"tag.misc_bus_stop\">Bushalte</string>\n  <string name=\"tag.misc_railway\">Spoorweg</string>\n  <string name=\"tag.misc_telephone\">Telefoon</string>\n  <string name=\"tag.misc_post_box\">Postbus</string>\n  <string name=\"tag.misc_atm\">Geldautomaat</string>\n  <string name=\"tag.misc_bollard\">Inzinkbare paal</string>\n  <string name=\"tag.misc_toilets\">Toiletten</string>\n  <string name=\"tag.misc_shelter\">Onderdak</string>\n  <string name=\"tag.misc_surveillance\">Bewaking</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Doodlopend</string>\n  <string name=\"tag.restriction_traffic_light\">Verkeerslicht</string>\n  <string name=\"tag.restriction_one_way\">Eén richting</string>\n  <string name=\"tag.car_fuel_station\">Tankstation</string>\n  <string name=\"tag.car_parking\">Parkeerplaats</string>\n  <string name=\"tag.car_emergency_phone\">Noodtelefoon</string>\n  <string name=\"tag.car_turning_circle\">Draaicirkel</string>\n  <string name=\"tag.car_speed_camera\">Flitspaal</string>\n  <string name=\"tag.tourism_view_point\">Uitkijkpunt</string>\n  <string name=\"tag.tourism_information\">Informatie</string>\n  <string name=\"tag.tourism_picnic\">Picknick-site</string>\n  <string name=\"tag.tourism_attraction\">Attractie</string>\n  <string name=\"tag.tourism_theme_park\">Pretpark</string>\n  <string name=\"tag.tourism_castle\">Kasteel</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Bioscoop</string>\n  <string name=\"tag.amenity_bench\">Bank</string>\n  <string name=\"tag.amenity_water\">Water</string>\n  <string name=\"tag.amenity_pharmacy\">Apotheek</string>\n  <string name=\"tag.amenity_shop\">Winkel</string>\n  <string name=\"tag.amenity_marina\">Jachthaven</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Hospitaal,\ndokters</string>\n  <string name=\"tag.amenity_recycling\">Recyclage</string>\n  <string name=\"tag.amenity_place_of_worship\">Plaats van\naanbidding</string>\n  <string name=\"tag.amenity_post_office\">Postkantoor</string>\n  <string name=\"tag.amenity_library\">Bibliotheek</string>\n  <string name=\"tag.amenitymore_school\">School</string>\n  <string name=\"tag.amenitymore_police\">Politie</string>\n  <string name=\"tag.amenitymore_fire_station\">Brandweer</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Speelterrein</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Herberg</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurant</string>\n  <string name=\"tag.amenitymore_fastfood\">Fastfood</string>\n  <string name=\"tag.amenitymore_camp_site\">Camping</string>\n  <string name=\"tag.way_bridge\">Brug</string>\n  <string name=\"tag.way_zebra_crossing\">Zebrapad</string>\n  <string name=\"tag.way_motorway\">Snelweg</string>\n  <string name=\"tag.way_trunk\">Rijksweg</string>\n  <string name=\"tag.way_primary\">Primair</string>\n  <string name=\"tag.way_secondary\">Secundair</string>\n  <string name=\"tag.way_tertiary\">Tertiair</string>\n  <string name=\"tag.way_residential\">Residentieel</string>\n  <string name=\"tag.way_service\">Dienst</string>\n  <string name=\"tag.track_track\">Spoor</string>\n  <string name=\"tag.track_cycleway\">Fietspad</string>\n  <string name=\"tag.track_footway\">Voetpad</string>\n  <string name=\"tag.track_bridleway\">Ruiterpad</string>\n  <string name=\"tag.track_steps\">Trappen</string>\n  <string name=\"tag.track_living_street\">Woonstraat</string>\n  <string name=\"tag.track_pedestrian\">Voetganger</string>\n  <string name=\"tag.track_grade1\">Klasse 1</string>\n  <string name=\"tag.track_grade2\">Klasse 2</string>\n  <string name=\"tag.track_grade3\">Klasse 3</string>\n  <string name=\"tag.track_grade4\">Klasse 4</string>\n  <string name=\"tag.track_grade5\">Klasse 5</string>\n  <string name=\"tag.landuse_farm\">Boerderij</string>\n  <string name=\"tag.landuse_landfill\">Stortplaats</string>\n  <string name=\"tag.landuse_basin\">Bekken</string>\n  <string name=\"tag.landuse_reservoir\">Reservoir</string>\n  <string name=\"tag.landuse_forest\">Bos</string>\n  <string name=\"tag.landuse_allotments\">Percelen</string>\n  <string name=\"tag.landuse_cemetery\">Begraafplaats</string>\n  <string name=\"tag.landuse_recreation_ground\">Ontspannings-\ngebied</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker voor Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Geïnspireerd door OSMTracker op Windows Mobile, stelt OSMTracker u in staat om uw routes op te nemen, belangrijke referentiepunten te markeren (geluidsopname, foto\\'s), en alles te exporteren in GPX-formaat voor later gebruik met Open Street Map tools zoals JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Traject-logger</string>\n  <string name=\"tracklogger_waiting_gps\">Wachten op gps-fix om knoppen in te schakelen...</string>\n  <string name=\"tracklogger_voicerec_title\">Stemopname</string>\n  <string name=\"tracklogger_voicerec_text\">{0}s audioclip opnemen</string>\n  <string name=\"tracklogger_voicerec_stop\">Stoppen</string>\n  <string name=\"tracklogger_btnBack\">Terug</string>\n  <string name=\"tracklogger_tracked\">Opgenomen:</string>\n  <string name=\"tracklogger_gps_disabled\">Gps uitgeschakeld</string>\n  <string name=\"tracklogger_gps_disabled_hint\">Gps is uitgeschakeld. Inschakelen?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerij of camera?</string>\n  <string name=\"tracklogger_camera\">Foto nemen met camera</string>\n  <string name=\"tracklogger_gallery\">Foto selecteren uit galerij</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lijst van referentiepunten</string>\n  <string name=\"wplist_latitude\">Breedte:</string>\n  <string name=\"wplist_longitude\">Lengte:</string>\n  <string name=\"wplist_elevation\">Hoogte:</string>\n  <string name=\"wplist_accuracy\">Nauwkeurigheid:</string>\n  <string name=\"wplist_compass\">Kompasrichting:</string>\n  <string name=\"wplist_compass_accuracy\">Kompasnauwkeurigheid:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Trajectbeheerder</string>\n  <string name=\"trackmgr_tracklist\">Traject-lijst:</string>\n  <string name=\"trackmgr_waypoints_count\">Referentiepunten:</string>\n  <string name=\"trackmgr_trackpoints_count\">Trajectpunten:</string>\n  <string name=\"trackmgr_empty\">U hebt geen trajecten.</string>\n  <string name=\"trackmgr_newtrack_hint\">Drukken om een traject op te nemen.</string>\n  <string name=\"trackmgr_newtrack_error\">Kan geen nieuw traject aanmaken: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">U bent nu <b>traject #{0}</b> aan het opnemen.\nSelecteer het in de lijst om door te gaan.</string>\n  <string name=\"trackmgr_contextmenu_stop\">Opnemen stoppen</string>\n  <string name=\"trackmgr_contextmenu_resume\">Opnemen hervatten</string>\n  <string name=\"trackmgr_contextmenu_delete\">Verwijderen</string>\n  <string name=\"trackmgr_contextmenu_export\">Exporteren</string>\n  <string name=\"trackmgr_contextmenu_share\">Delen</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Uploaden naar OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Uploaden naar GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Weergeven</string>\n  <string name=\"trackmgr_contextmenu_details\">Details</string>\n  <string name=\"trackmgr_contextmenu_title\">Traject #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Traject #{0} zal verwijderd worden</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alle trajecten zullen verwijderd worden. Bent u zeker?</string>\n  <string name=\"trackmgr_exporting\">Traject #{0} exporteren…</string>\n  <string name=\"trackmgr_exporting_prepare\">Exporteren voorbereiden...</string>\n  <string name=\"trackmgr_export_error\">Kan traject niet exporteren: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alle trajecten zullen geëxporteerd worden, wat lang kan duren. Bent u zeker?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Traject kon niet verwerkt worden: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Traject-details</string>\n  <string name=\"trackdetail_startdate\">Begintijd:</string>\n  <string name=\"trackdetail_enddate\">Eindtijd:</string>\n  <string name=\"trackdetail_startloc\">Begint op:</string>\n  <string name=\"trackdetail_endloc\">Eindigt op:</string>\n  <string name=\"trackdetail_exportdate\">Geëxporteerd:</string>\n  <string name=\"trackdetail_osm_upload_date\">Naar OpenStreetMap geüpload:</string>\n  <string name=\"trackdetail_btn_export\">Exporteren als GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Nog niet geëxporteerd)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Nog niet geüpload)</string>\n  <string name=\"trackdetail_export_display\">Weergeven</string>\n  <string name=\"trackdetail_name\">Naam</string>\n  <string name=\"trackdetail_description\">Beschrijving</string>\n  <string name=\"trackdetail_tags\">Tags (kommagescheiden)</string>\n  <string name=\"trackdetail_description_mandatory\">Een beschrijving is vereist</string>\n  <string name=\"osm_visibility_private\">Persoonlijk</string>\n  <string name=\"osm_visibility_public\">Publiek</string>\n  <string name=\"osm_visibility_trackable\">Te volgen</string>\n  <string name=\"osm_visibility_identifiable\">Te identificeren</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap upload</string>\n  <string name=\"osm_upload_ok\">Opslaan en uploaden</string>\n  <string name=\"osm_upload_tmpfile_failed\">Kan het traject niet exporteren naar een tijdelijk bestand</string>\n  <string name=\"osm_upload_oauth_failed\">Aanmelden bij OSM lukt niet</string>\n  <string name=\"osm_upload_sending\">Traject #{0} verzenden…</string>\n  <string name=\"osm_upload_waiting_response\">Wachten op antwoord van de OpenStreetMap-server...</string>\n  <string name=\"osm_upload_error\">Fout bij uploaden traject</string>\n  <string name=\"osm_upload_bad_response\">Foutmelding van de OSM server:  ({0}) bericht {1}</string>\n  <string name=\"osm_upload_unauthorized\">Foute naam/wachtwoord. Wilt u de opgeslagen OpenStreetMap aanmeldgegevens wissen?</string>\n  <string name=\"osm_upload_sucess\">Uploaden naar OpenStreetMap geslaagd</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Annuleren</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Stemopname</string>\n  <string name=\"gpsstatus_record_stillimage\">Foto nemen</string>\n  <string name=\"gpsstatus_record_textnote\">Notitie</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Referentiepunt naam/tekst</string>\n  <string name=\"waypoint_name_hint\">Naam van referentiepunt geven</string>\n  <string name=\"edit_waypoint_bt_preview\">Bestand open</string>\n  <string name=\"edit_waypoint_bt_save\">Opslaan</string>\n  <string name=\"edit_waypoint_bt_delete\">Verwijderen</string>\n  <string name=\"edit_waypoint_bt_cancel\">Annuleren</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Referentiepunt verwijderen</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Dit referentiepunt verwijderen?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Verwijderen</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Annuleren</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Opslaan</string>\n  <string name=\"edit_note_bt_delete\">Verwijderen</string>\n  <string name=\"edit_note_bt_cancel\">Annuleren</string>\n  <string name=\"delete_note_confirm_bt_ok\">Verwijderen</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Annuleren</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Instellingen</string>\n  <string name=\"menu_waypointlist\">Referentiepunten</string>\n  <string name=\"menu_about\">Over</string>\n  <string name=\"menu_displaytrack\">Traject weergeven</string>\n  <string name=\"menu_stoptracking\">Stoppen &amp; opslaan</string>\n  <string name=\"menu_newtrack\">Nieuw traject</string>\n  <string name=\"menu_deletetracks\">Alle trajecten verwijderen</string>\n  <string name=\"menu_continue\">Doorgaan met traject</string>\n  <string name=\"menu_stopcurrenttrack\">Huidig traject stoppen</string>\n  <string name=\"menu_save\">Opslaan</string>\n  <string name=\"menu_cancel\">Annuleren</string>\n  <string name=\"menu_export\">Exporteren als GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap-upload</string>\n  <string name=\"menu_center_to_gps\">Centreren op gps</string>\n  <string name=\"menu_exportall\">Alles als GPX exporteren</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Kan niet naar externe opslag schrijven.</string>\n  <string name=\"error_create_track_dir\">Kan de trajectmap %s niet aanmaken</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Controleer of de SD-kaart correct geplaatst is.</string>\n  <string name=\"error_voicerec_failed\">Stemopname mislukt</string>\n  <string name=\"error_userlayout_parsing\">Fout bij inlezen van XML lay-out-bestand. Gelieve terug te keren naar de standaard lay-out.</string>\n  <string name=\"error_gh_token_lenght\">Token moet 40 tekens bevatten</string>\n  <string name=\"error_gh_pr_creation\">Fout bij aanmaken van PR</string>\n  <!--messages-->\n  <string name=\"permission_required\">Toestemming vereist</string>\n  <string name=\"storage_permission_for_export_GPX\">Om het GPX-traject op te slaan, moeten we in de opslag schrijven.</string>\n  <string name=\"storage_permission_for_display_track\">Om het traject correct weer te geven hebben we toegang nodig tot de opslag.</string>\n  <string name=\"storage_permission_for_share_track\">Om het traject correct te delen hebben we toegang nodig tot de opslag.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Om het traject naar OSM te uploaden hebben we toegang nodig tot de opslag.</string>\n  <string name=\"acccept\">Accepteren</string>\n  <string name=\"gps_perms_required\">Kan niet verdergaan zonder gps-toestemming</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Opgenomen met OSMTracker voor Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Waarschuwing: HDOP-waarden worden niet uit de gps-apparaat gelezen. Ze worden benaderd op basis van de nauwkeurigheid van de locatie (in meter).</string>\n  <!--About screen-->\n  <string name=\"about\">Over</string>\n  <string name=\"about_text\">Bezoek de project-webpagina voor meer informatie, documenten en melden van problemen.</string>\n  <string name=\"about_translate_text\">Help OSMTracker vertalen:</string>\n  <string name=\"about_debug_info\">Debug-info</string>\n  <string name=\"about_export_db\">Database exporteren</string>\n  <string name=\"about_exporting_db\">Database exporteren...</string>\n  <string name=\"about_export_db_result\">Resultaat exporteren database: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker is aan het opnemen</string>\n  <string name=\"notification_title\">OSMTracker is (#{0}) aan het opnemen</string>\n  <string name=\"notification_text\">Aanraken om het hoofdscherm weer te geven</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Traject weergeven</string>\n  <string name=\"displaytrack_map\">Achtergrondkaart weergeven</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Opslaan</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Nauwkeurigheid</string>\n  <string name=\"various_accuracy_with_sats\">Nauwkeurigheid {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Wachten op gps-fix… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Wachten voor richting...</string>\n  <string name=\"various_heading_unknown\">Richting kan niet bepaald worden</string>\n  <string name=\"various_export_finished\">Exporteerproces met succes afgerond</string>\n  <string name=\"various_waiting_position\">Positie niet beschikbaar</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap trajectweergave</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Bijwerken en installeren</string>\n  <string name=\"buttons_presets_context_menu_delete\">Verwijderen</string>\n  <string name=\"buttons_presets_updating_layout\">Bijwerken...</string>\n  <string name=\"buttons_presets_successful_update\">Lay-out werd succesvol bijgewerkt</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Lay-out werd niet bijgewerkt, probeer het later opnieuw</string>\n  <string name=\"buttons_presets_delete_message\">Weet u zeker dat u lay-out {0} wilt verwijderen?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Ja</string>\n  <string name=\"buttons_presets_successful_delete\">De lay-out werd met succes verwijderd</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">De pictogram-map werd succesvol verwijderd</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Dit bestand was niet verbonden aan een pictogram-map</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">De lay-out kon niet verwijderd worden</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Fout: kon niet verbinden met het Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Fout: kon niet verbinden met de standaard aangepaste lay-outs repository</string>\n  <string name=\"available_layouts_connecting_message\">(Verbinden...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Downloaden</string>\n  <string name=\"available_layouts_not_available_language\">Uw taal is niet beschikbaar. Selecteer een uit de lijst</string>\n  <string name=\"available_layouts_language_dialog_title\">Beschikbare talen</string>\n  <string name=\"available_layouts_checking_language_dialog\">Lokale taalversies controleren</string>\n  <string name=\"available_layouts_downloading_dialog\">Downloaden...</string>\n  <string name=\"available_layouts_successful_download\">De lay-out werd succesvol gedownload</string>\n  <string name=\"available_layouts_unsuccessful_download\">De lay-out kan niet gedownload worden, probeer het later opnieuw</string>\n  <string name=\"available_layouts_null_response_received\">Fout bij ophalen van data van server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Standaard</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Aangepast</string>\n  <string name=\"github_repository_settings_username\">Github-gebruikersnaam:</string>\n  <string name=\"github_repository_settings_repository_name\">Repository-naam:</string>\n  <string name=\"github_repository_settings_branch_name\">Branch-naam</string>\n  <string name=\"github_repository_settings_valid_server\">Github-repository geldig</string>\n  <string name=\"github_repository_settings_invalid_server\">Github-repository ongeldig</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">met succes aangemaakt</string>\n  <string name=\"error_creating\">Fout bij aanmaken</string>\n  <string name=\"db_error\">Database-fout</string>\n  <string name=\"successfully_saved\">met succes opgeslagen</string>\n  <string name=\"saving_error\">Fout bij opslaan</string>\n  <string name=\"pr_status\">Status van pull request:</string>\n  <string name=\"repository_information_error\">Fout in repository-informatie</string>\n  <string name=\"successfully_uploaded\">Met succes geüpload</string>\n  <string name=\"error_uploading\">Fout bij uploaden</string>\n  <string name=\"gpx_file_read_error\">Fout bij lezen van GPX-bestand</string>\n  <string name=\"gpx_file_not_found\">GPX-bestand niet gevonden</string>\n  <string name=\"uploading_file\">Bestand uploaden:</string>\n  <string name=\"item_selected\">Item geselecteerd:</string>\n  <string name=\"github_repository_private\">Persoonlijk:</string>\n  <string name=\"github_creating_repository\">Repository aanmaken</string>\n  <string name=\"github_no_repository_name\">U moet een repository-naam opgeven</string>\n  <string name=\"error_field_required\">U moet een waarde opgeven voor dit veld</string>\n  <string name=\"retrieving_repositories\">Repository\\'s ophalen...</string>\n  <string name=\"error_retrieving_repositories\">Fout bij ophalen repository\\'s</string>\n  <string name=\"successfully_retrieved_repositories\">Repository\\'s met succes opgehaald</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Configureren</string>\n  <string name=\"github_token_placeholder\">GitHub-token:</string>\n  <string name=\"github_get_token_btn\">Token ophalen:</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Hoe een GitHub-token te verkrijgen:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Klik op de knop om de GitHub website te openen en een token aan te maken. Log in met uw GitHub account als dat nodig is.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Selecteer \\\"Tokens (klassiek)\\\" en klik op de knop \\\"Nieuw token genereren\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Wijs een beschrijvende naam toe aan uw token</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Selecteer een vervaldatum. We bevelen \\'geen vervaldatum\\' aan om te vermijden dat u deze stap moet herhalen.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Selecteer het bereik of de machtigingen die u voor dit token wilt toekennen (OSMTracker heeft alleen de repo-machtiging nodig).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Klik op de knop ‘Token genereren’.</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Kopieer het gegenereerde token en plak het in het veld \\\"GitHub-token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ U kunt leeg opslaan om uw aanmeldingsgegevens te verwijderen</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Commit-bericht:</string>\n  <string name=\"upload_to_github_create_fork\">Fork/nmaken</string>\n  <string name=\"upload_to_github_open_pull_request\">Pull request openen</string>\n  <string name=\"upload_to_github_select_repo\">Selecteer een repository</string>\n  <string name=\"upload_to_github_create_repository\">Repository aanmaken</string>\n  <string name=\"upload_to_github_commit_btn\">Commit</string>\n  <string name=\"upload_to_github_configure\">Configureren</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Gebruikersnaam van originele repository</string>\n  <string name=\"upload_to_github_forked_repo_name\">Naam van originele repository</string>\n  <string name=\"create\">Aanmaken</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Pull request titel</string>\n  <string name=\"upload_to_github_pr_description\">Pull request beschrijving</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Introductie voor OSMTracker voor Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Welkom bij OSMTracker voor Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Deze app is gratis software die uw vrijheid respecteert!</string>\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Veel plezier met tracken! 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker voor Android zal uw gps-locatie gebruiken om trajectpunten en referentiepunten op te nemen, zelfs wanneer de app op de achtergrond actief is.\n\\nUw gegevens worden niet gebruikt om reclame te ondersteunen.</string>\n  <string name=\"no_app_to_handle_file_type\">Er is geen toepassing gevonden om dit bestand te openen.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Stemopname</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nn/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zoom inn</string>\n  <string name=\"acc.zoom_out\">Zoom ut</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Satellittsignalstyrke</string>\n  <string name=\"acc.record_indicator\">Indikator for at sporing pågår</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikator for sporingsstatus</string>\n  <string name=\"acc.upload_status\">Indikator for opplasting til OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nn/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Innstillingar</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-innstillingar</string>\n  <string name=\"prefs_gps_os_settings_summary\">Gå til systeminnstillingar for GPS</string>\n  <string name=\"prefs_check_gps_startup\">Sjekk GPS ved oppstart</string>\n  <string name=\"prefs_check_gps_startup_summary\">Sjekk om GPS er slått av ved programstart, og gje ev. høve til å slå han på</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorer GPS-tid</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorer GPS-tid og bruk Android-klokka for tidsstempel</string>\n  <string name=\"prefs_gps_logging_interval\">Loggingsintervall</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Bruk 0 for kortast mogleg mellomrom mellom sporpunkt (og kortast batteritid)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekund</string>\n  <string name=\"prefs_ui\">Brukargrensesnitt</string>\n  <string name=\"prefs_ui_buttons_layout\">Knappesett</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Velj eit anna knappesett (sjå dokumentasjon)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standard</string>\n  <string name=\"prefs_ui_orientation\">Retning</string>\n  <string name=\"prefs_ui_orientation_summary\">Føretrekt retning for knappeskjermen</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisk</item>\n    <item>Portrett</item>\n    <item>Landskap</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Lengd på lydopptak</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekund</string>\n  <string name=\"prefs_theme\">Drakt for knappeskjermen</string>\n  <string name=\"prefs_theme_summary\">Programmet må startast om att for å aktivere endring</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS-standard</item>\n    <item>OS-standard (mørk)</item>\n    <item>OS-standard (lys)</item>\n    <item>Høg kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Skjerm alltid på</string>\n  <string name=\"prefs_display_always_on_summary\">Skjermen blir ståande på under sporing. Slå av for å spare batteri</string>\n  <string name=\"prefs_displaytrack_osm\">Bakgrunnskart</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Vis OpenStreetMap-kartet under sporet. Brukar datatilkobling</string>\n  <string name=\"prefs_output\">GPX-innstillingar</string>\n  <string name=\"prefs_storage_dir\">Mappe på ekstern lagringseining (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Blir aktivert for neste spor</string>\n  <string name=\"prefs_output_one_dir_per_track\">Ei mappe per spor</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Lagra kvart spor og tilhøyrande filer i deira eigne mapper</string>\n  <string name=\"prefs_output_filename\">Filnamn på namngjevne spor</string>\n  <string name=\"prefs_output_filename_summary\">Mønster for filnamnet dersom sporet har fått namn</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Spornamn</item>\n    <item>Spornamn, startdato og -tid</item>\n    <item>Startdato og -tid</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Presisjon i GPX-fil</string>\n  <string name=\"prefs_output_accuracy_summary\">Legg til presisjonsinformasjon i GPX-fila, saman med sporpunktnamn eller i sporpunktkommentar</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Inkje</item>\n    <item>Saman med sporpunktnamn</item>\n    <item>I sporpunktkommentar</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Bruk HDOP-estimat</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Estimer HDOP frå presisjonsverdi</string>\n  <string name=\"prefs_sound_enabled\">Aktiver lyd</string>\n  <string name=\"prefs_sound_enabled_summary\">Spel av ein lyd når lydopptak byrjar og sluttar</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Fjern OSM-nøkkel</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Fjern brukarinformasjon og tilgangsinformasjon for OSM og få OSMTracker til å spørje om tilgang på nytt</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Du kjem til å måtte gje OSMTracker løyve til å lasta opp spor til OSM att. Er du sikker?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nn/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Diverse</string>\n  <string name=\"tag.restriction\">Restriksjon</string>\n  <string name=\"tag.car\">Bil</string>\n  <string name=\"tag.tourism\">Turisme</string>\n  <string name=\"tag.amenity\">Fasilitetar 1</string>\n  <string name=\"tag.amenity_more\">Fasilitetar 2</string>\n  <string name=\"tag.way\">Veg</string>\n  <string name=\"tag.track\">Grus-/\nskogsveg</string>\n  <string name=\"tag.landuse\">Bruk av land</string>\n  <string name=\"tag.misc_bus_stop\">Busstopp</string>\n  <string name=\"tag.misc_railway\">Jernbane</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Postboks</string>\n  <string name=\"tag.misc_atm\">Minibank</string>\n  <string name=\"tag.misc_bollard\">Sperrestolpe</string>\n  <string name=\"tag.misc_toilets\">Toalett</string>\n  <string name=\"tag.misc_shelter\">Leskur</string>\n  <string name=\"tag.misc_surveillance\">Overvaking</string>\n  <string name=\"tag.restriction_20\">Maks 20</string>\n  <string name=\"tag.restriction_30\">Maks 30</string>\n  <string name=\"tag.restriction_40\">Maks 40</string>\n  <string name=\"tag.restriction_50\">Maks 50</string>\n  <string name=\"tag.restriction_60\">Maks 60</string>\n  <string name=\"tag.restriction_70\">Maks 70</string>\n  <string name=\"tag.restriction_80\">Maks 80</string>\n  <string name=\"tag.restriction_90\">Maks 90</string>\n  <string name=\"tag.restriction_100\">Maks 100</string>\n  <string name=\"tag.restriction_110\">Maks 110</string>\n  <string name=\"tag.restriction_120\">Maks 120</string>\n  <string name=\"tag.restriction_130\">Maks 130</string>\n  <string name=\"tag.restriction_no_exit\">Ingen utgang</string>\n  <string name=\"tag.restriction_one_way\">Einvegs</string>\n  <string name=\"tag.car_fuel_station\">Bensinstasjon</string>\n  <string name=\"tag.car_parking\">Parkering</string>\n  <string name=\"tag.car_emergency_phone\">Naudtelefon</string>\n  <string name=\"tag.car_turning_circle\">Snuplass</string>\n  <string name=\"tag.car_speed_camera\">Fotoboks</string>\n  <string name=\"tag.tourism_view_point\">Utsiktspunkt</string>\n  <string name=\"tag.tourism_information\">Informasjon</string>\n  <string name=\"tag.tourism_picnic\">Rasteplass</string>\n  <string name=\"tag.tourism_attraction\">Attraksjon</string>\n  <string name=\"tag.tourism_theme_park\">Opplevingspark</string>\n  <string name=\"tag.tourism_castle\">Slott</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Benk</string>\n  <string name=\"tag.amenity_water\">Vatn</string>\n  <string name=\"tag.amenity_pharmacy\">Apotek</string>\n  <string name=\"tag.amenity_shop\">Butikk</string>\n  <string name=\"tag.amenity_marina\">Båthamn</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Drosje</string>\n  <string name=\"tag.amenity_recycling\">Resirkulering</string>\n  <string name=\"tag.amenity_post_office\">Postkontor</string>\n  <string name=\"tag.amenity_library\">Bibliotek</string>\n  <string name=\"tag.amenitymore_school\">Skule</string>\n  <string name=\"tag.amenitymore_police\">Politi</string>\n  <string name=\"tag.amenitymore_fire_station\">Brannstasjon</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Leikeplass</string>\n  <string name=\"tag.amenitymore_hotel\">Hotell</string>\n  <string name=\"tag.amenitymore_motel\">Pensjonat</string>\n  <string name=\"tag.amenitymore_hostel\">Vandrarheim</string>\n  <string name=\"tag.amenitymore_fastfood\">Snøggmat</string>\n  <string name=\"tag.amenitymore_camp_site\">Camping</string>\n  <string name=\"tag.way_bridge\">Bru</string>\n  <string name=\"tag.way_zebra_crossing\">Fotgjengarovergang</string>\n  <string name=\"tag.way_motorway\">Motorveg</string>\n  <string name=\"tag.way_trunk\">Riksveg</string>\n  <string name=\"tag.way_primary\">Skilta\nfylkesveg</string>\n  <string name=\"tag.way_secondary\">Uskilta\nfylkesveg</string>\n  <string name=\"tag.way_tertiary\">Lokal\nveg</string>\n  <string name=\"tag.way_residential\">Bustadområde-\nveg</string>\n  <string name=\"tag.way_service\">Tilkomstveg</string>\n  <string name=\"tag.track_track\">Grusveg</string>\n  <string name=\"tag.track_cycleway\">Sykkelveg</string>\n  <string name=\"tag.track_footway\">Gangveg</string>\n  <string name=\"tag.track_bridleway\">Rideveg</string>\n  <string name=\"tag.track_steps\">Steg</string>\n  <string name=\"tag.track_living_street\">Gågate</string>\n  <string name=\"tag.track_pedestrian\">Fotgjengar</string>\n  <string name=\"tag.track_grade1\">grade1</string>\n  <string name=\"tag.track_grade2\">grade2</string>\n  <string name=\"tag.track_grade3\">grade3</string>\n  <string name=\"tag.track_grade4\">grade4</string>\n  <string name=\"tag.track_grade5\">grade5</string>\n  <string name=\"tag.landuse_farm\">Gard</string>\n  <string name=\"tag.landuse_landfill\">Bosfylling</string>\n  <string name=\"tag.landuse_basin\">Basseng</string>\n  <string name=\"tag.landuse_reservoir\">Vassmagasin</string>\n  <string name=\"tag.landuse_forest\">Skog</string>\n  <string name=\"tag.landuse_allotments\">Parsell</string>\n  <string name=\"tag.landuse_cemetery\">Gravplass</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nn/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Sporloggar</string>\n  <string name=\"tracklogger_waiting_gps\">Ventar på posisjon frå GPS for å aktivere knappane…</string>\n  <string name=\"tracklogger_voicerec_title\">Lydopptak</string>\n  <string name=\"tracklogger_voicerec_text\">Ta opp eit {0} sekunds lydklipp.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stopp</string>\n  <string name=\"tracklogger_btnBack\">Tilbake</string>\n  <string name=\"tracklogger_tracked\">Spora: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS er avslegen</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS er avslegen. Vil du slå han på?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Rutepunktliste</string>\n  <string name=\"wplist_latitude\">Breiddegrad: </string>\n  <string name=\"wplist_longitude\">Lengdegrad: </string>\n  <string name=\"wplist_elevation\">M.o.h.: </string>\n  <string name=\"wplist_accuracy\">Presisjon: </string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Sporhandsamar</string>\n  <string name=\"trackmgr_tracklist\">Sporliste:</string>\n  <string name=\"trackmgr_waypoints_count\">Rutepunkt: </string>\n  <string name=\"trackmgr_trackpoints_count\">Sporpunkt: </string>\n  <string name=\"trackmgr_empty\">Du har ingen spor.</string>\n  <string name=\"trackmgr_newtrack_error\">Kan ikkje lage spor: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stopp sporing</string>\n  <string name=\"trackmgr_contextmenu_resume\">Fortsett sporing</string>\n  <string name=\"trackmgr_contextmenu_delete\">Slett</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksporter som GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Last opp til OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Vis</string>\n  <string name=\"trackmgr_contextmenu_details\">Detaljar</string>\n  <string name=\"trackmgr_contextmenu_title\">Spor nr. {0}</string>\n  <string name=\"trackmgr_delete_confirm\">Spor nr. {0} vil bli sletta</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alle spor vil bli sletta. Er du sikker?</string>\n  <string name=\"trackmgr_exporting\">Eksporterar spor nr. {0}…</string>\n  <string name=\"trackmgr_export_error\">Kan ikkje eksportere spor nr: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alle spor vil bli eksportert, noko som kan ta lang tid. Er du sikker?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Spordetaljar</string>\n  <string name=\"trackdetail_startdate\">Starttid:</string>\n  <string name=\"trackdetail_enddate\">Sluttid:</string>\n  <string name=\"trackdetail_startloc\">Byrjing:</string>\n  <string name=\"trackdetail_endloc\">Slutt:</string>\n  <string name=\"trackdetail_exportdate\">Eksportert:</string>\n  <string name=\"trackdetail_osm_upload_date\">Lasta opp til OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Eksportert som GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ikkje eksportert enno)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ikkje lasta opp enno)</string>\n  <string name=\"trackdetail_export_display\">Vis</string>\n  <string name=\"trackdetail_description\">Skildring</string>\n  <string name=\"trackdetail_tags\">Taggar (kommaseparerte)</string>\n  <string name=\"trackdetail_description_mandatory\">Du må skriva inn ei skildring</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Offentleg</string>\n  <string name=\"osm_visibility_trackable\">Sporbar</string>\n  <string name=\"osm_visibility_identifiable\">Identifiserbar</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap opplasting</string>\n  <string name=\"osm_upload_ok\">Lagre og last opp</string>\n  <string name=\"osm_upload_tmpfile_failed\">Kunne ikkje eksportera sporet til ei mellombels fil</string>\n  <string name=\"osm_upload_oauth_failed\">Kunne ikkje få tilgang til OSM</string>\n  <string name=\"osm_upload_sending\">Sender spor #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Ventar på svar frå OpenStreetMap</string>\n  <string name=\"osm_upload_error\">Feil ved opplasting av spor</string>\n  <string name=\"osm_upload_bad_response\">OSM-tenaren svarte med feil ({0}) med innhaldet «{1}»</string>\n  <string name=\"osm_upload_unauthorized\">Tilgangsfeil. Vil du fjerna lagra OpenStreetMap-nøkkel?</string>\n  <string name=\"osm_upload_sucess\">Opplasting til OpenStreetMap var vellukka</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Stemmeopptak</string>\n  <string name=\"gpsstatus_record_textnote\">Tekstnotat</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Innstillingar</string>\n  <string name=\"menu_waypointlist\">Rutepunkt</string>\n  <string name=\"menu_about\">Om</string>\n  <string name=\"menu_displaytrack\">Vis spor</string>\n  <string name=\"menu_stoptracking\">Stopp &amp; lagra</string>\n  <string name=\"menu_newtrack\">Nytt spor</string>\n  <string name=\"menu_deletetracks\">Slett alle spor</string>\n  <string name=\"menu_continue\">Fortset spor</string>\n  <string name=\"menu_stopcurrenttrack\">Stopp gjeldande spor</string>\n  <string name=\"menu_save\">Lagra</string>\n  <string name=\"menu_cancel\">Avbryt</string>\n  <string name=\"menu_export\">Eksporter som GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap opplasting</string>\n  <string name=\"menu_center_to_gps\">Sentrer på GPS</string>\n  <string name=\"menu_exportall\">Eksporter alle som GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Kan ikkje skrive til ekstern lagringseining.</string>\n  <string name=\"error_create_track_dir\">Kunne ikkje lage spormappa %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Sjekk om ekstern lagringseining er skikkeleg sett i mobilen og aktivert.</string>\n  <string name=\"error_voicerec_failed\">Stemmeopptak fungerte ikkje</string>\n  <string name=\"error_userlayout_parsing\">Feil ved tolking av XML-layoutfil. Bruk heller standard layout.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Spora med OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Åtvaring: HDOP-verdiar er ikkje HDOP-verdiane frå sjølve GPS-eininga. Dei er estimerte frå posisjonspresisjon.</string>\n  <!--About screen-->\n  <string name=\"about\">Om</string>\n  <string name=\"about_text\">Besøk prosjektheimesida for meir informasjon, dokumentasjon og feilmelding:</string>\n  <string name=\"about_translate_text\">Hjelp med omsetjing av OSMTracker:</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker sporar</string>\n  <string name=\"notification_title\">OSMTracker sporar (nr. {0})</string>\n  <string name=\"notification_text\">Trykk her for hovudskjermbilete</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Vis spor</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Lagra</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Presisjon</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap sporvising</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nn/waypoints.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"wpt_voicerec\">Lydopptak</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Przybliż</string>\n  <string name=\"acc.zoom_out\">Oddal</string>\n  <string name=\"acc.zoom_center\">Centrum</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Wskaźnik siły sygnału satelit</string>\n  <string name=\"acc.record_indicator\">Wskaźnik postępu zapisywania</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Wskaźnik statusu trasy</string>\n  <string name=\"acc.upload_status\">Wskaźnik postępu wysyłania do OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Ustawienia</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Ustawienia GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Wyświetl ustawienia GPS w systemie</string>\n  <string name=\"prefs_check_gps_startup\">Sprawdź status GPS przy starcie</string>\n  <string name=\"prefs_check_gps_startup_summary\">Sprawdź przy starcie czy GPS jest aktywny, zaproponuj włączenie go</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignoruj zegar GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignoruj zegar GPS i korzystaj z zegara Androida dla znaczników czasu</string>\n  <string name=\"prefs_use_barometer\">Loguj ciśnienie barometryczne [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Przełączenie wymaga restartu śladu</string>\n  <string name=\"prefs_gps_logging_interval\">GPS interwał logowania</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Użyj 0 dla najkrótszego (wpływa na żywotność baterii)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekund</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS dystans logowania</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Min. dystans w metrach pomiędzy punktami śledzenia, użyj 0 dla najkrótszego możliwego</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metry/ów</string>\n  <string name=\"prefs_ui\">Interfejs użytkownika</string>\n  <string name=\"prefs_ui_picture_source\">Standardowe źródło zdjęć</string>\n  <string name=\"prefs_ui_picture_source_summary\">Wykonywać zdjęcia aparatem czy pobierać z galerii?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Aparat</item>\n    <item>Galeria</item>\n    <item>Zawsze pytaj</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Układ przycisków</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Wybierz własny układ przycisków (zobacz dokumentację)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">UKŁAD DOMYŚLNY</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Domyślnie</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">POBRANY UKŁAD</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Nie masz pobranych plików układu</string>\n  <string name=\"prefs_ui_available_layout\">Dostępne układy</string>\n  <string name=\"prefs_ui_github_repository_settings\">Ustawienia repozytorium Github</string>\n  <string name=\"prefs_ui_orientation\">Orientacja</string>\n  <string name=\"prefs_ui_orientation_summary\">Preferowana orientacja przycisków na ekranie</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatyczny</item>\n    <item>Pionowy</item>\n    <item>Poziomy</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Długość nagrania audio</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekund</string>\n  <string name=\"prefs_theme\">Temat graficzny ekranu głównego</string>\n  <string name=\"prefs_theme_summary\">Wymaga ponownego uruchomienia aplikacji</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Domyślny systemowy</item>\n    <item>Domyślny ciemny</item>\n    <item>Domyślny jasny</item>\n    <item>Wysoki kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Ekran zawsze włączony</string>\n  <string name=\"prefs_display_always_on_summary\">Ekran pozostanie włączony podczas śledzenia. Wyłącz by oszczędzić baterię.</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa tła</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Włącza mapy OSM w podglądzie śladu. Wymaga aktywnego połączenia z Internetem.</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Wyświetlać zawsze tło OpenStreetMap? Wymaga połączenia z internetem</string>\n  <string name=\"prefs_output\">Ustawienia GPX</string>\n  <string name=\"prefs_storage_dir\">Katalog przechowywania w dokumentach</string>\n  <string name=\"prefs_storage_dir_hint\">Zmiana zadziała przy następnym śladzie</string>\n  <string name=\"prefs_output_one_dir_per_track\">Osobny katalog dla każdego śladu</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Zapisuje każdy ślad wraz z powiązanymi plikami w oddzielnych folderach</string>\n  <string name=\"prefs_output_filename\">Nazwy plików śladów</string>\n  <string name=\"prefs_output_filename_summary\">Schemat dla nazwanych śladów</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nazwa śladu</item>\n    <item>Nazwa, data i czas startu</item>\n    <item>Data i czas startu, nazwa</item>\n    <item>Data i czas startu</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Etykieta nazwy pliku</string>\n  <string name=\"prefs_output_filename_label_summary\">Ta etykieta zostanie dodana na końcu nazwy pliku</string>\n  <string name=\"prefs_output_accuracy\">Precyzja w pliku GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Dodaje informacje o dokładności w pliku GPX, w nazwie punktu lub w komantarzu punktu</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Brak</item>\n    <item>W nazwie punktu</item>\n    <item>W komentarzu punktu</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Użyj przybliżenia HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Używa przybliżonych wartości dokładności</string>\n  <string name=\"prefs_sound_enabled\">Włącz dźwięk</string>\n  <string name=\"prefs_sound_enabled_summary\">Odtwarza dźwięk przed nagrywaniem głosu</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Reset uwierzytelnień OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Usuń uwierzytelnienia i zezwolenia dla OSM, OSMTracker zapyta o nie ponownie.</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Będziesz musiał ponownie autoryzować OSMTracker by wysyłać ślady. Czy jesteś pewien?</string>\n  <string name=\"prefs_map_tile\">Dostawca kafelków mapy</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Brak</item>\n    <item>w komentarzu</item>\n    <item>w rozrzeszeniu</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Eksportuj kierunek z kompasu</string>\n  <string name=\"prefs_compass_heading_summary\">Określa w jaki sposób dane kompasu powinny być zapisywane w pliku GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Różne</string>\n  <string name=\"tag.restriction\">Ograniczenia</string>\n  <string name=\"tag.car\">Samochód</string>\n  <string name=\"tag.tourism\">Turystyka</string>\n  <string name=\"tag.amenity\">Udogodnienia</string>\n  <string name=\"tag.amenity_more\">Udogodnienia (+)</string>\n  <string name=\"tag.way\">Droga</string>\n  <string name=\"tag.track\">Szlak</string>\n  <string name=\"tag.landuse\">Użyt.Terenu</string>\n  <string name=\"tag.misc_bus_stop\">Przystanek Bus</string>\n  <string name=\"tag.misc_railway\">Kolej</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Pocztowa skrzy</string>\n  <string name=\"tag.misc_atm\">Bankomat</string>\n  <string name=\"tag.misc_bollard\">Słupek</string>\n  <string name=\"tag.misc_toilets\">Toalety</string>\n  <string name=\"tag.misc_shelter\">Schronienie</string>\n  <string name=\"tag.misc_surveillance\">Inwigilacja</string>\n  <string name=\"tag.restriction_20\">Maks. 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Maks. 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Maks. 60</string>\n  <string name=\"tag.restriction_70\">Maks. 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Maks. 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Maks. 130</string>\n  <string name=\"tag.restriction_no_exit\">Ślepa</string>\n  <string name=\"tag.restriction_traffic_light\">Światła uliczne</string>\n  <string name=\"tag.restriction_one_way\">Jednokierunkowa</string>\n  <string name=\"tag.car_fuel_station\">Stacja paliw</string>\n  <string name=\"tag.car_parking\">Parking</string>\n  <string name=\"tag.car_emergency_phone\">Telefon alarmowy</string>\n  <string name=\"tag.car_turning_circle\">M. do zawracania</string>\n  <string name=\"tag.car_speed_camera\">Fotoradar</string>\n  <string name=\"tag.tourism_view_point\">Punkt widokowy</string>\n  <string name=\"tag.tourism_information\">Info Turystyczne</string>\n  <string name=\"tag.tourism_picnic\">Miejsce na piknik</string>\n  <string name=\"tag.tourism_attraction\">Atrakcja</string>\n  <string name=\"tag.tourism_theme_park\">Lunapark</string>\n  <string name=\"tag.tourism_castle\">Zamek</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Muzeum</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Ławka</string>\n  <string name=\"tag.amenity_water\">Woda</string>\n  <string name=\"tag.amenity_pharmacy\">Apteka</string>\n  <string name=\"tag.amenity_shop\">Sklep</string>\n  <string name=\"tag.amenity_marina\">Port</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Szpitale,\\nLekarze</string>\n  <string name=\"tag.amenity_recycling\">Recycling</string>\n  <string name=\"tag.amenity_place_of_worship\">Miejsce\\n kultu</string>\n  <string name=\"tag.amenity_post_office\">Poczta</string>\n  <string name=\"tag.amenity_library\">Biblioteka</string>\n  <string name=\"tag.amenitymore_school\">Szkoła</string>\n  <string name=\"tag.amenitymore_police\">Policja</string>\n  <string name=\"tag.amenitymore_fire_station\">Remiza strażacka</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Plac zabaw</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restauracja</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast food</string>\n  <string name=\"tag.amenitymore_camp_site\">Kemping</string>\n  <string name=\"tag.way_bridge\">Most</string>\n  <string name=\"tag.way_zebra_crossing\">Zebra</string>\n  <string name=\"tag.way_motorway\">Autostrada</string>\n  <string name=\"tag.way_trunk\">Ekspresowa</string>\n  <string name=\"tag.way_primary\">Krajowa</string>\n  <string name=\"tag.way_secondary\">Wojewódzka</string>\n  <string name=\"tag.way_tertiary\">Powiatowa</string>\n  <string name=\"tag.way_residential\">Osiedlowa</string>\n  <string name=\"tag.way_service\">Serwisowa</string>\n  <string name=\"tag.track_track\">Ścieżka</string>\n  <string name=\"tag.track_cycleway\">Rowerowa</string>\n  <string name=\"tag.track_footway\">Chodnik</string>\n  <string name=\"tag.track_bridleway\">Trasa konna</string>\n  <string name=\"tag.track_steps\">Schody</string>\n  <string name=\"tag.track_living_street\">Obszar zamieszkały</string>\n  <string name=\"tag.track_pedestrian\">Piesza</string>\n  <string name=\"tag.track_grade1\">Ranga 1</string>\n  <string name=\"tag.track_grade2\">Ranga 2</string>\n  <string name=\"tag.track_grade3\">Ranga 3</string>\n  <string name=\"tag.track_grade4\">Ranga 4</string>\n  <string name=\"tag.track_grade5\">Ranga 5</string>\n  <string name=\"tag.landuse_farm\">Farma</string>\n  <string name=\"tag.landuse_landfill\">Składowisko</string>\n  <string name=\"tag.landuse_basin\">Dorzecze</string>\n  <string name=\"tag.landuse_reservoir\">Zbiornik</string>\n  <string name=\"tag.landuse_forest\">Las</string>\n  <string name=\"tag.landuse_allotments\">Ogródki</string>\n  <string name=\"tag.landuse_cemetery\">Cmentarz</string>\n  <string name=\"tag.landuse_recreation_ground\">Teren\\nrekreacyjny</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Aplikacja zainspirowana OSMTrackerem dla Windows Mobile, pozwala śledzić Twoje podróże, oznaczać istotne w trasie punkty (nagrywając głos lub robiąc zdjęcia). Zapisane trasy można wyeksportować do formatu GPX w celu późniejszego użycia ich w narzędziach takich jak JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Zapisywanie śladu</string>\n  <string name=\"tracklogger_waiting_gps\">Oczekiwanie na pozycję GPS, aby uaktywnić przyciski…</string>\n  <string name=\"tracklogger_voicerec_title\">Nagrywanie głosu</string>\n  <string name=\"tracklogger_voicerec_text\">Nagrywanie {0}s audio.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stop</string>\n  <string name=\"tracklogger_btnBack\">Wróć</string>\n  <string name=\"tracklogger_tracked\">Ślad: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS wyłączony</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS jest wyłączony. Czy chcesz go włączyć?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galeria czy aparat?</string>\n  <string name=\"tracklogger_camera\">Zrób zdjęcie aparatem fotograficznym</string>\n  <string name=\"tracklogger_gallery\">Wybierz zdjęcie z galerii</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista punktów nawigacji</string>\n  <string name=\"wplist_latitude\">Szer: </string>\n  <string name=\"wplist_longitude\">Dług: </string>\n  <string name=\"wplist_elevation\">Wys: </string>\n  <string name=\"wplist_accuracy\">Dokł: </string>\n  <string name=\"wplist_compass\">Kierunek z kompasu:</string>\n  <string name=\"wplist_compass_accuracy\">Dokładność kompasu: </string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Menadżer śladów</string>\n  <string name=\"trackmgr_tracklist\">Lista śladów:</string>\n  <string name=\"trackmgr_waypoints_count\">Pkt nawigacji: </string>\n  <string name=\"trackmgr_trackpoints_count\">Pkt śladu: </string>\n  <string name=\"trackmgr_empty\">Nie masz żadnych śladów.</string>\n  <string name=\"trackmgr_newtrack_hint\">Naciśnij, aby zarejestrować nowy ślad.</string>\n  <string name=\"trackmgr_newtrack_error\">Nie można utworzyć nowego śladu: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Właśnie tworzysz <b>ślad #{0}</b> Wybierz go z listy, aby kontynuować</string>\n  <string name=\"trackmgr_contextmenu_stop\">Zakończ rejestrację</string>\n  <string name=\"trackmgr_contextmenu_resume\">Wznów rejestrację</string>\n  <string name=\"trackmgr_contextmenu_delete\">Usuń</string>\n  <string name=\"trackmgr_contextmenu_export\">Eksport</string>\n  <string name=\"trackmgr_contextmenu_share\">Udostępnij</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Wyślij do OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Wyślij do GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Wyświetl</string>\n  <string name=\"trackmgr_contextmenu_details\">Szczegóły</string>\n  <string name=\"trackmgr_contextmenu_title\">Ślad #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Ślad #{0} zostanie usunięty</string>\n  <string name=\"trackmgr_deleteall_confirm\">Wszystkie dane zostaną usunięte. Czy na pewno?</string>\n  <string name=\"trackmgr_exporting\">Eksport śladu #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Przygotowanie eksportu...</string>\n  <string name=\"trackmgr_export_error\">Nie można eksportować śladu: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Wszystkie ślady zostaną wysłane, może to zająć dużo czasu. Jesteś pewien?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Nie można przetworzyć śladu: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Szczegóły śladu</string>\n  <string name=\"trackdetail_startdate\">Start:</string>\n  <string name=\"trackdetail_enddate\">Koniec:</string>\n  <string name=\"trackdetail_startloc\">Start w:</string>\n  <string name=\"trackdetail_endloc\">Koniec w:</string>\n  <string name=\"trackdetail_exportdate\">Eksportuj:</string>\n  <string name=\"trackdetail_osm_upload_date\">Wysłano do OpenStreetMap.</string>\n  <string name=\"trackdetail_btn_export\">Eksportuj do GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Jeszcze nie wyeksportowano)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Jeszcze nie wysłano)</string>\n  <string name=\"trackdetail_export_display\">Wyświetl</string>\n  <string name=\"trackdetail_name\">Nazwa</string>\n  <string name=\"trackdetail_description\">Opis</string>\n  <string name=\"trackdetail_tags\">Tagi (oddzielone przecinkami)</string>\n  <string name=\"trackdetail_description_mandatory\">Musisz wpisać opis.</string>\n  <string name=\"osm_visibility_private\">Prywatny</string>\n  <string name=\"osm_visibility_public\">Publiczny</string>\n  <string name=\"osm_visibility_trackable\">Niezidentyfikowany</string>\n  <string name=\"osm_visibility_identifiable\">Zidentyfikowany</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Wysyłanie do OSM</string>\n  <string name=\"osm_upload_ok\">Zapisz i wyślij</string>\n  <string name=\"osm_upload_tmpfile_failed\">Niepowiódł się eksport śladu do pliku tymczasowego.</string>\n  <string name=\"osm_upload_oauth_failed\">Uwierzytelnianie w OSM nie powiodło się.</string>\n  <string name=\"osm_upload_sending\">Wysyłanie śladu #{0}</string>\n  <string name=\"osm_upload_waiting_response\">Oczekiwanie na odpowiedź serwera OSM...</string>\n  <string name=\"osm_upload_error\">Podczas wysyłania śladu wystąpił błąd.</string>\n  <string name=\"osm_upload_bad_response\">Serwer OSM zwrócił błąd ({0}) o treści {1}</string>\n  <string name=\"osm_upload_unauthorized\">Błąd uwierzytelniania. Czy chcesz usunąć zapisane ustawienia uwierzytelniania OSM?</string>\n  <string name=\"osm_upload_sucess\">Wysyłanie zakończone pomyślnie!</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Anulować</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Nagraj notkę \ngłosową</string>\n  <string name=\"gpsstatus_record_stillimage\">Zrób zdjęcie</string>\n  <string name=\"gpsstatus_record_textnote\">Notka</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Nazwa punktu nawigacji/tekst</string>\n  <string name=\"waypoint_name_hint\">Wpisz nazwę punku nawigacji</string>\n  <string name=\"edit_waypoint_bt_preview\">Otwórz plik</string>\n  <string name=\"edit_waypoint_bt_save\">Ratować</string>\n  <string name=\"edit_waypoint_bt_delete\">Usuwać</string>\n  <string name=\"edit_waypoint_bt_cancel\">Anulować</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Usuń punkt nawigacji</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Usunąć ten punkt nawigacji?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Usuwać</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Anulować</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Ratować</string>\n  <string name=\"edit_note_bt_delete\">Usuwać</string>\n  <string name=\"edit_note_bt_cancel\">Anulować</string>\n  <string name=\"delete_note_confirm_bt_ok\">Usuwać</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Anulować</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Ustawienia</string>\n  <string name=\"menu_waypointlist\">Punkty nawigacji</string>\n  <string name=\"menu_about\">O programie</string>\n  <string name=\"menu_displaytrack\">Pokaż ślad</string>\n  <string name=\"menu_stoptracking\">Zatrzymaj i zapisz</string>\n  <string name=\"menu_newtrack\">Nowy ślad</string>\n  <string name=\"menu_deletetracks\">Usuń wszystkie ślady</string>\n  <string name=\"menu_continue\">Kontynuuj</string>\n  <string name=\"menu_stopcurrenttrack\">Zakończ aktualny ślad</string>\n  <string name=\"menu_save\">Zapisz</string>\n  <string name=\"menu_cancel\">Anuluj</string>\n  <string name=\"menu_export\">Eksport do GPX</string>\n  <string name=\"menu_osm_upload\">Wysyłanie do OSM</string>\n  <string name=\"menu_center_to_gps\">Centruj do GPS</string>\n  <string name=\"menu_exportall\">Eksportuj wszystko do GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Nie można zapisać do pamięci zewnętrznej.</string>\n  <string name=\"error_create_track_dir\">Nie można utworzyć folderu śladu %s.</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Proszę sprawdzić wew. pamięć czy jest prawidłowo zamontowana.</string>\n  <string name=\"error_voicerec_failed\">Nagrywanie głosu nie powiodło się</string>\n  <string name=\"error_userlayout_parsing\">Błąd podczas przetwarzania pliku XML. Proszę powrócić do domyślnego układu.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Wymagane pozwolenie</string>\n  <string name=\"storage_permission_for_export_GPX\">Aby wyeksportować ślad GPX, musimy zapisać go w pamięci.</string>\n  <string name=\"storage_permission_for_display_track\">Aby poprawnie wyświetlić ścieżkę potrzebujemy dostępu do magazynu.</string>\n  <string name=\"storage_permission_for_share_track\">Aby prawidłowo udostępnić ścieżkę potrzebujemy dostępu do magazynu.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Aby przesłać ścieżkę do OSM, potrzebujemy dostępu do magazynu.</string>\n  <string name=\"acccept\">Zgoda</string>\n  <string name=\"gps_perms_required\">Nie można kontynuować bez przyzwolenia na GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Ślad zapisany przez OSMTracker - Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">UWAGA: wartości HDOP nie są pobierane z urządzenia GPS. Są to dane orientacyjne podane w metrach.</string>\n  <!--About screen-->\n  <string name=\"about\">O programie</string>\n  <string name=\"about_text\">Więcej informacji, dokumentacja i zgłaszanie błędów, na stronie domowej projektu:</string>\n  <string name=\"about_translate_text\">Pomóż przetłumaczyć OSMTracker!</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <string name=\"about_export_db\">Eksportuj bazę danych</string>\n  <string name=\"about_exporting_db\">Eksportuję bazę danych...</string>\n  <string name=\"about_export_db_result\">Rezultat eksportu bazy danych: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker zapisuje ślad</string>\n  <string name=\"notification_title\">OSMTracker zapisuje ślad (#{0})</string>\n  <string name=\"notification_text\">Dotknij tutaj, aby wyświetlić ekran główny</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Wyświetla ślad</string>\n  <string name=\"displaytrack_map\">Wyświetl mapę w tle</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Zapisz</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Dokładność</string>\n  <string name=\"various_accuracy_with_sats\">Dokładność: {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Czekam na GPS ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Oczekuję na kierunek...</string>\n  <string name=\"various_heading_unknown\">Kierunek nie może zostać określony</string>\n  <string name=\"various_export_finished\">Proces eksportu zakończony sukcesem</string>\n  <string name=\"various_waiting_position\">Stanowisko niedostępne</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Podgląd śladu w OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Uaktualnij &amp; Instaluj</string>\n  <string name=\"buttons_presets_context_menu_delete\">Usuń</string>\n  <string name=\"buttons_presets_updating_layout\">Trwa aktualizacja...</string>\n  <string name=\"buttons_presets_successful_update\">Update Layout-u zakończył się sukcesem</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Layout nie został uaktualniony, spróbuj ponownie później</string>\n  <string name=\"buttons_presets_delete_message\">Czy na pewno chcesz usunąć {0} layout?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Tak</string>\n  <string name=\"buttons_presets_successful_delete\">Układ /layout/ został pomyślnie usunięty</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Katalog ikony został usunięty pomyślnie</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Ten plik nie posiadał powiązanego katalogu ikony</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Nie udało się usunąć układu /layout-u/</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Błąd: nie można nawiązać połączenia z Internetem</string>\n  <string name=\"available_layouts_response_null_exception\">Błąd: nie można nawiązać połączenia do domyślnego repozytorium niestandardowych layout-ów</string>\n  <string name=\"available_layouts_connecting_message\">(Trwa łączenie...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Pobierz</string>\n  <string name=\"available_layouts_not_available_language\">Twój język nie jest dostępny, wybierz jeden z listy</string>\n  <string name=\"available_layouts_language_dialog_title\">Dostępne Języki</string>\n  <string name=\"available_layouts_checking_language_dialog\">Trwa sprawdzanie lokalnych wersji języka</string>\n  <string name=\"available_layouts_downloading_dialog\">Trwa pobieranie...</string>\n  <string name=\"available_layouts_successful_download\">Layout został pobrany prawidłowo</string>\n  <string name=\"available_layouts_unsuccessful_download\">Layout nie może być pobrany, spróbuj ponownie później</string>\n  <string name=\"available_layouts_null_response_received\">Błąd przy odbieraniu danych z serwera</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Domyślny</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Niestandardowy</string>\n  <string name=\"github_repository_settings_username\">Nazwa użytkownika Github:</string>\n  <string name=\"github_repository_settings_repository_name\">Nazwa repozytorium:</string>\n  <string name=\"github_repository_settings_branch_name\">Nazwa gałęzi:</string>\n  <string name=\"github_repository_settings_valid_server\">Repozytorium Github poprawne</string>\n  <string name=\"github_repository_settings_invalid_server\">Repozytorium Github niepoprawne</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">Utworzono pomyślnie</string>\n  <string name=\"error_creating\">Błąd podczas twaorzenia</string>\n  <string name=\"db_error\">Błąd bazy danych</string>\n  <string name=\"successfully_saved\">Zapisano pomyślnie</string>\n  <string name=\"saving_error\">Błąd zapisu</string>\n  <string name=\"pr_status\">Status wniosku o ściągnięcie:</string>\n  <string name=\"repository_information_error\">Błąd z informacjami repozytorium</string>\n  <string name=\"successfully_uploaded\">Przesłano pomyślnie</string>\n  <string name=\"error_uploading\">Błąd podczas przesyłania</string>\n  <string name=\"gpx_file_read_error\">Błąd podczas odczytywania pliku GPX</string>\n  <string name=\"gpx_file_not_found\">Nie znaleziono pliku GPX</string>\n  <string name=\"uploading_file\">Przesyłany plik:</string>\n  <string name=\"item_selected\">Wybrane elementy:</string>\n  <string name=\"github_repository_private\">Prywatne:</string>\n  <string name=\"github_creating_repository\">Tworzenie repozytorium</string>\n  <string name=\"github_no_repository_name\">Musisz określić nazwę repozytorium</string>\n  <string name=\"error_field_required\">Musisz określić wartość dla tego pola</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Konfiguruj</string>\n  <string name=\"github_token_placeholder\">Token GitHub:</string>\n  <string name=\"github_get_token_btn\">Uzyskaj token</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Jak uzyskać token GitHub:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Kliknij przycisk, aby otworzyć witrynę GitHub i utworzyć token. W razie potrzeby zaloguj się za pomocą konta GitHub.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Wybierz „Tokeny (klasyczne)” i kliknij przycisk \\\"Wygeneruj nowy token”.</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Przypisz tokenowi opisową nazwę.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Wybierz datę wygaśnięcia. Zalecamy wybranie opcji \\\"Bez wygaśnięcia”, aby uniknąć powtarzania tego kroku.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Wybierz zakres lub uprawnienia, które chcesz przyznać dla tego tokena (OSMTracker potrzebuje tylko uprawnienia repo).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Wybierz \\\"Generuj token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Skopiuj wygenerowany token i wklej go w polu \\\"Token GitHub”.</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Możesz zapisać puste, aby usunąć swoje dane uwierzytelniające.</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Wiadomość przyznania:</string>\n  <string name=\"upload_to_github_create_fork\">Utwórz/nfork</string>\n  <string name=\"upload_to_github_open_pull_request\">Otwarta prośba o ściągnięcie</string>\n  <string name=\"upload_to_github_select_repo\">Wybierz repozytorium</string>\n  <string name=\"upload_to_github_create_repository\">Utwórz repozytorium</string>\n  <string name=\"upload_to_github_commit_btn\">Przyznaj</string>\n  <string name=\"upload_to_github_configure\">Konfiguruj</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Oryginalna nazwa użytkowania repozytorium</string>\n  <string name=\"upload_to_github_forked_repo_name\">Oryginalna nazwa repozytorium</string>\n  <string name=\"create\">Utwórz</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Tytuł wniosku o ściągnięcie</string>\n  <string name=\"upload_to_github_pr_description\">Opis wniosku o ściągnięcie</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Wprowadzenie do OSMTracker Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Witaj w OSMTracker Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Ta aplikacja jest wolnym oprogramowaniem i szanuje Twoją wolność!</string>\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Miłego zbierania śladów 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker Android będzie używał Twojej pozycji GPS, aby zarejestrować punkty trasy i punkty orientacyjne, nawet jeśli aplikacja działa w tle.\n\\n Twoje dane nie są używane w celach reklamowych.</string>\n  <string name=\"no_app_to_handle_file_type\">Nie znaleziono aplikacji, która może otworzyć ten plik.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Nagrywanie głosu</string>\n  <string name=\"wpt_stillimage\">Zdjęcie</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt/accessibility.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <!--About screen-->\n  <!--Zoom in/out in map view-->\n  <!--GPS status bar-->\n  <!--Track list-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Configurações</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Configurações do GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Exibe a tela de configurações do GPS</string>\n  <string name=\"prefs_check_gps_startup\">Verificar GPS ao iniciar</string>\n  <string name=\"prefs_check_gps_startup_summary\">Verifica se o GPS está desabilitado na inicialização, e permite habilitá-lo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorar relógio do GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignora o relógio do GPS e usa o relógio do Android registro de horas</string>\n  <string name=\"prefs_ui\">Interface do usuário</string>\n  <string name=\"prefs_ui_buttons_layout\">Disposição dos botões</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Permite definir uma disposição customizada dos botões (Veja docs)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Padrão</string>\n  <string name=\"prefs_voicerec_duration\">Duração da gravação de voz</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundos</string>\n  <string name=\"prefs_theme\">Tema da tela principal</string>\n  <string name=\"prefs_theme_summary\">É necessário reiniciar para ver as alterações</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>SO padrão</item>\n    <item>SO padrão (Dark)</item>\n    <item>SO padrão (Light)</item>\n    <item>Alto contraste</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Tela sempre ligada</string>\n  <string name=\"prefs_display_always_on_summary\">A tela irá ficar ligada ao registrar. Desabilite para economizar bateria</string>\n  <string name=\"prefs_displaytrack_osm\">Plano de fundo do OSM</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Exibe o OpenStreetMap sob o registro. Precisa de uma conexão de dados</string>\n  <string name=\"prefs_output\">Arquivo de saída GPX</string>\n  <string name=\"prefs_storage_dir\">Diretório de armazenamento externo (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Efetivo para a próxima trilha (não para a atual)</string>\n  <string name=\"prefs_output_filename\">Nome de arquivo para trilhas nomeadas</string>\n  <string name=\"prefs_output_filename_summary\">Padrão para nome de arquivos se a trilha tiver um nome</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nome da trilha</item>\n    <item>Nome, data de início e hora</item>\n    <item>Data de início e hora</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Precisão no arquivo GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Permite informações de precisão no arquivo GPX, com nome de pontos da via name ou em uma etiqueta separada</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nenhum</item>\n    <item>Com o nome do ponto da via</item>\n    <item>No comentário do ponto da via</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Use aproximação HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Insira HDOP no GPX com um valor de aproximação para precisão</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Misc</string>\n  <string name=\"tag.restriction\">Restrição</string>\n  <string name=\"tag.car\">Carro</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Instalações</string>\n  <string name=\"tag.amenity_more\">Instalações (+)</string>\n  <string name=\"tag.way\">Via</string>\n  <string name=\"tag.track\">Trilha</string>\n  <string name=\"tag.landuse\">Landuse</string>\n  <string name=\"tag.misc_bus_stop\">Ponto de ônibus</string>\n  <string name=\"tag.misc_railway\">Ferrovia</string>\n  <string name=\"tag.misc_telephone\">Telefone</string>\n  <string name=\"tag.misc_post_box\">Caixa de correio</string>\n  <string name=\"tag.misc_atm\">Caixa eletrônico</string>\n  <string name=\"tag.misc_bollard\">Bollard</string>\n  <string name=\"tag.misc_toilets\">Banheiros</string>\n  <string name=\"tag.misc_shelter\">Abrigo</string>\n  <string name=\"tag.misc_surveillance\">Vigilância</string>\n  <string name=\"tag.restriction_20\">Máximo 20</string>\n  <string name=\"tag.restriction_30\">Máx 30</string>\n  <string name=\"tag.restriction_40\">Máximo 40</string>\n  <string name=\"tag.restriction_50\">Máx 50</string>\n  <string name=\"tag.restriction_60\">Máximo 60</string>\n  <string name=\"tag.restriction_70\">Máximo 70</string>\n  <string name=\"tag.restriction_80\">Máx 80</string>\n  <string name=\"tag.restriction_90\">Máximo 90</string>\n  <string name=\"tag.restriction_100\">Máx 100</string>\n  <string name=\"tag.restriction_110\">Máx 110</string>\n  <string name=\"tag.restriction_120\">Máx 120</string>\n  <string name=\"tag.restriction_130\">Máximo 130</string>\n  <string name=\"tag.restriction_no_exit\">Sem saída</string>\n  <string name=\"tag.restriction_one_way\">Mão única</string>\n  <string name=\"tag.car_fuel_station\">Posto de combustível</string>\n  <string name=\"tag.car_parking\">Estacionamento</string>\n  <string name=\"tag.car_emergency_phone\">Telefone de emergência</string>\n  <string name=\"tag.car_turning_circle\">Rotatória</string>\n  <string name=\"tag.car_speed_camera\">Radar de velocidade</string>\n  <string name=\"tag.tourism_view_point\">Mirante</string>\n  <string name=\"tag.tourism_information\">Informação</string>\n  <string name=\"tag.tourism_picnic\">Lugar de Picnic</string>\n  <string name=\"tag.tourism_attraction\">Atração</string>\n  <string name=\"tag.tourism_theme_park\">Parque temático</string>\n  <string name=\"tag.tourism_castle\">Castelo</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museu</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Banco</string>\n  <string name=\"tag.amenity_water\">Água</string>\n  <string name=\"tag.amenity_pharmacy\">Farmácia</string>\n  <string name=\"tag.amenity_shop\">Compras</string>\n  <string name=\"tag.amenity_marina\">Cais</string>\n  <string name=\"tag.amenity_sport\">Esporte</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_recycling\">Reciclagem</string>\n  <string name=\"tag.amenity_post_office\">Correios</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Escola</string>\n  <string name=\"tag.amenitymore_police\">Polícia</string>\n  <string name=\"tag.amenitymore_fire_station\">Bombeiros</string>\n  <string name=\"tag.amenitymore_bank\">Banco</string>\n  <string name=\"tag.amenitymore_playground\">Playground</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Hotel de estrada</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurante</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast food</string>\n  <string name=\"tag.amenitymore_camp_site\">Casa de campo</string>\n  <string name=\"tag.way_bridge\">Ponte</string>\n  <string name=\"tag.way_zebra_crossing\">Faixa de pedestres</string>\n  <string name=\"tag.way_motorway\">Estrada</string>\n  <string name=\"tag.way_trunk\">BR</string>\n  <string name=\"tag.way_primary\">Primary</string>\n  <string name=\"tag.way_secondary\">Secondary</string>\n  <string name=\"tag.way_tertiary\">Tertiary</string>\n  <string name=\"tag.way_residential\">Residential</string>\n  <string name=\"tag.way_service\">Service</string>\n  <string name=\"tag.track_track\">Trilha</string>\n  <string name=\"tag.track_cycleway\">Ciclovia</string>\n  <string name=\"tag.track_footway\">Calçada</string>\n  <string name=\"tag.track_bridleway\">Caminho para animais</string>\n  <string name=\"tag.track_steps\">Degraus</string>\n  <string name=\"tag.track_living_street\">Rua residencial</string>\n  <string name=\"tag.track_pedestrian\">Pedestres</string>\n  <string name=\"tag.track_grade1\">Nível 1</string>\n  <string name=\"tag.track_grade2\">Nível 2</string>\n  <string name=\"tag.track_grade3\">Nível 3</string>\n  <string name=\"tag.track_grade4\">Nível 4</string>\n  <string name=\"tag.track_grade5\">Nível 5</string>\n  <string name=\"tag.landuse_farm\">Fazenda</string>\n  <string name=\"tag.landuse_landfill\">Aterro</string>\n  <string name=\"tag.landuse_basin\">Bacia</string>\n  <string name=\"tag.landuse_reservoir\">Reservatório</string>\n  <string name=\"tag.landuse_forest\">Foresta</string>\n  <string name=\"tag.landuse_allotments\">Loteamento</string>\n  <string name=\"tag.landuse_cemetery\">Cemitério</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker para Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Gravador de trilhas</string>\n  <string name=\"tracklogger_waiting_gps\">Aguardando pelo GPS para habilitar botões…</string>\n  <string name=\"tracklogger_voicerec_title\">Gravação de voz</string>\n  <string name=\"tracklogger_voicerec_text\">Gravando um {0}s clipe de áudio.</string>\n  <string name=\"tracklogger_voicerec_stop\">Sarar</string>\n  <string name=\"tracklogger_btnBack\">Voltar</string>\n  <string name=\"tracklogger_tracked\">Registrado: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS desabilitado</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS está desabilitado. Você deseja habilitá-lo ?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista de pontos da via</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Precisão: </string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gerenciador de trilhas</string>\n  <string name=\"trackmgr_tracklist\">Lista de trilhas:</string>\n  <string name=\"trackmgr_waypoints_count\">Pontos do via: </string>\n  <string name=\"trackmgr_trackpoints_count\">Pontos da trilha: </string>\n  <string name=\"trackmgr_empty\">Você não possui nenhuma trilha.</string>\n  <string name=\"trackmgr_newtrack_error\">Não é possível criar uma nova trilha: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">Parar registro</string>\n  <string name=\"trackmgr_contextmenu_resume\">Continuar registro</string>\n  <string name=\"trackmgr_contextmenu_delete\">Apagar</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportar como GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Fazer o upload para o OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Exibir</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalhes</string>\n  <string name=\"trackmgr_contextmenu_title\">Trilha #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Trilha #{0} será apagada</string>\n  <string name=\"trackmgr_deleteall_confirm\">Todas as faixas serão excluídos. Você tem certeza?\n</string>\n  <string name=\"trackmgr_exporting\">Exportando trilha #{0}…</string>\n  <string name=\"trackmgr_export_error\">Não é possível exportar trilha: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Todas as faixas serão excluídos. Você tem certeza?\n</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalhes da trilha</string>\n  <string name=\"trackdetail_startdate\">Hora de início:</string>\n  <string name=\"trackdetail_enddate\">Hora de fim:</string>\n  <string name=\"trackdetail_startloc\">Iniciou às:</string>\n  <string name=\"trackdetail_endloc\">Finalizou às:</string>\n  <string name=\"trackdetail_exportdate\">Exportada:</string>\n  <string name=\"trackdetail_osm_upload_date\">Enviado para OpenStreetMap:\n</string>\n  <string name=\"trackdetail_btn_export\">Exportada como GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ainda não exportada)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Não foi enviado ainda)\n\n</string>\n  <string name=\"trackdetail_export_display\">Exibir</string>\n  <string name=\"trackdetail_description\">Descrição\n</string>\n  <string name=\"trackdetail_tags\">Tags (separado por virgulas)</string>\n  <string name=\"trackdetail_description_mandatory\">Você precisa entrar com alguma descrição</string>\n  <string name=\"osm_visibility_private\">Privado</string>\n  <string name=\"osm_visibility_public\">Público</string>\n  <string name=\"osm_visibility_trackable\">Rastreável</string>\n  <string name=\"osm_visibility_identifiable\">Identificável</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap enviado</string>\n  <string name=\"osm_upload_ok\">Salvar e enviar</string>\n  <string name=\"osm_upload_tmpfile_failed\">Não é possível exportar a faixa para um arquivo temporário\n</string>\n  <string name=\"osm_upload_oauth_failed\">Não é possível autenticar-se\n</string>\n  <string name=\"osm_upload_sending\">Enviando faixa #{0} ...</string>\n  <string name=\"osm_upload_waiting_response\">Aguardando a resposta do servidor OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Erro ao carregar faixa</string>\n  <string name=\"osm_upload_bad_response\">O servidor OSM retornou um erro. ({0}) message {1}</string>\n  <string name=\"osm_upload_unauthorized\">Erro de autorização. Gostaria de limpar as credenciais OpenStreetMap salvas?\n</string>\n  <string name=\"osm_upload_sucess\">OpenStreetMap enviado com sucesso\n</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Gravar voz</string>\n  <string name=\"gpsstatus_record_textnote\">Nota de texto</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configurações</string>\n  <string name=\"menu_waypointlist\">Pontos da via</string>\n  <string name=\"menu_about\">Sobre</string>\n  <string name=\"menu_displaytrack\">Exibir trilha</string>\n  <string name=\"menu_stoptracking\">Parar &amp; salvar</string>\n  <string name=\"menu_newtrack\">Nova trilha</string>\n  <string name=\"menu_deletetracks\">Excluir todas as faixas</string>\n  <string name=\"menu_continue\">Continuar trilha</string>\n  <string name=\"menu_stopcurrenttrack\">Parar faixa atual</string>\n  <string name=\"menu_save\">Salvar</string>\n  <string name=\"menu_cancel\">Cancelar</string>\n  <string name=\"menu_export\">Exportar como GPX</string>\n  <string name=\"menu_osm_upload\">Abrir OpenStreetMap uploader</string>\n  <string name=\"menu_center_to_gps\">Centralizar para GPS</string>\n  <string name=\"menu_exportall\">Exportar tudo como GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Não é possível gravar no armazenamento externo.</string>\n  <string name=\"error_create_track_dir\">Não é possível criar faixa pasta %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Por favor, verifique se o dispositivo de armazenamento está inserido e montado.</string>\n  <string name=\"error_voicerec_failed\">A gravação de voz falhou</string>\n  <string name=\"error_userlayout_parsing\">Erro ao analisar arquivo XML. Por favor, retorne para o estilo padrão.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Registrado com OSMTracker para Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Aviso: Valores HDOP não são o HDOP retornado pelo dispositivo. Eles se aproximam da precisão da localização em metros e podem não ser usados na conta.</string>\n  <!--About screen-->\n  <string name=\"about\">Sobre</string>\n  <string name=\"about_text\">Para mais informações, documentos e sugestões, visite a página do projeto:</string>\n  <string name=\"about_translate_text\">Marcos1153</string>\n  <string name=\"about_debug_info\">Debug info</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker está registrando</string>\n  <string name=\"notification_title\">OSMTracker está registrando (#{0})</string>\n  <string name=\"notification_text\">Toque aqui para exibir a tela principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Exibir trilha</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Salvar</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisão</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Exibir trilha do OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt/waypoints.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"wpt_voicerec\">Gravação de voz</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo do OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Aumentar zoom</string>\n  <string name=\"acc.zoom_out\">Diminuir zoom</string>\n  <string name=\"acc.zoom_center\">Centro de zoom</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicador de força do sinal de satélite</string>\n  <string name=\"acc.record_indicator\">Indicador do progresso da gravação</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicador do status da trilha</string>\n  <string name=\"acc.upload_status\">Indicador do estado do envio para o OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Configurações</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Configurações do GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Exibir tela de configuração do GPS</string>\n  <string name=\"prefs_check_gps_startup\">Verificar GPS ao iniciar</string>\n  <string name=\"prefs_check_gps_startup_summary\">Ao iniciar, verificar se o GPS está desativado e perguntar se quer ativá-lo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorar relógio do GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorar relógio do GPS e usar relógio do Android para os registros de tempo</string>\n  <string name=\"prefs_use_barometer\">Log da pressão barométrica [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Alternar requer o reinício da trilha</string>\n  <string name=\"prefs_notes\">Notas de texto</string>\n  <string name=\"prefs_notes_summary\">Escolha como os valores do botão Texto da Nota nos layouts serão salvos.</string>\n  <string-array name=\"prefs_notes_keys\">\n    <item>Waypoint</item>\n    <item>Nota do OSM</item>\n    <item>Ambas</item>\n  </string-array>\n  <string name=\"prefs_gps_logging_interval\">Intervalo de registros do GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Use 0 para o menor possível (afeta a duração da bateria)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segundos</string>\n  <string name=\"prefs_gps_logging_interval_empty\">O intervalo de registro de GPS não pode estar vazio.</string>\n  <string name=\"prefs_gps_logging_min_distance\">Distância de registro do GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Distância mínima entre os pontos da trilha em metros, use 0 para o mais curto possível</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metros</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">A distância mínima entre os pontos de rastreamento não pode ser vazia.</string>\n  <string name=\"prefs_ui\">Interface do usuário</string>\n  <string name=\"prefs_ui_picture_source\">Fonte padrão das imagens</string>\n  <string name=\"prefs_ui_picture_source_summary\">Tirar foto com a câmera ou escolher da galeria?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Câmera</item>\n    <item>Galeria de Imagem</item>\n    <item>Perguntar sempre</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Definições de botões</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Escolha uma configuração de botões personalizada (veja a documentação)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">Layout padrão</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Padrão</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">Layout baixado</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Você não baixou arquivos de layout</string>\n  <string name=\"prefs_ui_available_layout\">Layouts Disponíveis</string>\n  <string name=\"prefs_ui_github_repository_settings\">Configurações do repositório do Github</string>\n  <string name=\"prefs_ui_orientation\">Orientação</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientação preferida para a tela dos botões</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automática</item>\n    <item>Retrato</item>\n    <item>Paisagem</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duração da gravação de voz</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundos</string>\n  <string name=\"prefs_theme\">Tema gráfico da tela principal</string>\n  <string name=\"prefs_theme_summary\">É necessário reiniciar o aplicativo para que as mudanças tenham efeito</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Padrão do sistema</item>\n    <item>Padrão do sistema (escuro)</item>\n    <item>Padrão do sistema (claro)</item>\n    <item>Alto contraste</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Tela sempre ligada</string>\n  <string name=\"prefs_display_always_on_summary\">Tela ficará sempre ligada durante a gravação da trilha. Desative para economizar bateria</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa de fundo</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Exibir mapa do OpenStreetMap por baixo. Precisa de uma conexão de dados</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Sempre exibir o fundo do OpenStreetMap? Requer uma conexão de dados</string>\n  <string name=\"prefs_output\">Configurações GPX</string>\n  <string name=\"prefs_storage_dir\">Pasta do armazenamento nos documentos</string>\n  <string name=\"prefs_storage_dir_hint\">Terá efeito na próxima trilha (não na atual)</string>\n  <string name=\"prefs_storage_dir_empty\">O valor da pasta de armazenamento não pode estar vazio.</string>\n  <string name=\"prefs_output_one_dir_per_track\">Uma pasta por trilha</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Salvar cada trilha e arquivos associados em uma pasta própria</string>\n  <string name=\"prefs_output_filename\">Nome do arquivo para trilhas nomeadas</string>\n  <string name=\"prefs_output_filename_summary\">Padrão para nomes de arquivo se a trilha tem um nome</string>\n  <string-array name=\"prefs_output_filename_keys\"/>\n  <string name=\"prefs_output_filename_label\">rótulo do nome do arquivo</string>\n  <string name=\"prefs_output_filename_label_summary\">Este rótulo será anexado ao final do nome do arquivo</string>\n  <string name=\"prefs_output_accuracy\">Precisão do arquivo GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Adicionar informações sobre precisão nos arquivos GPX, com nomes ou comentários dos pontos de referência</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nenhum</item>\n    <item>Com nome do ponto de referência</item>\n    <item>Em um comentário do ponto de referência</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Usar aproximação HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Preencha HDOP no GPX com um valor de aproximação de precisão</string>\n  <string name=\"prefs_sound_enabled\">Ativar som</string>\n  <string name=\"prefs_sound_enabled_summary\">Tocar som quando gravação de voz começa e termina</string>\n  <string name=\"prefs_osm_visibility\">Visibilidade da trilha</string>\n  <string name=\"prefs_osm_visibility_summary\">Visibilidade preferencial das trilhas enviadas para openstreetmap.org</string>\n  <string-array name=\"prefs_osm_visibility_keys\">\n    <item>Privado</item>\n    <item>Rastreável</item>\n    <item>Público</item>\n    <item>Identificável</item>\n  </string-array>\n  <string name=\"prefs_osm_clear_oauth_data\">Redefinir autenticação OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Esquecer as credenciais e permissões OSM e forçar o OSMTracker a perguntar isso novamente</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Você vai ter que autorizar OSMTracker para carregar trilhas novamente. Tem certeza?</string>\n  <string name=\"prefs_map_tile\">Provedor de blocos de mapas</string>\n  <string name=\"prefs_map_tile_summary\">Escolha o provedor do blocos para renderizar o mapa.</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Nenhum</item>\n    <item>em comentário</item>\n    <item>em extensão</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportar cabeçalho da bússola</string>\n  <string name=\"prefs_compass_heading_summary\">Define se e como os dados da bússola devem ser exportados para o arquivo GPX</string>\n  <string name=\"prefs_reset_default_value\">Redefinir valor padrão</string>\n  <string name=\"prefs_not_set\">Não definido</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Vários</string>\n  <string name=\"tag.restriction\">Restrição</string>\n  <string name=\"tag.car\">Carro</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Confortável</string>\n  <string name=\"tag.amenity_more\">Confortável (+)</string>\n  <string name=\"tag.way\">Via</string>\n  <string name=\"tag.track\">Trilha</string>\n  <string name=\"tag.landuse\">Solo</string>\n  <string name=\"tag.misc_bus_stop\">Ponto de ônibus</string>\n  <string name=\"tag.misc_railway\">Ferrovia</string>\n  <string name=\"tag.misc_telephone\">Telefone</string>\n  <string name=\"tag.misc_post_box\">Caixa postal</string>\n  <string name=\"tag.misc_atm\">Caixa eletrônico</string>\n  <string name=\"tag.misc_bollard\">Coluna</string>\n  <string name=\"tag.misc_toilets\">Banheiros</string>\n  <string name=\"tag.misc_shelter\">Abrigo</string>\n  <string name=\"tag.misc_surveillance\">Fiscalização</string>\n  <string name=\"tag.restriction_20\">Máx. 20</string>\n  <string name=\"tag.restriction_30\">Máx. 30</string>\n  <string name=\"tag.restriction_40\">Máx. 40</string>\n  <string name=\"tag.restriction_50\">Máx. 50</string>\n  <string name=\"tag.restriction_60\">Máx. 60</string>\n  <string name=\"tag.restriction_70\">Máx. 70</string>\n  <string name=\"tag.restriction_80\">Máx. 80</string>\n  <string name=\"tag.restriction_90\">Máx. 90</string>\n  <string name=\"tag.restriction_100\">Máx. 100</string>\n  <string name=\"tag.restriction_110\">Máx. 110</string>\n  <string name=\"tag.restriction_120\">Máx. 120</string>\n  <string name=\"tag.restriction_130\">Máx. 130</string>\n  <string name=\"tag.restriction_no_exit\">Sem saída</string>\n  <string name=\"tag.restriction_traffic_light\">Semáforo</string>\n  <string name=\"tag.restriction_one_way\">Mão única</string>\n  <string name=\"tag.car_fuel_station\">Posto de combustível</string>\n  <string name=\"tag.car_parking\">Estacionamento</string>\n  <string name=\"tag.car_emergency_phone\">Telefone de emergência</string>\n  <string name=\"tag.car_turning_circle\">Balão de retorno</string>\n  <string name=\"tag.car_speed_camera\">Radar de velocidade</string>\n  <string name=\"tag.tourism_view_point\">Mirante</string>\n  <string name=\"tag.tourism_information\">Informações</string>\n  <string name=\"tag.tourism_picnic\">Piquenique</string>\n  <string name=\"tag.tourism_attraction\">Atração turística</string>\n  <string name=\"tag.tourism_theme_park\">Parque temático</string>\n  <string name=\"tag.tourism_castle\">Castelo</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museu</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Banco</string>\n  <string name=\"tag.amenity_water\">Água</string>\n  <string name=\"tag.amenity_pharmacy\">Farmácia</string>\n  <string name=\"tag.amenity_shop\">Loja</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Esporte</string>\n  <string name=\"tag.amenity_taxi\">Táxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nMédicos</string>\n  <string name=\"tag.amenity_recycling\">Reciclagem</string>\n  <string name=\"tag.amenity_place_of_worship\">Lugar de\\nadoração</string>\n  <string name=\"tag.amenity_post_office\">Correios</string>\n  <string name=\"tag.amenity_library\">Livraria</string>\n  <string name=\"tag.amenitymore_school\">Escola</string>\n  <string name=\"tag.amenitymore_police\">Polícia</string>\n  <string name=\"tag.amenitymore_fire_station\">Corpo de Bombeiros</string>\n  <string name=\"tag.amenitymore_bank\">Banco</string>\n  <string name=\"tag.amenitymore_playground\">Playground</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Albergue</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurante</string>\n  <string name=\"tag.amenitymore_fastfood\">Lanchonete</string>\n  <string name=\"tag.amenitymore_camp_site\">Acampamento</string>\n  <string name=\"tag.way_bridge\">Ponte</string>\n  <string name=\"tag.way_zebra_crossing\">Faixa de pedestres</string>\n  <string name=\"tag.way_motorway\">Autoestrada</string>\n  <string name=\"tag.way_trunk\">Via expressa</string>\n  <string name=\"tag.way_primary\">Via Primária</string>\n  <string name=\"tag.way_secondary\">Via Secundária</string>\n  <string name=\"tag.way_tertiary\">Via Terciária</string>\n  <string name=\"tag.way_residential\">Via Residencial</string>\n  <string name=\"tag.way_service\">Via de serviço</string>\n  <string name=\"tag.track_track\">Trilha</string>\n  <string name=\"tag.track_cycleway\">Ciclovia</string>\n  <string name=\"tag.track_footway\">Caminho de pedestres</string>\n  <string name=\"tag.track_bridleway\">Trilha para cavalgada</string>\n  <string name=\"tag.track_steps\">Escada</string>\n  <string name=\"tag.track_living_street\">Via de espaço compartilhado</string>\n  <string name=\"tag.track_pedestrian\">Calçadão</string>\n  <string name=\"tag.track_grade1\">Grau 1</string>\n  <string name=\"tag.track_grade2\">Grau 2</string>\n  <string name=\"tag.track_grade3\">Grau 3</string>\n  <string name=\"tag.track_grade4\">Grau 4</string>\n  <string name=\"tag.track_grade5\">Grau 5</string>\n  <string name=\"tag.landuse_farm\">Fazenda</string>\n  <string name=\"tag.landuse_landfill\">Aterro</string>\n  <string name=\"tag.landuse_basin\">Bacia</string>\n  <string name=\"tag.landuse_reservoir\">Reservatório</string>\n  <string name=\"tag.landuse_forest\">Floresta</string>\n  <string name=\"tag.landuse_allotments\">Loteamentos</string>\n  <string name=\"tag.landuse_cemetery\">Cemitério</string>\n  <string name=\"tag.landuse_recreation_ground\">Área de\\nrecreação</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker para Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirado no OSMTracker para Windows Mobile, permite gravar suas trilhas, marcar pontos de interesse significativos (gravação de voz, fotos) e exportá-las no formato GPX para uso posterior em ferramentas para o Open Street Map como JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Registro da trilha</string>\n  <string name=\"tracklogger_waiting_gps\">Aguardando estabilização do GPS para ativar botões...</string>\n  <string name=\"tracklogger_voicerec_title\">Gravar voz</string>\n  <string name=\"tracklogger_voicerec_text\">Gravando um {0}s trecho de áudio.</string>\n  <string name=\"tracklogger_voicerec_stop\">Parar</string>\n  <string name=\"tracklogger_btnBack\">Voltar</string>\n  <string name=\"tracklogger_tracked\">Gravado:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS desativado</string>\n  <string name=\"tracklogger_gps_disabled_hint\">O GPS está desativado. Deseja ativá-lo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galeria ou câmera?</string>\n  <string name=\"tracklogger_camera\">Tirar foto com a câmera</string>\n  <string name=\"tracklogger_gallery\">Selecione uma imagem da galeria</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista de pontos de passagem</string>\n  <string name=\"wplist_latitude\">Lat:</string>\n  <string name=\"wplist_longitude\">Long:</string>\n  <string name=\"wplist_elevation\">Elev:</string>\n  <string name=\"wplist_accuracy\">Precis:</string>\n  <string name=\"wplist_compass\">Rumo Cálc.:</string>\n  <string name=\"wplist_compass_accuracy\">Precis. Cálc.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gerenciar trilhas</string>\n  <string name=\"trackmgr_tracklist\">Lista de trilhas:</string>\n  <string name=\"trackmgr_waypoints_count\">Pontos de referência:</string>\n  <string name=\"trackmgr_trackpoints_count\">Trajeto:</string>\n  <string name=\"trackmgr_notes_count\">Notas:</string>\n  <string name=\"trackmgr_empty\">Você não tem nenhuma trilha.</string>\n  <string name=\"trackmgr_newtrack_hint\">Pressione para gravar uma nova trilha.</string>\n  <string name=\"trackmgr_newtrack_error\">Impossível criar uma nova trilha: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Você está gravando a <b>trilha #{0}</b>\\nSelecione ela na lista para continuar</string>\n  <string name=\"trackmgr_contextmenu_stop\">Parar gravação</string>\n  <string name=\"trackmgr_contextmenu_resume\">Continuar gravação</string>\n  <string name=\"trackmgr_contextmenu_delete\">Apagar</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportar</string>\n  <string name=\"trackmgr_contextmenu_share\">Compartilhar</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Enviar para OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Carregar para o GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Exibir</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalhes</string>\n  <string name=\"trackmgr_contextmenu_title\">Trilha #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">A trilha #{0} será apagada</string>\n  <string name=\"trackmgr_deleteall_confirm\">Todas as trilhas serão apagadas. Tem certeza?</string>\n  <string name=\"trackmgr_exporting\">Exportando trilha #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Preparando para exportar...</string>\n  <string name=\"trackmgr_export_error\">Não foi possível exportar trilha: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Todas as trilhas serão exportadas, o que poderá levar muito tempo. Tem certeza?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Incapaz de processar a trilha: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalhes da trilha</string>\n  <string name=\"trackdetail_startdate\">Início:</string>\n  <string name=\"trackdetail_enddate\">Fim:</string>\n  <string name=\"trackdetail_startloc\">Início em:</string>\n  <string name=\"trackdetail_endloc\">Término em:</string>\n  <string name=\"trackdetail_exportdate\">Exportado:</string>\n  <string name=\"trackdetail_osm_upload_date\">Enviado para o OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportar como GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ainda não exportado)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ainda não enviado)</string>\n  <string name=\"trackdetail_export_display\">Exibir</string>\n  <string name=\"trackdetail_name\">Nome</string>\n  <string name=\"trackdetail_description\">Descrição</string>\n  <string name=\"trackdetail_tags\">Tags (separado com vírgula)</string>\n  <string name=\"trackdetail_description_mandatory\">Você precisa digitar uma descrição</string>\n  <string name=\"trackdetail_visibility\">Visibilidade</string>\n  <string name=\"osm_visibility_private\">Privado</string>\n  <string name=\"osm_visibility_public\">Público</string>\n  <string name=\"osm_visibility_trackable\">Rastreável</string>\n  <string name=\"osm_visibility_identifiable\">Identificável</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Enviar para OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Salvar e enviar</string>\n  <string name=\"osm_upload_tmpfile_failed\">Não foi possível exportar a trilha para um arquivo temporário</string>\n  <string name=\"osm_upload_oauth_failed\">Não foi possível autenticar no OSM</string>\n  <string name=\"osm_upload_sending\">Enviando trilha #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Esperando servidor do OpenStreetMap responder...</string>\n  <string name=\"osm_upload_error\">Erro ao enviar trilha</string>\n  <string name=\"osm_upload_bad_response\">O servidor do OSM retornou um erro: ({0}) message {1}</string>\n  <string name=\"osm_upload_unauthorized\">Erro de autorização. Gostaria de limpar as credencias do OpenStreetMaps salvas?</string>\n  <string name=\"osm_upload_sucess\">Enviado com sucesso para o OpenStreetMap</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload\">Carregamento de notas do OpenStreetMap</string>\n  <string name=\"osm_note_upload_error\">Erro ao carregar a nota</string>\n  <string name=\"osm_note_label\">Nota de texto</string>\n  <string name=\"osm_note_upload_ok\">Enviar</string>\n  <string name=\"osm_note_upload_cancel\">Cancelar</string>\n  <string name=\"osm_note_footer\">via %1$s %2$s</string>\n  <string name=\"osm_note_upload_unauthorized\">Erro de autorização. Se você já concedeu permissão ao aplicativo para enviar trilhas, é necessário limpar suas credenciais salvas para autorizar o aplicativo a enviar trilhas e <b>notas</b>.  Deseja limpar suas credenciais salvas do OpenStreetMap?</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Gravar voz</string>\n  <string name=\"gpsstatus_record_stillimage\">Tirar foto</string>\n  <string name=\"gpsstatus_record_textnote\">Nota</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Nome do ponto de referência/texto</string>\n  <string name=\"waypoint_name_hint\">Insira o nome do ponto de referência</string>\n  <string name=\"edit_waypoint_bt_preview\">Abrir arquivo</string>\n  <string name=\"edit_waypoint_bt_save\">Salvar</string>\n  <string name=\"edit_waypoint_bt_delete\">Apagar</string>\n  <string name=\"edit_waypoint_bt_cancel\">Cancelar</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Apagar ponto de referência</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Apagar este ponto de referência?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Apagar</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Cancelar</string>\n  <!--osm Notes-->\n  <string name=\"note_name_label\">Nome/texto da nota</string>\n  <string name=\"edit_note_bt_update\">Salvar</string>\n  <string name=\"edit_note_bt_delete\">Apagar</string>\n  <string name=\"edit_note_bt_cancel\">Cancelar</string>\n  <string name=\"delete_note_confirm_dialog_title\">Excluir nota</string>\n  <string name=\"delete_note_confirm_dialog_msg\">Apagar esta nota?</string>\n  <string name=\"delete_note_confirm_bt_ok\">Apagar</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Cancelar</string>\n  <string name=\"notelist\">Lista de notas</string>\n  <string name=\"osm_note_bt_upload\">Enviar como nota OSM</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configurações</string>\n  <string name=\"menu_waypointlist\">Pontos de referência</string>\n  <string name=\"menu_about\">Sobre</string>\n  <string name=\"menu_displaytrack\">Exibir trilha</string>\n  <string name=\"menu_stoptracking\">Parar &amp; salvar</string>\n  <string name=\"menu_newtrack\">Nova trilha</string>\n  <string name=\"menu_deletetracks\">Apagar todas as trilhas</string>\n  <string name=\"menu_continue\">Continuar trilha</string>\n  <string name=\"menu_stopcurrenttrack\">Parar trilha atual</string>\n  <string name=\"menu_save\">Salvar</string>\n  <string name=\"menu_cancel\">Cancelar</string>\n  <string name=\"menu_export\">Exportar como GPX</string>\n  <string name=\"menu_osm_upload\">Enviar para o OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centralizar com GPS</string>\n  <string name=\"menu_exportall\">Exportar tudo como GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Impossível gravar no armazenamento externo.</string>\n  <string name=\"error_create_track_dir\">Impossível criar a pasta de trilhas %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Por favor confira se o armazenamento externo está corretamente inserido e montado.</string>\n  <string name=\"error_voicerec_failed\">Gravação de voz falhou</string>\n  <string name=\"error_userlayout_parsing\">Erro ao analisar arquivo de layout XML. Por favor, voltar para o layout padrão.</string>\n  <string name=\"error_gh_token_lenght\">O token deve ter 40 caracteres</string>\n  <string name=\"error_gh_pr_creation\">Erro ao criar o PR</string>\n  <!--messages-->\n  <string name=\"permission_required\">Permissão necessária</string>\n  <string name=\"storage_permission_for_export_GPX\">Para exportar o trilho GPX, é necessário escrever no armazenamento.</string>\n  <string name=\"storage_permission_for_display_track\">Para apresentar corretamente o trilho, é necessário o acesso ao armazenamento.</string>\n  <string name=\"storage_permission_for_share_track\">Para partilhar corretamente o trilho, é necessário o acesso ao armazenamento.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Para enviar o trilho para o OpenStreetMap, é necessário o acesso ao armazenamento.</string>\n  <string name=\"acccept\">Aceitar</string>\n  <string name=\"gps_perms_required\">Não é possível continuar sem a permissão do GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Gravado com OSMTracker para Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Atenção: valores HDOP não são o HDOP como retornado pelo dispositivo GPS. Eles são relativamente precisos na localização em metros.</string>\n  <!--About screen-->\n  <string name=\"about\">Sobre</string>\n  <string name=\"about_text\">Para maiores informações, documentação e relatório de problemas, por favor visite o site:</string>\n  <string name=\"about_translate_text\">Ajudar na tradução do OSMTracker:</string>\n  <string name=\"about_debug_info\">Informação de depuração</string>\n  <string name=\"about_export_db\">Exportar banco de dados</string>\n  <string name=\"about_exporting_db\">Exportando banco de dados...</string>\n  <string name=\"about_export_db_result\">Resultado da exportação do banco de dados: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker está gravando trilha</string>\n  <string name=\"notification_title\">OSMTracker está gravando trilha (#{0})</string>\n  <string name=\"notification_text\">Toque aqui para exibir a tela principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Exibir trilha</string>\n  <string name=\"displaytrack_map\">Exibir mapa de fundo</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Salvar</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisão</string>\n  <string name=\"various_accuracy_with_sats\">Precisão {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Aguardando pelo sinal do GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Aguardando rumo...</string>\n  <string name=\"various_heading_unknown\">O rumo não pôde ser determinado</string>\n  <string name=\"various_export_finished\">Processo de exportação concluído com sucesso</string>\n  <string name=\"various_waiting_position\">Posição não disponível</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Exibindo trilhas do OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Atualizar &amp; Instalar</string>\n  <string name=\"buttons_presets_context_menu_delete\">Excluir</string>\n  <string name=\"buttons_presets_updating_layout\">Atualizando…</string>\n  <string name=\"buttons_presets_successful_update\">O layout foi atualizado com sucesso</string>\n  <string name=\"buttons_presets_unsuccessful_update\">O layout não foi atualizado, tente novamente mais tarde</string>\n  <string name=\"buttons_presets_delete_message\">Tem certeza que deseja excluir o layout {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Sim</string>\n  <string name=\"buttons_presets_successful_delete\">O layout foi excluído com sucesso</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">O diretório do ícone foi excluído com sucesso</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Este arquivo não tinha nenhum diretório de ícone associado</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">O layout não pôde ser excluído</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Erro: não é possível conectar à Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Erro: não é possível conectar ao repositório de layouts personalizados padrão</string>\n  <string name=\"available_layouts_connecting_message\">(Conectando ...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Download</string>\n  <string name=\"available_layouts_not_available_language\">Seu idioma não está disponível, selecione um da lista</string>\n  <string name=\"available_layouts_language_dialog_title\">idiomas disponíveis</string>\n  <string name=\"available_layouts_checking_language_dialog\">Verificando as versões do idioma local</string>\n  <string name=\"available_layouts_downloading_dialog\">Downloading…</string>\n  <string name=\"available_layouts_successful_download\">O layout foi baixado com sucesso</string>\n  <string name=\"available_layouts_unsuccessful_download\">O layout não pode ser baixado, tente novamente mais tarde</string>\n  <string name=\"available_layouts_null_response_received\">Erro ao recuperar dados do servidor</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Padrão</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Personalizado</string>\n  <string name=\"github_repository_settings_username\">Nome de usuário do Github</string>\n  <string name=\"github_repository_settings_repository_name\">Nome do repositório</string>\n  <string name=\"github_repository_settings_branch_name\">Nome da Branch</string>\n  <string name=\"github_repository_settings_valid_server\">Repositório do Github válido</string>\n  <string name=\"github_repository_settings_invalid_server\">repositório do github inválido</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">criado com sucesso</string>\n  <string name=\"error_creating\">Error criando</string>\n  <string name=\"db_error\">Error de base de dados</string>\n  <string name=\"successfully_saved\">salvo com sucesso</string>\n  <string name=\"saving_error\">Error salvando</string>\n  <string name=\"pr_status\">Status do Pull request: </string>\n  <string name=\"repository_information_error\">Error com informações do repositório</string>\n  <string name=\"successfully_uploaded\">Enviado com sucesso</string>\n  <string name=\"error_uploading\">Error enviando</string>\n  <string name=\"gpx_file_read_error\">Erro ao ler o arquivo GPX</string>\n  <string name=\"gpx_file_not_found\">Arquivo GPX não encontrado</string>\n  <string name=\"uploading_file\">Carregando arquivo: </string>\n  <string name=\"item_selected\">Item selecionado:</string>\n  <string name=\"github_repository_private\">Privada:</string>\n  <string name=\"github_creating_repository\">Criando repositório</string>\n  <string name=\"github_no_repository_name\">Você deve especificar um nome de repositório</string>\n  <string name=\"error_field_required\">Você deve especificar um valor para este campo</string>\n  <string name=\"retrieving_repositories\">Recuperando repositórios...</string>\n  <string name=\"error_retrieving_repositories\">Erro ao recuperar repositórios</string>\n  <string name=\"successfully_retrieved_repositories\">Repositórios recuperados com sucesso</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Configurar</string>\n  <string name=\"github_token_placeholder\">Token do GitHub:</string>\n  <string name=\"github_get_token_btn\">Obtener token</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Como obter um token do GitHub:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Clique no botão para abrir o site do GitHub e criar um token. Entre com sua conta do GitHub, se necessário.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Selecione \\\"Tokens (Classic)\\\" e clique no botão \\\"Generate new token\\\" button.</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Atribua um nome descritivo ao seu token.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Selecione uma data de validade. Recomendamos \\\"No expiration\\\" para evitar repetir esta etapa.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Selecione o escopo ou as permissões que deseja conceder para este token (o OSMTracker só precisa da permissão de repositório).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Clique no botão \\\"Generate token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Copie o token gerado e cole-o no campo \\\"GitHub token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Você pode salvar em branco para excluir suas credenciais.</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Mensagem de commit:</string>\n  <string name=\"upload_to_github_create_fork\">Criar\\nfork</string>\n  <string name=\"upload_to_github_open_pull_request\">Abrir pull request</string>\n  <string name=\"upload_to_github_select_repo\">Selecione um repositório</string>\n  <string name=\"upload_to_github_create_repository\">Criar um repositório</string>\n  <string name=\"upload_to_github_commit_btn\">Commit</string>\n  <string name=\"upload_to_github_configure\">Configura</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Nome de usuário do repositório original</string>\n  <string name=\"upload_to_github_forked_repo_name\">Nome do repositório original</string>\n  <string name=\"create\">Criar</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Título da Pull Request</string>\n  <string name=\"upload_to_github_pr_description\">Descrição do Pull Request</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker para Android ™ Introdução</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Bem-vindo ao OSMTracker para Android ™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Este App é um software gratuito que respeita a sua liberdade!</string>\n  <!--Intro - slide What's new-->\n  <string name=\"app_intro_slide_whats_new_title\">O que há de novo nesta versão?</string>\n  <string name=\"app_intro_slide_whats_new_description\">Agora podemos enviar notas para o OSM, e os mapas CyclOSM e OpenTopo estão disponíveis novamente. Aproveitem!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Boas trilhas 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker para Android usará sua localização GPS para registrar trackpoints e waypoints, mesmo quando o aplicativo está sendo executado em segundo plano.\n\\nSeus dados não são usados para oferecer suporte a anúncios. </string>\n  <string name=\"no_app_to_handle_file_type\">Nenhum aplicativo foi encontrado para abrir este arquivo.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Gravação de voz</string>\n  <string name=\"wpt_stillimage\">Foto</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logotipo OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Ampliar</string>\n  <string name=\"acc.zoom_out\">Diminuir</string>\n  <string name=\"acc.zoom_center\">Centro</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indicador de força do sinal de satélite</string>\n  <string name=\"acc.record_indicator\">Indicador de gravação em curso</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indicador de estado do trilho</string>\n  <string name=\"acc.upload_status\">Indicador de envio para o OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Configurações</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Configurações de GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Ver configurações do GPS do sistema</string>\n  <string name=\"prefs_check_gps_startup\">Verificar GPS ao iniciar</string>\n  <string name=\"prefs_check_gps_startup_summary\">Verificar se o GPS está inativo no arranque e perguntar se quero ativá-lo</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorar o relógio do GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorar o relógio do GPS e usar o relógio do Android para registo da hora</string>\n  <string name=\"prefs_use_barometer\">Registar pressão barométrica [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">A alternância requer o reinício do trilho</string>\n  <string name=\"prefs_gps_logging_interval\">Intervalo de registo do GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Usar 0 para o valor mais pequeno possível (diminui a duração da bateria)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">segundos</string>\n  <string name=\"prefs_gps_logging_min_distance\">Distância de registo GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Distância mínima entre os pontos do trilho em metros; utilizar 0 para a distância mais curta possível</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metros</string>\n  <string name=\"prefs_ui\">Interface do utilizador</string>\n  <string name=\"prefs_ui_picture_source\">Origem das fotografias</string>\n  <string name=\"prefs_ui_picture_source_summary\">Tirar fotos com a câmara ou da galeria?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Câmara</item>\n    <item>Galeria</item>\n    <item>Perguntar sempre</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Predefinições de botões</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Escolha um conjunto de botões personalizado (veja a documentação)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">LAYOUT PADRÃO</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Padrão</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">LAYOUT DESCARREGADO</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Não tem ficheiros de layout descarregados</string>\n  <string name=\"prefs_ui_available_layout\">Layouts disponíveis</string>\n  <string name=\"prefs_ui_github_repository_settings\">Configurações do Repositório do Github</string>\n  <string name=\"prefs_ui_orientation\">Orientação</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientação preferida para o ecrã dos botões</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automático</item>\n    <item>Retrato (ao alto)</item>\n    <item>Paisagem</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Duração da gravação de voz</string>\n  <string name=\"prefs_voicerec_duration_seconds\">segundos</string>\n  <string name=\"prefs_theme\">Tema gráfico do ecrã principal</string>\n  <string name=\"prefs_theme_summary\">É necessário reiniciar a aplicação para que as alterações tenham efeito</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Tema original do SO</item>\n    <item>Tema original do SO (escuro)</item>\n    <item>Tema original do SO (claro)</item>\n    <item>Alto contraste</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Ecrã sempre ligado</string>\n  <string name=\"prefs_display_always_on_summary\">O ecrã manter-se-á ligado enquanto estiver a registar. Desative para poupar bateria</string>\n  <string name=\"prefs_displaytrack_osm\">Mapa de fundo</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Mostrar o mapa OpenStreetMap por baixo do trilho. Necessita de ligação de dados</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Mostrar sempre o fundo do OpenStreetMap? Requer uma conexão de dados</string>\n  <string name=\"prefs_output\">Configurações de GPX</string>\n  <string name=\"prefs_storage_dir\">Pasta de armazenamento nos documentos</string>\n  <string name=\"prefs_storage_dir_hint\">Aplicável apenas no próximo trilho (não ao atual)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Uma pasta por trilho</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Guardar cada trilho e os ficheiros relacionados numa pasta dedicada</string>\n  <string name=\"prefs_output_filename\">Nome do ficheiro para trilhos com nome</string>\n  <string name=\"prefs_output_filename_summary\">Padrão para o nome do ficheiro se o trilho tiver um nome</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Nome do trilho</item>\n    <item>Nome, data e hora de início</item>\n    <item>Data e hora de início, nome</item>\n    <item>Data e hora de início</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Rótulo do nome do ficheiro</string>\n  <string name=\"prefs_output_filename_label_summary\">Este rótulo será anexado ao final do nome do ficheiro</string>\n  <string name=\"prefs_output_accuracy\">Precisão no ficheiro GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Adicionar informação de precisão no ficheiro GPX, com nome do ponto de referência ou no comentário</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nenhum</item>\n    <item>Com nome do ponto de referência</item>\n    <item>No comentário do ponto de referência</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Usar aproximação HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Preencher HDOP no GPX com uma aproximação da precisão</string>\n  <string name=\"prefs_sound_enabled\">Ativar som</string>\n  <string name=\"prefs_sound_enabled_summary\">Reproduzir som quando a gravação de voz começa e termina</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Eliminar a autenticação OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Esquecer as credenciais e permissões do OpenStreetMap e forçar o OSMTracker a requisitá-las novamente</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Terá de autorizar novamente o OSMTracker para poder enviar trilhos para o OpenStreetMap. Quer continuar?</string>\n  <string name=\"prefs_map_tile\">Fornecedor de mosaicos de mapas</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Não exportar</item>\n    <item>No comentário</item>\n    <item>Na extensão</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportar direção da bússola</string>\n  <string name=\"prefs_compass_heading_summary\">Define se e como os dados da bússola devem ser exportados para o ficheiro GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Vários</string>\n  <string name=\"tag.restriction\">Restrição</string>\n  <string name=\"tag.car\">Carro</string>\n  <string name=\"tag.tourism\">Turismo</string>\n  <string name=\"tag.amenity\">Infraestrutura</string>\n  <string name=\"tag.amenity_more\">Infraestrutura (+)</string>\n  <string name=\"tag.way\">Via</string>\n  <string name=\"tag.track\">Caminho</string>\n  <string name=\"tag.landuse\">Uso do solo</string>\n  <string name=\"tag.misc_bus_stop\">Paragem de autocarro</string>\n  <string name=\"tag.misc_railway\">Ferrovia</string>\n  <string name=\"tag.misc_telephone\">Telefone</string>\n  <string name=\"tag.misc_post_box\">Caixa de correio</string>\n  <string name=\"tag.misc_atm\">Multibanco</string>\n  <string name=\"tag.misc_bollard\">Pilar</string>\n  <string name=\"tag.misc_toilets\">Casa de banho</string>\n  <string name=\"tag.misc_shelter\">Abrigo</string>\n  <string name=\"tag.misc_surveillance\">Vigilância</string>\n  <string name=\"tag.restriction_20\">Máx 20</string>\n  <string name=\"tag.restriction_30\">Máx 30</string>\n  <string name=\"tag.restriction_40\">Máx 40</string>\n  <string name=\"tag.restriction_50\">Máx 50</string>\n  <string name=\"tag.restriction_60\">Máx 60</string>\n  <string name=\"tag.restriction_70\">Máx 70</string>\n  <string name=\"tag.restriction_80\">Máx 80</string>\n  <string name=\"tag.restriction_90\">Máx 90</string>\n  <string name=\"tag.restriction_100\">Máx 100</string>\n  <string name=\"tag.restriction_110\">Máx 110</string>\n  <string name=\"tag.restriction_120\">Máx 120</string>\n  <string name=\"tag.restriction_130\">Máx 130</string>\n  <string name=\"tag.restriction_no_exit\">Sem saída</string>\n  <string name=\"tag.restriction_traffic_light\">Semáforo</string>\n  <string name=\"tag.restriction_one_way\">Sentido único</string>\n  <string name=\"tag.car_fuel_station\">Posto de combustível</string>\n  <string name=\"tag.car_parking\">Estacionamento</string>\n  <string name=\"tag.car_emergency_phone\">Telefone de emergência</string>\n  <string name=\"tag.car_turning_circle\">Círculo de viragem</string>\n  <string name=\"tag.car_speed_camera\">Radar</string>\n  <string name=\"tag.tourism_view_point\">Miradouro</string>\n  <string name=\"tag.tourism_information\">Informação</string>\n  <string name=\"tag.tourism_picnic\">Zona de piquenique</string>\n  <string name=\"tag.tourism_attraction\">Atração</string>\n  <string name=\"tag.tourism_theme_park\">Parque de diversões</string>\n  <string name=\"tag.tourism_castle\">Castelo</string>\n  <string name=\"tag.tourism_monument\">Monumento</string>\n  <string name=\"tag.tourism_museum\">Museu</string>\n  <string name=\"tag.tourism_cinema\">Cinema</string>\n  <string name=\"tag.amenity_bench\">Banco de jardim</string>\n  <string name=\"tag.amenity_water\">Água</string>\n  <string name=\"tag.amenity_pharmacy\">Farmácia</string>\n  <string name=\"tag.amenity_shop\">Loja</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Desporto</string>\n  <string name=\"tag.amenity_taxi\">Táxi</string>\n  <string name=\"tag.amenity_doctors\">Hospital,\\nMédico</string>\n  <string name=\"tag.amenity_recycling\">Reciclagem</string>\n  <string name=\"tag.amenity_place_of_worship\">Local de\\nculto</string>\n  <string name=\"tag.amenity_post_office\">Correios</string>\n  <string name=\"tag.amenity_library\">Biblioteca</string>\n  <string name=\"tag.amenitymore_school\">Escola</string>\n  <string name=\"tag.amenitymore_police\">Polícia</string>\n  <string name=\"tag.amenitymore_fire_station\">Quartel de bombeiros</string>\n  <string name=\"tag.amenitymore_bank\">Banco</string>\n  <string name=\"tag.amenitymore_playground\">Parque infantil</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Albergue (hostel)</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurante</string>\n  <string name=\"tag.amenitymore_fastfood\">Fast-food</string>\n  <string name=\"tag.amenitymore_camp_site\">Parque de campismo</string>\n  <string name=\"tag.way_bridge\">Ponte</string>\n  <string name=\"tag.way_zebra_crossing\">Passadeira</string>\n  <string name=\"tag.way_motorway\">Autoestrada</string>\n  <string name=\"tag.way_trunk\">Via rápida (IP, IC)</string>\n  <string name=\"tag.way_primary\">Estrada Nacional</string>\n  <string name=\"tag.way_secondary\">Estrada Regional</string>\n  <string name=\"tag.way_tertiary\">Estrada Municipal</string>\n  <string name=\"tag.way_residential\">Residencial</string>\n  <string name=\"tag.way_service\">Serviço</string>\n  <string name=\"tag.track_track\">Carreiro florestal / agrícola</string>\n  <string name=\"tag.track_cycleway\">Ciclovia</string>\n  <string name=\"tag.track_footway\">Via pedonal exclusiva</string>\n  <string name=\"tag.track_bridleway\">Caminho exclusivo para cavalos</string>\n  <string name=\"tag.track_steps\">Degraus</string>\n  <string name=\"tag.track_living_street\">Zona de coexistência</string>\n  <string name=\"tag.track_pedestrian\">Pedonal</string>\n  <string name=\"tag.track_grade1\">Nível 1</string>\n  <string name=\"tag.track_grade2\">Nível 2</string>\n  <string name=\"tag.track_grade3\">Nível 3</string>\n  <string name=\"tag.track_grade4\">Nível 4</string>\n  <string name=\"tag.track_grade5\">Nível 5</string>\n  <string name=\"tag.landuse_farm\">Quinta (rural)</string>\n  <string name=\"tag.landuse_landfill\">Aterro</string>\n  <string name=\"tag.landuse_basin\">Bacia</string>\n  <string name=\"tag.landuse_reservoir\">Reservatório</string>\n  <string name=\"tag.landuse_forest\">Floresta</string>\n  <string name=\"tag.landuse_allotments\">Horta urbana</string>\n  <string name=\"tag.landuse_cemetery\">Cemitério</string>\n  <string name=\"tag.landuse_recreation_ground\">Zona de\\nrecreio</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker para Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirado pelo OSMTracker no Windows Mobile, permite registar as viagens, marcar pontos importantes (gravações de voz, fotos), exportar no formato GPX para ser utilizado posteriormente em programas como o JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Registo de trilhos</string>\n  <string name=\"tracklogger_waiting_gps\">À espera do sinal GPS para ativar os botões…</string>\n  <string name=\"tracklogger_voicerec_title\">Gravação de voz</string>\n  <string name=\"tracklogger_voicerec_text\">A gravar um clip áudio de {0}s</string>\n  <string name=\"tracklogger_voicerec_stop\">Parar</string>\n  <string name=\"tracklogger_btnBack\">Voltar</string>\n  <string name=\"tracklogger_tracked\">Registados:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS desativado</string>\n  <string name=\"tracklogger_gps_disabled_hint\">O GPS está desativado. Quer ativá-lo?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galeria ou câmara?</string>\n  <string name=\"tracklogger_camera\">Fotografar com a câmara</string>\n  <string name=\"tracklogger_gallery\">Selecionar fotografia na galeria</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Lista de pontos de referência</string>\n  <string name=\"wplist_latitude\">Lat:</string>\n  <string name=\"wplist_longitude\">Long:</string>\n  <string name=\"wplist_elevation\">Elev:</string>\n  <string name=\"wplist_accuracy\">Exatidão:</string>\n  <string name=\"wplist_compass\">Direção búss.:</string>\n  <string name=\"wplist_compass_accuracy\">Precis. bússo.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Gestor de trilhos</string>\n  <string name=\"trackmgr_tracklist\">Lista de trilhos:</string>\n  <string name=\"trackmgr_waypoints_count\">Pontos de referência:</string>\n  <string name=\"trackmgr_trackpoints_count\">Pontos de trilhos:</string>\n  <string name=\"trackmgr_empty\">Não tem nenhum trilho.</string>\n  <string name=\"trackmgr_newtrack_hint\">Premir para gravar um novo trilho.</string>\n  <string name=\"trackmgr_newtrack_error\">Não foi possível criar o novo trilho: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Está neste momento a gravar o <b>trilho #{0}</b>\\nEscolha-o na lista para continuar</string>\n  <string name=\"trackmgr_contextmenu_stop\">Parar registo</string>\n  <string name=\"trackmgr_contextmenu_resume\">Continuar registo</string>\n  <string name=\"trackmgr_contextmenu_delete\">Eliminar</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportar</string>\n  <string name=\"trackmgr_contextmenu_share\">Partilhar</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Enviar para o OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Ver</string>\n  <string name=\"trackmgr_contextmenu_details\">Detalhes</string>\n  <string name=\"trackmgr_contextmenu_title\">Trilho #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">O trilho #{0} será eliminado</string>\n  <string name=\"trackmgr_deleteall_confirm\">Todos os trilhos serão eliminados. Tem a certeza?</string>\n  <string name=\"trackmgr_exporting\">A exportar o trilho #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">A preparar a exportação…</string>\n  <string name=\"trackmgr_export_error\">Não foi possível exportar o trilho: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Todos os trilhos serão exportados, o que poderá demorar algum tempo. Quer continuar?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Não foi possível processar o trilho: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Detalhes do trilho</string>\n  <string name=\"trackdetail_startdate\">Hora de início:</string>\n  <string name=\"trackdetail_enddate\">Hora de fim:</string>\n  <string name=\"trackdetail_startloc\">Começa em:</string>\n  <string name=\"trackdetail_endloc\">Termina em:</string>\n  <string name=\"trackdetail_exportdate\">Exportado:</string>\n  <string name=\"trackdetail_osm_upload_date\">Enviado para o OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportar como GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ainda não foi exportado)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ainda não foi enviado)</string>\n  <string name=\"trackdetail_export_display\">Ver</string>\n  <string name=\"trackdetail_name\">Nome</string>\n  <string name=\"trackdetail_description\">Descrição</string>\n  <string name=\"trackdetail_tags\">Etiquetas (separadas por vírgulas)</string>\n  <string name=\"trackdetail_description_mandatory\">Tem de escrever uma descrição</string>\n  <string name=\"osm_visibility_private\">Privado</string>\n  <string name=\"osm_visibility_public\">Público</string>\n  <string name=\"osm_visibility_trackable\">Rastreável</string>\n  <string name=\"osm_visibility_identifiable\">Identificável</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Enviar para OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Guardar e enviar</string>\n  <string name=\"osm_upload_tmpfile_failed\">Não foi possível exportar o trilho para um ficheiro temporário</string>\n  <string name=\"osm_upload_oauth_failed\">Não foi possível autenticar no OSM</string>\n  <string name=\"osm_upload_sending\">A enviar o trilho #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">À espera da resposta do servidor OpenStreetMap…</string>\n  <string name=\"osm_upload_error\">Erro ao enviar o trilho</string>\n  <string name=\"osm_upload_bad_response\">O servidor OSM devolveu um erro: ({0}) mensagem {1}</string>\n  <string name=\"osm_upload_unauthorized\">Erro de autorização. Deseja eliminar as credenciais guardadas do OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Envio para o OpenStreetMap bem sucedido</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Gravar voz</string>\n  <string name=\"gpsstatus_record_stillimage\">Fotografar</string>\n  <string name=\"gpsstatus_record_textnote\">Nota de texto</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Nome do ponto de referência/texto</string>\n  <string name=\"waypoint_name_hint\">Introduza o nome do ponto de referência</string>\n  <string name=\"edit_waypoint_bt_preview\">Abrir ficheiro</string>\n  <string name=\"edit_waypoint_bt_save\">Salvar</string>\n  <string name=\"edit_waypoint_bt_delete\">Eliminar</string>\n  <string name=\"edit_waypoint_bt_cancel\">Cancelar</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Eliminar ponto de referência</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Eliminar este ponto de referência</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Eliminar</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Cancelar</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Configurações</string>\n  <string name=\"menu_waypointlist\">Pontos de referência</string>\n  <string name=\"menu_about\">Sobre</string>\n  <string name=\"menu_displaytrack\">Mostrar trilho</string>\n  <string name=\"menu_stoptracking\">Parar e guardar</string>\n  <string name=\"menu_newtrack\">Novo trilho</string>\n  <string name=\"menu_deletetracks\">Eliminar todos os trilhos</string>\n  <string name=\"menu_continue\">Continuar trilho</string>\n  <string name=\"menu_stopcurrenttrack\">Parar trilho atual</string>\n  <string name=\"menu_save\">Guardar</string>\n  <string name=\"menu_cancel\">Cancelar</string>\n  <string name=\"menu_export\">Exportar como GPX</string>\n  <string name=\"menu_osm_upload\">Envio para o OpenStreeMap</string>\n  <string name=\"menu_center_to_gps\">Centrar no GPS</string>\n  <string name=\"menu_exportall\">Exportar tudo como GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Não foi possível gravar no armazenamento externo.</string>\n  <string name=\"error_create_track_dir\">Não foi possível criar a pasta do trilho %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Por favor, verifique se o armazenamento externo está inserido e montado corretamente.</string>\n  <string name=\"error_voicerec_failed\">A gravação de voz falhou</string>\n  <string name=\"error_userlayout_parsing\">Ocorreu um erro ao processar o ficheiro de layout XML. Por favor, reverta para o layout padrão.</string>\n  <!--messages-->\n  <string name=\"permission_required\">Permissão necessária</string>\n  <string name=\"storage_permission_for_export_GPX\">Para exportar o trilho GPX, é necessário escrever no armazenamento.</string>\n  <string name=\"storage_permission_for_display_track\">Para apresentar corretamente o trilho, é necessário o acesso ao armazenamento.</string>\n  <string name=\"storage_permission_for_share_track\">Para partilhar corretamente o trilho, é necessário o acesso ao armazenamento.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Para enviar o trilho para o OpenStreetMap, é necessário o acesso ao armazenamento.</string>\n  <string name=\"acccept\">Aceitar</string>\n  <string name=\"gps_perms_required\">Não é possível continuar sem a permissão do GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Registado com o OSMTracker para Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Aviso: os valores HDOP não são os valores HDOP indicados pelo GPS. São aproximações dadas pela exatidão da localização em metros.</string>\n  <!--About screen-->\n  <string name=\"about\">Sobre</string>\n  <string name=\"about_text\">Para mais informação, documentos e relatório de problemas, visite a página do projeto:</string>\n  <string name=\"about_translate_text\">Ajude a traduzir o OSMTracker:</string>\n  <string name=\"about_debug_info\">Informação de depuração</string>\n  <string name=\"about_export_db\">Exportar base de dados</string>\n  <string name=\"about_exporting_db\">A exportar a base de dados…</string>\n  <string name=\"about_export_db_result\">Resultado da exportação da base de dados: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">O OSMTracker está a registar</string>\n  <string name=\"notification_title\">O OSMTracker está a registar ({0})</string>\n  <string name=\"notification_text\">Toque aqui para ver o ecrã principal</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Mostrar trilho</string>\n  <string name=\"displaytrack_map\">Mostrar mapa de fundo</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Gravar</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Precisão</string>\n  <string name=\"various_accuracy_with_sats\">Precisão {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">A esperar pela fixação do GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Aguarde pela direção…</string>\n  <string name=\"various_heading_unknown\">A direção não pode ser determinada</string>\n  <string name=\"various_export_finished\">Processo de exportação concluído com êxito</string>\n  <string name=\"various_waiting_position\">Posição não disponível</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Visualização de trilhos OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Atualizar e instalar</string>\n  <string name=\"buttons_presets_context_menu_delete\">Eliminar</string>\n  <string name=\"buttons_presets_updating_layout\">A atualizar…</string>\n  <string name=\"buttons_presets_successful_update\">O layout foi atualizado com sucesso</string>\n  <string name=\"buttons_presets_unsuccessful_update\">O layout não foi atualizado, tente novamente mais tarde</string>\n  <string name=\"buttons_presets_delete_message\">Tem a certeza que quer eliminar o layout {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Sim</string>\n  <string name=\"buttons_presets_successful_delete\">O layout foi eliminado com sucesso</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">O diretório do ícone foi eliminado com sucesso</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">O ficheiro não tinha nenhum diretório de ícone associado</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Não foi possível eliminar o layout</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Erro: não foi possível ligar à Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Erro: não foi possível estabelecer a ligação ao repositório padrão de layouts personalizados</string>\n  <string name=\"available_layouts_connecting_message\">(A estabelecer a ligação…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Descarregar</string>\n  <string name=\"available_layouts_not_available_language\">O seu idioma não está disponível, selecione um da lista</string>\n  <string name=\"available_layouts_language_dialog_title\">Idiomas disponíveis</string>\n  <string name=\"available_layouts_checking_language_dialog\">A verificar as versões de idiomas locais</string>\n  <string name=\"available_layouts_downloading_dialog\">A descarregar…</string>\n  <string name=\"available_layouts_successful_download\">O layout foi descarregado com sucesso</string>\n  <string name=\"available_layouts_unsuccessful_download\">Não foi possível descarregar o layout, tente novamente mais tarde</string>\n  <string name=\"available_layouts_null_response_received\">Erro ao obter os dados do servidor</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Padrão</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Personalizado</string>\n  <string name=\"github_repository_settings_username\">Nome de utilizador no Github:</string>\n  <string name=\"github_repository_settings_repository_name\">Nome do repositório:</string>\n  <string name=\"github_repository_settings_branch_name\">Nome do ramo:</string>\n  <string name=\"github_repository_settings_valid_server\">Repositório do Github válido</string>\n  <string name=\"github_repository_settings_invalid_server\">O repositório do Github não é válido</string>\n  <!--Upload to GitHub-->\n  <!--GitHubConfig-->\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Introdução ao OSMTracker para Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Bem-vindo ao OSMTracker para Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Esta aplicação é um software gratuito que respeita a sua liberdade!</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Bons trilhos 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker para Android irá utilizar a sua localização GPS para registar pontos de trilhos e pontos das vias, mesmo quando a aplicação está a ser executada em segundo plano.\n\\nOs seus dados não são utilizados para suportar anúncios.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Gravação de voz</string>\n  <string name=\"wpt_stillimage\">Fotografia</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Логотип OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Приблизить</string>\n  <string name=\"acc.zoom_out\">Отдалить</string>\n  <string name=\"acc.zoom_center\">Приблизить к центру</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Индикатор уровня спутникового сигнала</string>\n  <string name=\"acc.record_indicator\">Индикатор записи</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Индикатор отслеживания</string>\n  <string name=\"acc.upload_status\">Индикатор загрузки на OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Настройки</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Настройки GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Открыть системные настройки GPS</string>\n  <string name=\"prefs_check_gps_startup\">Проверять GPS при запуске</string>\n  <string name=\"prefs_check_gps_startup_summary\">Проверять статус GPS при запуске, предлагать включить</string>\n  <string name=\"prefs_gps_ignore_clock\">Игнорировать время GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Игнорировать время GPS и использовать время телефона для временных меток</string>\n  <string name=\"prefs_use_barometer\">Логировать барометрическое давление [гПа]</string>\n  <string name=\"prefs_use_barometer_summary\">Для переключения требуется перезапуск трека</string>\n  <string name=\"prefs_gps_logging_interval\">Интервал сохранения GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Установите 0 для минимально возможного (ускоряет разряд батереи)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">секунд</string>\n  <string name=\"prefs_gps_logging_min_distance\">Дистанция логирования GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Мин. расстояние между точками трека в метрах, используйте 0 для кратчайшего возможного</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">метров</string>\n  <string name=\"prefs_ui\">Интерфейс</string>\n  <string name=\"prefs_ui_picture_source\">Источник фото по-умолчанию</string>\n  <string name=\"prefs_ui_picture_source_summary\">Сделать снимок или выбрать фото из галереи?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Камера</item>\n    <item>Альбом</item>\n    <item>Всегда запрашивать</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Расположение кнопок</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Выбрать вариант расположения кнопок (См. документацию)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">МАКЕТ ПО УМОЛЧАНИЮ</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">По умолчанию</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">СКАЧАННЫЙ МАКЕТ</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">У вас нет загруженных файлов макета</string>\n  <string name=\"prefs_ui_available_layout\"> Доступные макеты</string>\n  <string name=\"prefs_ui_github_repository_settings\">Настройки репозитория Github</string>\n  <string name=\"prefs_ui_orientation\">Ориентация</string>\n  <string name=\"prefs_ui_orientation_summary\">Предпочтительная ориентация экрана с кнопками</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Автоматическая</item>\n    <item>Портретная</item>\n    <item>Ладншафтная</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Длительность записи аудио</string>\n  <string name=\"prefs_voicerec_duration_seconds\">секунд</string>\n  <string name=\"prefs_theme\">Основная тема оформления</string>\n  <string name=\"prefs_theme_summary\">Изменения будут действовать после перезагрузки программы</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>По умолчанию</item>\n    <item>Темная</item>\n    <item>Светлая</item>\n    <item>Высокий контраст</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Не отключать экран</string>\n  <string name=\"prefs_display_always_on_summary\">Экран всегда будет включен во время записи трека. Отключите для экономии заряда батареи</string>\n  <string name=\"prefs_displaytrack_osm\">Картооснова OSM</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Отображать картооснову OpenStreetMap при отображении трека. Требует интернет-соединения</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Всегда показывать OpenStreetMap в фоне? Требуется подключение к сети.</string>\n  <string name=\"prefs_output\">Настройки GPX файлов</string>\n  <string name=\"prefs_storage_dir\">Папка хранилища в документах</string>\n  <string name=\"prefs_storage_dir_hint\">Будет использоваться для записи следующего трека (не для текущего)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Отдельная директория для трека</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Сохранять каждый трек и связанные файлы в отдельную директорию</string>\n  <string name=\"prefs_output_filename\">Имя файлов для именованных треков</string>\n  <string name=\"prefs_output_filename_summary\">Шаблон имени файла</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Имя трека</item>\n    <item>Имя, дата и время старта</item>\n    <item>Дата и время старта, Имя</item>\n    <item>Дата и время старта</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Метка имени файла</string>\n  <string name=\"prefs_output_filename_label_summary\">Эта метка будет добавлена в конец имени файла</string>\n  <string name=\"prefs_output_accuracy\">Точность в GPX файл</string>\n  <string name=\"prefs_output_accuracy_summary\">Записывать информацию о точности в GPX файл, в название точки, или отдельным тэгом</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Нет</item>\n    <item>В имя точки</item>\n    <item>В комментарий точки</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Использовать аппроксимацию HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Заполнять тэг HDOP в GPX файле аппроксимированным значением точности</string>\n  <string name=\"prefs_sound_enabled\">Включить звук</string>\n  <string name=\"prefs_sound_enabled_summary\">Играть звук в момент начала и окончания записи аудио</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Сбросить учетные данные OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Удалить учетные данные доступа к OSM и задать OSMTracker запросить их снова.</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Нужно будет заново авторизовать OSMTracker, чтобы закачивать треки. Вы уверены?</string>\n  <string name=\"prefs_map_tile\">Поставщик тайлов карт</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Нет</item>\n    <item>в комментарии</item>\n    <item>в расширении</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Экспорт направления из компаса</string>\n  <string name=\"prefs_compass_heading_summary\">Определяет когда и как данные компаса могут быть экспортированы в файл GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Разное</string>\n  <string name=\"tag.restriction\">Запреты</string>\n  <string name=\"tag.car\">Авто</string>\n  <string name=\"tag.tourism\">Туризм</string>\n  <string name=\"tag.amenity\">Инфраструктура</string>\n  <string name=\"tag.amenity_more\">Инфраструктура (+)</string>\n  <string name=\"tag.way\">Дорога</string>\n  <string name=\"tag.track\">Трек</string>\n  <string name=\"tag.landuse\">Землепользование</string>\n  <string name=\"tag.misc_bus_stop\">Остановка</string>\n  <string name=\"tag.misc_railway\">Ж/Д</string>\n  <string name=\"tag.misc_telephone\">Телефон</string>\n  <string name=\"tag.misc_post_box\">Почтовый ящик</string>\n  <string name=\"tag.misc_atm\">Банкомат</string>\n  <string name=\"tag.misc_bollard\">Преграда</string>\n  <string name=\"tag.misc_toilets\">Туалет</string>\n  <string name=\"tag.misc_shelter\">Навес</string>\n  <string name=\"tag.misc_surveillance\">Камера\nнаблюдения</string>\n  <string name=\"tag.restriction_20\">Макс. 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Макс. 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Макс. 60</string>\n  <string name=\"tag.restriction_70\">Макс. 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Макс. 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Макс. 130</string>\n  <string name=\"tag.restriction_no_exit\">Нет\nвыезда</string>\n  <string name=\"tag.restriction_traffic_light\">Светофор</string>\n  <string name=\"tag.restriction_one_way\">Одностороннее</string>\n  <string name=\"tag.car_fuel_station\">АЗС</string>\n  <string name=\"tag.car_parking\">Парковка</string>\n  <string name=\"tag.car_emergency_phone\">Экстренный\nтелефон</string>\n  <string name=\"tag.car_turning_circle\">Круг для\nразворота</string>\n  <string name=\"tag.car_speed_camera\">Камера\nскорости</string>\n  <string name=\"tag.tourism_view_point\">Смотровая\nплощадка</string>\n  <string name=\"tag.tourism_information\">Информация</string>\n  <string name=\"tag.tourism_picnic\">Место для\nпикника</string>\n  <string name=\"tag.tourism_attraction\">Достопримечательность</string>\n  <string name=\"tag.tourism_theme_park\">Аттракционы</string>\n  <string name=\"tag.tourism_castle\">Замок</string>\n  <string name=\"tag.tourism_monument\">Памятник</string>\n  <string name=\"tag.tourism_museum\">Музей</string>\n  <string name=\"tag.tourism_cinema\">Кино</string>\n  <string name=\"tag.amenity_bench\">Скамейка</string>\n  <string name=\"tag.amenity_water\">Вода</string>\n  <string name=\"tag.amenity_pharmacy\">Аптека</string>\n  <string name=\"tag.amenity_shop\">Магазин</string>\n  <string name=\"tag.amenity_marina\">Пристань</string>\n  <string name=\"tag.amenity_sport\">Спорт</string>\n  <string name=\"tag.amenity_taxi\">Такси</string>\n  <string name=\"tag.amenity_doctors\">Больница,\\nВрачи</string>\n  <string name=\"tag.amenity_recycling\">Мусорка</string>\n  <string name=\"tag.amenity_place_of_worship\">Место\\nбогослужения</string>\n  <string name=\"tag.amenity_post_office\">Почта</string>\n  <string name=\"tag.amenity_library\">Библиотека</string>\n  <string name=\"tag.amenitymore_school\">Школа</string>\n  <string name=\"tag.amenitymore_police\">Полиция</string>\n  <string name=\"tag.amenitymore_fire_station\">Пожарная часть</string>\n  <string name=\"tag.amenitymore_bank\">Банк</string>\n  <string name=\"tag.amenitymore_playground\">Игровая площадка</string>\n  <string name=\"tag.amenitymore_pub\">Бар</string>\n  <string name=\"tag.amenitymore_hotel\">Отель</string>\n  <string name=\"tag.amenitymore_motel\">Мотель</string>\n  <string name=\"tag.amenitymore_hostel\">Хостел</string>\n  <string name=\"tag.amenitymore_restaurant\">Ресторан</string>\n  <string name=\"tag.amenitymore_fastfood\">Бистро</string>\n  <string name=\"tag.amenitymore_camp_site\">Кемпинг</string>\n  <string name=\"tag.way_bridge\">Мост</string>\n  <string name=\"tag.way_zebra_crossing\">Пешеходный переход</string>\n  <string name=\"tag.way_motorway\">Автострада</string>\n  <string name=\"tag.way_trunk\">Магистраль</string>\n  <string name=\"tag.way_primary\">Основное</string>\n  <string name=\"tag.way_secondary\">Вспомогательное</string>\n  <string name=\"tag.way_tertiary\">Третичное</string>\n  <string name=\"tag.way_residential\">В жилом\nрайоне</string>\n  <string name=\"tag.way_service\">Служебное</string>\n  <string name=\"tag.track_track\">Трек</string>\n  <string name=\"tag.track_cycleway\">Велосипед.\nдорожка</string>\n  <string name=\"tag.track_footway\">Пешеход.\nдорожка</string>\n  <string name=\"tag.track_bridleway\">Верховая тропа</string>\n  <string name=\"tag.track_steps\">Ступени</string>\n  <string name=\"tag.track_living_street\">Жилая улица</string>\n  <string name=\"tag.track_pedestrian\">Пешеходный</string>\n  <string name=\"tag.track_grade1\">Класс 1</string>\n  <string name=\"tag.track_grade2\">Класс 2</string>\n  <string name=\"tag.track_grade3\">Класс 3</string>\n  <string name=\"tag.track_grade4\">Класс 4</string>\n  <string name=\"tag.track_grade5\">Класс 5</string>\n  <string name=\"tag.landuse_farm\">Ферма</string>\n  <string name=\"tag.landuse_landfill\">Свалка</string>\n  <string name=\"tag.landuse_basin\">Бассейн стока</string>\n  <string name=\"tag.landuse_reservoir\">Резервуар</string>\n  <string name=\"tag.landuse_forest\">Лес</string>\n  <string name=\"tag.landuse_allotments\">Дачи</string>\n  <string name=\"tag.landuse_cemetery\">Кладбище</string>\n  <string name=\"tag.landuse_recreation_ground\">Игровая\\nплощадка</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker для Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Вдохновленная OSMTracker для Windows  Mobile, эта программа дает возможность отслеживать траектории Ваших путешествий, отмечать важные места (в том числе записывать голосовые заметки и делать фотографии), сохранять их в формате GPX для дальнейшего использования с инструментами Open Street Map, например в редакторе JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Регистратор треков</string>\n  <string name=\"tracklogger_waiting_gps\">Ожидание GPS фиксации для активации кнопок…</string>\n  <string name=\"tracklogger_voicerec_title\">Запись аудио</string>\n  <string name=\"tracklogger_voicerec_text\">Запись аудио: {0}с.</string>\n  <string name=\"tracklogger_voicerec_stop\">Стоп</string>\n  <string name=\"tracklogger_btnBack\">Назад</string>\n  <string name=\"tracklogger_tracked\">Записано: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS отключен</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS отключен. Вы хотите включить его?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Галерея или камера? </string>\n  <string name=\"tracklogger_camera\">Сделать фото</string>\n  <string name=\"tracklogger_gallery\">Выбрать фото из галереи</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Список путевых точек</string>\n  <string name=\"wplist_latitude\">Шир.: </string>\n  <string name=\"wplist_longitude\">Долг.: </string>\n  <string name=\"wplist_elevation\">Выс: </string>\n  <string name=\"wplist_accuracy\">Точн.: </string>\n  <string name=\"wplist_compass\">Выч. напр.:</string>\n  <string name=\"wplist_compass_accuracy\">Выч. точн.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Менеджер треков</string>\n  <string name=\"trackmgr_tracklist\">Список треков:</string>\n  <string name=\"trackmgr_waypoints_count\">Путевые точки: </string>\n  <string name=\"trackmgr_trackpoints_count\">Точки трека: </string>\n  <string name=\"trackmgr_empty\">У вас нет треков.</string>\n  <string name=\"trackmgr_newtrack_hint\">Нажмите, чтобы записать новый трек.</string>\n  <string name=\"trackmgr_newtrack_error\">Невозможно создать новый трек: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">В данный момент вы записываете <b>трек #{0}</b>\\nДля продолжения выберите его в списке</string>\n  <string name=\"trackmgr_contextmenu_stop\">Остановить запись трека</string>\n  <string name=\"trackmgr_contextmenu_resume\">Продолжить запись трека</string>\n  <string name=\"trackmgr_contextmenu_delete\">Удалить</string>\n  <string name=\"trackmgr_contextmenu_export\">Экспортировать</string>\n  <string name=\"trackmgr_contextmenu_share\">Поделиться</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Загрузить на OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Загрузить на GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Показать</string>\n  <string name=\"trackmgr_contextmenu_details\">Подробности</string>\n  <string name=\"trackmgr_contextmenu_title\">Трек #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Трек #{0} будет удалён</string>\n  <string name=\"trackmgr_deleteall_confirm\">Все треки будут удалены. Вы уверены?</string>\n  <string name=\"trackmgr_exporting\">Экспорт трека #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Подготовка экспорта...</string>\n  <string name=\"trackmgr_export_error\">Невозможно экспортировать трек: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Будут экспортированы все треки, что может занять продолжительное время. Вы уверены?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Невозможно обработать трек: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Подробности трека</string>\n  <string name=\"trackdetail_startdate\">Время начала:</string>\n  <string name=\"trackdetail_enddate\">Время окончания:</string>\n  <string name=\"trackdetail_startloc\">Начало в:</string>\n  <string name=\"trackdetail_endloc\">Окончание в:</string>\n  <string name=\"trackdetail_exportdate\">Экспортирован:</string>\n  <string name=\"trackdetail_osm_upload_date\">Загружен на OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Экспортировать в GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ещё не экспортирован)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ещё не загружен)</string>\n  <string name=\"trackdetail_export_display\">Показать</string>\n  <string name=\"trackdetail_name\">Название</string>\n  <string name=\"trackdetail_description\">Описание</string>\n  <string name=\"trackdetail_tags\">Метки (через запятую)</string>\n  <string name=\"trackdetail_description_mandatory\">Необходимо ввести описание</string>\n  <string name=\"osm_visibility_private\">Частный</string>\n  <string name=\"osm_visibility_public\">Общедоступный</string>\n  <string name=\"osm_visibility_trackable\">Отслеживаемый</string>\n  <string name=\"osm_visibility_identifiable\">Идентифицируемый</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Загрузка на OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Сохранить и загрузить</string>\n  <string name=\"osm_upload_tmpfile_failed\">Не удалось экспортировать трек во временный файл</string>\n  <string name=\"osm_upload_oauth_failed\">Не удалось  пройти проверку подлинности на OSM</string>\n  <string name=\"osm_upload_sending\">Передача трека #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Ожидание ответа от сервера OpenStreetMap...</string>\n  <string name=\"osm_upload_error\">Ошибка загрузки трека</string>\n  <string name=\"osm_upload_bad_response\">Сервер OSM вернул ошибку:  ({0}) текст {1}</string>\n  <string name=\"osm_upload_unauthorized\">Ошибка авторизации.  Удалить сохраненные учетные данные OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Загрузка на OpenStreetMap завершена</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Отмена</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Запись аудио</string>\n  <string name=\"gpsstatus_record_stillimage\">Сделать фото</string>\n  <string name=\"gpsstatus_record_textnote\">Запись текста</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Название путевой точки/текст</string>\n  <string name=\"waypoint_name_hint\">Введите название точки</string>\n  <string name=\"edit_waypoint_bt_preview\">Открыть файл</string>\n  <string name=\"edit_waypoint_bt_save\">Сохранить</string>\n  <string name=\"edit_waypoint_bt_delete\">Удалить</string>\n  <string name=\"edit_waypoint_bt_cancel\">Отмена</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Удалить точку</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Удалить эту точку?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Удалить</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Отмена</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Сохранить</string>\n  <string name=\"edit_note_bt_delete\">Удалить</string>\n  <string name=\"edit_note_bt_cancel\">Отмена</string>\n  <string name=\"delete_note_confirm_bt_ok\">Удалить</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Отмена</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Настройки</string>\n  <string name=\"menu_waypointlist\">Путевые точки</string>\n  <string name=\"menu_about\">О программе</string>\n  <string name=\"menu_displaytrack\">Показать трек</string>\n  <string name=\"menu_stoptracking\">Остановить и сохранить</string>\n  <string name=\"menu_newtrack\">Новый трек</string>\n  <string name=\"menu_deletetracks\">Удалить все треки</string>\n  <string name=\"menu_continue\">Продолжить трек</string>\n  <string name=\"menu_stopcurrenttrack\">Остановить запись трека</string>\n  <string name=\"menu_save\">Сохранить</string>\n  <string name=\"menu_cancel\">Отмена</string>\n  <string name=\"menu_export\">Экспортировать в GPX</string>\n  <string name=\"menu_osm_upload\">Загрузка на OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Центрировать по GPS</string>\n  <string name=\"menu_exportall\">Экспорт всех в GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Невозможно записать файл.</string>\n  <string name=\"error_create_track_dir\">Невозможно создать папку трека %s.</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Проверьте, что флеш карта правильно вставлена и примонтирована.</string>\n  <string name=\"error_voicerec_failed\">Ошибка записи аудио</string>\n  <string name=\"error_userlayout_parsing\">Ошибка при загрузки файла расположения кнопок. Вернитесь к файлу по умолчанию.</string>\n  <string name=\"error_gh_token_lenght\">Токен должен быть 40 символов</string>\n  <string name=\"error_gh_pr_creation\">Ошибка при создании запроса слияния</string>\n  <!--messages-->\n  <string name=\"permission_required\">Необходимо разрешение</string>\n  <string name=\"storage_permission_for_export_GPX\">Для экспорта GPX трека нужно писать в хранилище.</string>\n  <string name=\"storage_permission_for_display_track\">Для правильного отображения трека нужен доступ к хранилищу.</string>\n  <string name=\"storage_permission_for_share_track\">Чтобы делиться треком нужен доступ к хранилищу.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Для загрузки трека на OSM нужен доступ к хранилищу.</string>\n  <string name=\"acccept\">Принять</string>\n  <string name=\"gps_perms_required\">Не могу продолжить без разрешения на GPS</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Записано на OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Внимание: значения записываемые в файл как HDOP — это не значения HDOP, получаемые от GPS устройства. Это приближённо вычисленное значение, полученное из метровой точности местоположения.</string>\n  <!--About screen-->\n  <string name=\"about\">О программе</string>\n  <string name=\"about_text\">Подробная информация, сообщения об ошибках находятся на официальном сайте проекта:</string>\n  <string name=\"about_translate_text\">Помочь с переводом OSMTracker:</string>\n  <string name=\"about_debug_info\">Отладочная информация</string>\n  <string name=\"about_export_db\">Экспорт базы данных</string>\n  <string name=\"about_exporting_db\">Экспорт базы данных...</string>\n  <string name=\"about_export_db_result\">Результат экспорта базы данных: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker запущен</string>\n  <string name=\"notification_title\">OSMTracker запущен (#{0})</string>\n  <string name=\"notification_text\">Нажмите для возврата на основной экран</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Отобразить трек</string>\n  <string name=\"displaytrack_map\">Отображать подложку карты</string>\n  <string name=\"displaytrack_north\">С</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Сохранить</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">м</string>\n  <string name=\"various_accuracy\">Точность</string>\n  <string name=\"various_accuracy_with_sats\">Точность {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Ожидание фиксации GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Ожидание направления...</string>\n  <string name=\"various_heading_unknown\">Направление не может быть определено</string>\n  <string name=\"various_export_finished\">Процесс экспорта успешно завершен</string>\n  <string name=\"various_waiting_position\">Местоположение не доступно</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Отображение трека (OSM)</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Обновить &amp; Установить</string>\n  <string name=\"buttons_presets_context_menu_delete\">Удалить</string>\n  <string name=\"buttons_presets_updating_layout\">Обновление...</string>\n  <string name=\"buttons_presets_successful_update\">Макет успешно обновлен</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Макет не обновлен, повторите попытку позже</string>\n  <string name=\"buttons_presets_delete_message\">Вы действительно хотите удалить макет {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Да</string>\n  <string name=\"buttons_presets_successful_delete\">Макет был успешно удален</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Иконка каталога успешно удалена</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">С этим файлом не было связано ни одного каталога значков</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Макет не может быть удален</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Ошибка: нет подключения к интернету</string>\n  <string name=\"available_layouts_response_null_exception\">Ошибка: невозможно подключиться к умолчальному  репозиторию настраиваемых макетов</string>\n  <string name=\"available_layouts_connecting_message\">(Соединение...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Скачать</string>\n  <string name=\"available_layouts_not_available_language\">Ваш язык недоступен, выберите один из списка</string>\n  <string name=\"available_layouts_language_dialog_title\">Доступные Языки</string>\n  <string name=\"available_layouts_checking_language_dialog\">Проверка доступности языка</string>\n  <string name=\"available_layouts_downloading_dialog\">Загрузка...</string>\n  <string name=\"available_layouts_successful_download\">Макет был успешно загружен</string>\n  <string name=\"available_layouts_unsuccessful_download\">Макет не может быть загружен, повторите попытку позже</string>\n  <string name=\"available_layouts_null_response_received\">Ошибка получения данных с сервера</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">По-умолчанию</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Пользовательские</string>\n  <string name=\"github_repository_settings_username\">Логин Github:</string>\n  <string name=\"github_repository_settings_repository_name\">Имя репозитория:</string>\n  <string name=\"github_repository_settings_branch_name\">Имя ветки:</string>\n  <string name=\"github_repository_settings_valid_server\">Действительный репозиторий GitHub</string>\n  <string name=\"github_repository_settings_invalid_server\">Недействительный репозиторий GitHub</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">успешно создан</string>\n  <string name=\"error_creating\">Ошибка создания</string>\n  <string name=\"db_error\">Ошибка базы данных</string>\n  <string name=\"successfully_saved\">успешно сохранен</string>\n  <string name=\"saving_error\">Ошибка сохоранения</string>\n  <string name=\"pr_status\">Статус запроса слияния:</string>\n  <string name=\"repository_information_error\">Ошибка с информацией репозитория</string>\n  <string name=\"successfully_uploaded\">Успешно загружен</string>\n  <string name=\"error_uploading\">Ошибка загрузки</string>\n  <string name=\"gpx_file_read_error\">Ошибка чтения GPX файла </string>\n  <string name=\"gpx_file_not_found\">GPX файл не найден</string>\n  <string name=\"uploading_file\">Загрузка файла:</string>\n  <string name=\"item_selected\">Элемент Выбран:</string>\n  <string name=\"github_repository_private\">Частный:</string>\n  <string name=\"github_creating_repository\">Создать репозиторий</string>\n  <string name=\"github_no_repository_name\">Необходимо указать имя репозитория</string>\n  <string name=\"error_field_required\">Необходимо указать значение для этого поля</string>\n  <string name=\"retrieving_repositories\">Получение репозиториев:</string>\n  <string name=\"error_retrieving_repositories\">Ошибка получения репозиториев</string>\n  <string name=\"successfully_retrieved_repositories\">Репозитории успешно получены</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Настроить</string>\n  <string name=\"github_token_placeholder\">GitHub токен:</string>\n  <string name=\"github_get_token_btn\">Получить токен</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Как получить GitHub токен:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Нажмите кнопку чтобы открыть вебсайт GitHub и создать токен. Eсли необходимо, то войдите в Вашу учетную запись GitHub. </string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Выберите  \\\"Tokens (Classic)\\\" и нажмите кнопку \\\"Сгенерировать новый токен\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Дайте понятное название Вашему токену.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Выберите срок годности . Мы рекомендуем \\\"Без срока годности\\\", чтобы не нужно было повторять этот шаг.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Выберите область или разрешения, который Вы хотите дать этому токену (для OSMTracker нужно только разрешение \\\"repo\\\") </string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Нажмите кнопку \\\"Сгенерировать токен\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Скопируйте сгенерированый токен в поле \\\"GitHub токен\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Для удаления учетнрых данных, сохраните пустое значение.</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Сообщение коммита:</string>\n  <string name=\"upload_to_github_create_fork\">Создать\\nфорк</string>\n  <string name=\"upload_to_github_open_pull_request\">Открыть запрос слияния</string>\n  <string name=\"upload_to_github_select_repo\">Выбрать репозиторий</string>\n  <string name=\"upload_to_github_create_repository\">Создать репозиторий</string>\n  <string name=\"upload_to_github_commit_btn\">Зафиксировать</string>\n  <string name=\"upload_to_github_configure\">Настроить</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Владелец исходного репозитория</string>\n  <string name=\"upload_to_github_forked_repo_name\">Название исходного репозитория</string>\n  <string name=\"create\">Создать</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Заголовок запроса слияния</string>\n  <string name=\"upload_to_github_pr_description\">Описание запроса слияния</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker для Android ™ Введение</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Добро пожаловать в OSMTracker для Android ™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Это свободное приложение, уважающее вашу свободу!</string>\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Удачного трекинга 🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker для Android будет использовать ваше местоположение по GPS для записи точек трека и путевых точек, даже если приложение работает в фоновом режиме.\n\\\\ nВаши данные не используются для поддержки рекламы.</string>\n  <string name=\"no_app_to_handle_file_type\">Не найдено приложение для открытия этого файла.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Запись аудио</string>\n  <string name=\"wpt_stillimage\">Фото</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Priblížiť</string>\n  <string name=\"acc.zoom_out\">Oddialiť</string>\n  <string name=\"acc.zoom_center\">Priblížiť na stred</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikátor sily signálu satelitov</string>\n  <string name=\"acc.record_indicator\">Indikátor prebiehajúceho záznamu</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikátor stavu stopy</string>\n  <string name=\"acc.upload_status\">OpenStreetMap indikátor stavu odosielania</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Nastavenia</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Nastavenia GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Zobraziť systémovú obrazovku s nastaveniami GPS</string>\n  <string name=\"prefs_check_gps_startup\">Skontrolovať GPS po spustení</string>\n  <string name=\"prefs_check_gps_startup_summary\">Skontrolovať, či je GPS vypnuté po spustení a navrhnúť jeho zapnutie</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorovať čas GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorovať čas GPS a použiť čas Androidu pre časové značky</string>\n  <string name=\"prefs_use_barometer\">Zaznamenávať barometrický tlak [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Prepínač vyžaduje reštart stopy</string>\n  <string name=\"prefs_gps_logging_interval\">Interval logovania GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Použite 0 pre najkratší možný (Ovplyvní výdrž batérie)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekundy</string>\n  <string name=\"prefs_gps_logging_min_distance\">Vzdialenosť medzi záznamami GPS</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Najmenšia vzdialenosť medzi bodmi stopy v metroch. Pre najhustejší záznam použite 0</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metrov</string>\n  <string name=\"prefs_ui\">Užívateľské rozhranie</string>\n  <string name=\"prefs_ui_picture_source\">Predvolený zdroj fotografií</string>\n  <string name=\"prefs_ui_picture_source_summary\">Zachytiť fotografie fotoaparátom alebo vybrať z galérie?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Fotoaparát</item>\n    <item>Galéria</item>\n    <item>Vždy sa opýtať</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Rozloženie tlačidiel</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Povoliť určenie vlastného rozloženia tlačidiel (Viď dokumenty)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">PREDVOLENÉ ROZLOŽENIE</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Štandardné</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">STIAHNUTÉ ROZLOŽENIE</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Nemáte stiahnuté žiadne súbory s rozloženiami.</string>\n  <string name=\"prefs_ui_available_layout\">Dostupné rozloženia</string>\n  <string name=\"prefs_ui_github_repository_settings\">Nastavenia repozitára Github</string>\n  <string name=\"prefs_ui_orientation\">Orientácia</string>\n  <string name=\"prefs_ui_orientation_summary\">Preferovaná orientácia pre obrazovku s tlačidlami</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automaticky</item>\n    <item>Na výšku</item>\n    <item>Na šírku</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Dĺžka hlasového záznamu</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekundy/sekúnd</string>\n  <string name=\"prefs_theme\">Grafická téma hlavnej obrazovky</string>\n  <string name=\"prefs_theme_summary\">Je potrebný reštart aplikácie na vykonanie zmien</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Štandardná OS</item>\n    <item>Štandardná OS (Tmavá)</item>\n    <item>Štandardná OS (Svetlá)</item>\n    <item>Vysoký kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Obrazovka vždy zapnutá</string>\n  <string name=\"prefs_display_always_on_summary\">Obrazovka zostane zapnutá počas stopovania. Vypnite pre úsporu batérie</string>\n  <string name=\"prefs_displaytrack_osm\">OSM pozadie</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Zobraziť OpenStreetMap pod stopou. Potrebuje dátové pripojenie</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Vždy zobrazovať na pozadí OpenStreetMap. Vyžaduje dátové pripojenie</string>\n  <string name=\"prefs_output\">Výstup GPX súboru</string>\n  <string name=\"prefs_storage_dir\">Ukladať do priečinka pre dokumenty</string>\n  <string name=\"prefs_storage_dir_hint\">Použité až v ďalšej stope (nie v aktuálnej)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Jeden adresár na stopu</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Uloží každú stopu a priradené súbory do jej vlastného adresára</string>\n  <string name=\"prefs_output_filename\">Názov súboru pre pomenované stopy</string>\n  <string name=\"prefs_output_filename_summary\">Vzor pre pomenovanie súboru ak má stopa názov</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Názov stopy</item>\n    <item>Názov, dátum a čas spustenia</item>\n    <item>Dátum a čas spustenia, názov</item>\n    <item>Dátum a čas spustenia</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Štítok názvu súboru</string>\n  <string name=\"prefs_output_filename_label_summary\">Tento štítok bude pripojený na koniec názvu súboru</string>\n  <string name=\"prefs_output_accuracy\">Presnosť v GPX súbore</string>\n  <string name=\"prefs_output_accuracy_summary\">Povoliť informácie o presnosti v GPX súbore, s názvom cestovného bodu alebo v oddelenom poli</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Žiadna</item>\n    <item>S názvom cestovného bodu</item>\n    <item>V komentári cestovného bodu</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Použiť odhad HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Vyplniť HDOP v GPX s odhadovanou hodnotou presnosti</string>\n  <string name=\"prefs_sound_enabled\">Zapnúť zvuky</string>\n  <string name=\"prefs_sound_enabled_summary\">Prehrávať zvuky pri spustení a ukončení nahrávania hlasovej stopy</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Vymazať autentifikáciu OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Vymaže prihlasovacie údaje a oprávnenia OSM uložené v telefóne a prinúti OSMTracker, aby si ich opätovne vyžiadal</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Znova sa pokúšate autorizovať OSMTracker, aby mohol nahrávať záznamy stôp. Ste si istý?</string>\n  <string name=\"prefs_map_tile\">Poskytovateľ mapových dlaždíc</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Žiadne</item>\n    <item>V komentári</item>\n    <item>V rozšírení</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportovať aj smer kompasu</string>\n  <string name=\"prefs_compass_heading_summary\">Určiť, či a ako sa majú exportovať údaje kompasu do súboru GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Rôzne</string>\n  <string name=\"tag.restriction\">Obmedzenie</string>\n  <string name=\"tag.car\">Automobil</string>\n  <string name=\"tag.tourism\">Turistika</string>\n  <string name=\"tag.amenity\">Zariadenie</string>\n  <string name=\"tag.amenity_more\">Zariadenie (+)</string>\n  <string name=\"tag.way\">Cesta</string>\n  <string name=\"tag.track\">Nespevnená\ncesta</string>\n  <string name=\"tag.landuse\">Územie</string>\n  <string name=\"tag.misc_bus_stop\">Autobusová\nzastávka</string>\n  <string name=\"tag.misc_railway\">Železničná\ntrať</string>\n  <string name=\"tag.misc_telephone\">Telefón</string>\n  <string name=\"tag.misc_post_box\">Poštová\nschránka</string>\n  <string name=\"tag.misc_atm\">Bankomat</string>\n  <string name=\"tag.misc_bollard\">Pätník</string>\n  <string name=\"tag.misc_toilets\">Toalety</string>\n  <string name=\"tag.misc_shelter\">Prístrešok</string>\n  <string name=\"tag.misc_surveillance\">Pozorovanie</string>\n  <string name=\"tag.restriction_20\">Max. 20</string>\n  <string name=\"tag.restriction_30\">Max. 30</string>\n  <string name=\"tag.restriction_40\">Max. 40</string>\n  <string name=\"tag.restriction_50\">Max. 50</string>\n  <string name=\"tag.restriction_60\">Max. 60</string>\n  <string name=\"tag.restriction_70\">Max. 70</string>\n  <string name=\"tag.restriction_80\">Max. 80</string>\n  <string name=\"tag.restriction_90\">Max. 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max. 130</string>\n  <string name=\"tag.restriction_no_exit\">Slepá ulica</string>\n  <string name=\"tag.restriction_traffic_light\">Semafor</string>\n  <string name=\"tag.restriction_one_way\">Jednosmerka</string>\n  <string name=\"tag.car_fuel_station\">Čerpacia\nstanica</string>\n  <string name=\"tag.car_parking\">Parkovanie</string>\n  <string name=\"tag.car_emergency_phone\">Tiesňový\ntelefón</string>\n  <string name=\"tag.car_turning_circle\">Cesta na\notáčanie</string>\n  <string name=\"tag.car_speed_camera\">Radar</string>\n  <string name=\"tag.tourism_view_point\">Vyhliadka</string>\n  <string name=\"tag.tourism_information\">Informácie</string>\n  <string name=\"tag.tourism_picnic\">Miesto pre piknik</string>\n  <string name=\"tag.tourism_attraction\">Atrakcia</string>\n  <string name=\"tag.tourism_theme_park\">Zábavný\npark</string>\n  <string name=\"tag.tourism_castle\">Hrad</string>\n  <string name=\"tag.tourism_monument\">Pamätník</string>\n  <string name=\"tag.tourism_museum\">Múzeum</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Lavička</string>\n  <string name=\"tag.amenity_water\">Voda</string>\n  <string name=\"tag.amenity_pharmacy\">Lekáreň</string>\n  <string name=\"tag.amenity_shop\">Obchod</string>\n  <string name=\"tag.amenity_marina\">Prístav</string>\n  <string name=\"tag.amenity_sport\">Šport</string>\n  <string name=\"tag.amenity_taxi\">Taxislužba</string>\n  <string name=\"tag.amenity_doctors\">Nemocnica,\\nDoktori</string>\n  <string name=\"tag.amenity_recycling\">Recyklácia</string>\n  <string name=\"tag.amenity_place_of_worship\">Náboženské\\nmiesto</string>\n  <string name=\"tag.amenity_post_office\">Pošta</string>\n  <string name=\"tag.amenity_library\">Knižnica</string>\n  <string name=\"tag.amenitymore_school\">Škola</string>\n  <string name=\"tag.amenitymore_police\">Polícia</string>\n  <string name=\"tag.amenitymore_fire_station\">Požiarna\nstanica</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Ihrisko</string>\n  <string name=\"tag.amenitymore_pub\">Hostinec</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Internát</string>\n  <string name=\"tag.amenitymore_restaurant\">Reštaurácia</string>\n  <string name=\"tag.amenitymore_fastfood\">Rýchle\nobčerstvenie</string>\n  <string name=\"tag.amenitymore_camp_site\">Táborisko</string>\n  <string name=\"tag.way_bridge\">Most</string>\n  <string name=\"tag.way_zebra_crossing\">Prechod\npre chodcov</string>\n  <string name=\"tag.way_motorway\">Diaľnica</string>\n  <string name=\"tag.way_trunk\">Rýchlostná\nkomunikácia</string>\n  <string name=\"tag.way_primary\">Cesta\n1. triedy</string>\n  <string name=\"tag.way_secondary\">Cesta\n2. triedy</string>\n  <string name=\"tag.way_tertiary\">Cesta\n3. triedy</string>\n  <string name=\"tag.way_residential\">Rezidenčná</string>\n  <string name=\"tag.way_service\">Servisná</string>\n  <string name=\"tag.track_track\">Nespevnená\ncesta</string>\n  <string name=\"tag.track_cycleway\">Cesta pre\nbicykle</string>\n  <string name=\"tag.track_footway\">Chodník</string>\n  <string name=\"tag.track_bridleway\">Cesta pre\nkone</string>\n  <string name=\"tag.track_steps\">Schody</string>\n  <string name=\"tag.track_living_street\">Obytná\nzóna</string>\n  <string name=\"tag.track_pedestrian\">Pešia zóna</string>\n  <string name=\"tag.track_grade1\">Stupeň 1</string>\n  <string name=\"tag.track_grade2\">Stupeň 2</string>\n  <string name=\"tag.track_grade3\">Stupeň 3</string>\n  <string name=\"tag.track_grade4\">Stupeň 4</string>\n  <string name=\"tag.track_grade5\">Stupeň 5</string>\n  <string name=\"tag.landuse_farm\">Farma</string>\n  <string name=\"tag.landuse_landfill\">Skládka\nodpadkov</string>\n  <string name=\"tag.landuse_basin\">Povodie</string>\n  <string name=\"tag.landuse_reservoir\">Nádrž</string>\n  <string name=\"tag.landuse_forest\">Les</string>\n  <string name=\"tag.landuse_allotments\">Záhrady</string>\n  <string name=\"tag.landuse_cemetery\">Cintorín</string>\n  <string name=\"tag.landuse_recreation_ground\">Rekreačná\\noblasť</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker pre Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inšpirovaný OSMTrackerom pre Windows Mobile vám umožňuje stopovať vaše výlety, označiť významné body (hlasovým záznamom, fotografiami), exportovať ich do formátu GPX na neskoršie použitie s nástrojmi pre Open Street Map, ako je JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Záznam prejdených trás</string>\n  <string name=\"tracklogger_waiting_gps\">Čaká sa na GPS polohu pre povolenie tlačidiel…</string>\n  <string name=\"tracklogger_voicerec_title\">Hlasový záznam</string>\n  <string name=\"tracklogger_voicerec_text\">Zaznamenáva sa zvuková stopa pre {0}.</string>\n  <string name=\"tracklogger_voicerec_stop\">Zastaviť</string>\n  <string name=\"tracklogger_btnBack\">Späť</string>\n  <string name=\"tracklogger_tracked\">Zaznamenané trasy: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS vypnuté</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS je vypnuté. Chcete ho zapnúť ?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Z galérie alebo fotoaparátu?</string>\n  <string name=\"tracklogger_camera\">Zachytiť fotografiu fotoaparátom</string>\n  <string name=\"tracklogger_gallery\">Vybrať fotografiu z galérie</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Zoznam cestovných bodov</string>\n  <string name=\"wplist_latitude\">Z. šírka: </string>\n  <string name=\"wplist_longitude\">Z. dĺžka: </string>\n  <string name=\"wplist_elevation\">Výška: </string>\n  <string name=\"wplist_accuracy\">Presnosť: </string>\n  <string name=\"wplist_compass\">Smerovanie kompasu:</string>\n  <string name=\"wplist_compass_accuracy\">Presnosť kompasu:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Správca prejdených trás</string>\n  <string name=\"trackmgr_tracklist\">Zoznam prejdených trás:</string>\n  <string name=\"trackmgr_waypoints_count\">Body trasy: </string>\n  <string name=\"trackmgr_trackpoints_count\">Trasové body: </string>\n  <string name=\"trackmgr_empty\">Nemáte zaznamenané žiadne prejdené trasy.</string>\n  <string name=\"trackmgr_newtrack_hint\">Zapnúť záznam novej stopy.</string>\n  <string name=\"trackmgr_newtrack_error\">Nedá sa vytvoriť nový záznam trasy: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Práve zaznamenávate <b>stopu #{0}</b>\\nPre pokračovanie ju zvoľte v zozname</string>\n  <string name=\"trackmgr_contextmenu_stop\">Zastaviť záznam</string>\n  <string name=\"trackmgr_contextmenu_resume\">Pokračovať v zázname</string>\n  <string name=\"trackmgr_contextmenu_delete\">Odstrániť</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportovať</string>\n  <string name=\"trackmgr_contextmenu_share\">Zdieľať</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Odoslať na OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Nahrať na GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Zobraziť</string>\n  <string name=\"trackmgr_contextmenu_details\">Podrobnosti</string>\n  <string name=\"trackmgr_contextmenu_title\">Záznam #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Záznam #{0} bude odstránený</string>\n  <string name=\"trackmgr_deleteall_confirm\">Všetky stopy budú zmazané. Pokračovať?</string>\n  <string name=\"trackmgr_exporting\">Exportuje sa stopa #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Pripravuje sa export...</string>\n  <string name=\"trackmgr_export_error\">Nedá sa exportovať stopa: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Všetky stop budú exportované, čo môže chvíľu trvať. Pokračovať?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Nepodarilo sa spracovať stopu: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Podrobnosti o stope</string>\n  <string name=\"trackdetail_startdate\">Čas začatia:</string>\n  <string name=\"trackdetail_enddate\">Čas ukončenia:</string>\n  <string name=\"trackdetail_startloc\">Začala v bode:</string>\n  <string name=\"trackdetail_endloc\">Skončila v bode:</string>\n  <string name=\"trackdetail_exportdate\">Exportovaná:</string>\n  <string name=\"trackdetail_osm_upload_date\">Odoslané na OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Exportovať ako GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Zatiaľ neexportovaná)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Zatiaľ neodovzdané)</string>\n  <string name=\"trackdetail_export_display\">Zobraziť</string>\n  <string name=\"trackdetail_name\">Názov</string>\n  <string name=\"trackdetail_description\">Popis</string>\n  <string name=\"trackdetail_tags\">Tagy (oddelené čiarkou)</string>\n  <string name=\"trackdetail_description_mandatory\">Musíte zadať popis</string>\n  <string name=\"osm_visibility_private\">Súkromný</string>\n  <string name=\"osm_visibility_public\">Verejný</string>\n  <string name=\"osm_visibility_trackable\">Sledovateľné</string>\n  <string name=\"osm_visibility_identifiable\">Identifikovateľné</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Odoslať na OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Uložiť a odoslať</string>\n  <string name=\"osm_upload_tmpfile_failed\">Nemôžem exportovať záznam trasy do dočasného súboru</string>\n  <string name=\"osm_upload_oauth_failed\">Nemôžem overiť pripojenie k OSM</string>\n  <string name=\"osm_upload_sending\">Posielam stopu #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Čakám na odpoveď OpenStreetMap servera...</string>\n  <string name=\"osm_upload_error\">Počas odovzdávania záznamu trasy nastala chyba</string>\n  <string name=\"osm_upload_bad_response\">Server OSM vrátil chybu: ({0}) správa o chybe {1}</string>\n  <string name=\"osm_upload_unauthorized\">Chyba autorizácie. Chcete odstrániť poverenia pre OpenStreetMap uložené v zariadení?</string>\n  <string name=\"osm_upload_sucess\">Odovzdávanie do OpenStreetMap bolo úspešné</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Zrušiť</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Hlasový záznam</string>\n  <string name=\"gpsstatus_record_stillimage\">Zachytiť fotografiu</string>\n  <string name=\"gpsstatus_record_textnote\">Písomná poznámka</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Názov prechodného bodu/text</string>\n  <string name=\"waypoint_name_hint\">Zadať názov prechodného bodu</string>\n  <string name=\"edit_waypoint_bt_preview\">Otvoriť súbor</string>\n  <string name=\"edit_waypoint_bt_save\">Uložiť</string>\n  <string name=\"edit_waypoint_bt_delete\">Odstrániť</string>\n  <string name=\"edit_waypoint_bt_cancel\">Zrušiť</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Odstrániť prechodný bod</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Vymazať tento prechodný bod?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Odstrániť</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Zrušiť</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Uložiť</string>\n  <string name=\"edit_note_bt_delete\">Odstrániť</string>\n  <string name=\"edit_note_bt_cancel\">Zrušiť</string>\n  <string name=\"delete_note_confirm_bt_ok\">Odstrániť</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Zrušiť</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Nastavenia</string>\n  <string name=\"menu_waypointlist\">Cestovné body</string>\n  <string name=\"menu_about\">O aplikácii</string>\n  <string name=\"menu_displaytrack\">Zobraziť stopu</string>\n  <string name=\"menu_stoptracking\">Zastaviť a uložiť</string>\n  <string name=\"menu_newtrack\">Nová stopa</string>\n  <string name=\"menu_deletetracks\">Zmazať všetky stopy</string>\n  <string name=\"menu_continue\">Pokračovať v stopovaní</string>\n  <string name=\"menu_stopcurrenttrack\">Zastaviť aktuálnu stopu</string>\n  <string name=\"menu_save\">Uložiť</string>\n  <string name=\"menu_cancel\">Zrušiť</string>\n  <string name=\"menu_export\">Exportovať ako GPX</string>\n  <string name=\"menu_osm_upload\">Odovzdávanie do OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Centrovať na GPS polohu</string>\n  <string name=\"menu_exportall\">Exportovať všetko ako GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Nedá sa zapisovať do externého úložiska.</string>\n  <string name=\"error_create_track_dir\">Nemôžem vytvoriť adresár %s na záznam trasy</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Prosím, skontrolujte, či je ext. úložisko správne vložené a pripojené.</string>\n  <string name=\"error_voicerec_failed\">Hlasový záznam zlyhal</string>\n  <string name=\"error_userlayout_parsing\">Chyba počas analýzi XML súboru rozloženia. Prosím, vráťte sa k štandardnému rozloženiu.</string>\n  <string name=\"error_gh_token_lenght\">Token musí mať 40 znakov</string>\n  <!--messages-->\n  <string name=\"permission_required\">Vyžaduje sa oprávnenie</string>\n  <string name=\"storage_permission_for_export_GPX\">Pre export GPX stopy sa vyžaduje zápis na úložisko.</string>\n  <string name=\"storage_permission_for_display_track\">Na správne zobrazenie stopy sa vyžaduje prístup k úložisku.</string>\n  <string name=\"storage_permission_for_share_track\">Na správne zdieľanie stopy sa vyžaduje prístup k úložisku.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">Na nahratie stopy do OSM sa vyžaduje prístup k úložisku.</string>\n  <string name=\"acccept\">Prijať</string>\n  <string name=\"gps_perms_required\">Bez povelenia GPS nemožno pokračovať</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Stopované s OSMTracker-om pre Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Varovanie: Hodnoty HDOP nie sú vrátené HDOP z GPS zariadenia. Sú odhadnuté pre presnosť umiestnenia v metroch, a nemali by byť vložené do účtu.</string>\n  <!--About screen-->\n  <string name=\"about\">O aplikácii</string>\n  <string name=\"about_text\">Pre viac informácií, dokumentov a nahlásenie problému, navštívte domovskú stránku projektu:</string>\n  <string name=\"about_translate_text\">Pomôžte preložiť OSMTracker:</string>\n  <string name=\"about_debug_info\">Ladiace info</string>\n  <string name=\"about_export_db\">Exportovať databázu</string>\n  <string name=\"about_exporting_db\">Exportuje sa databáza...</string>\n  <string name=\"about_export_db_result\">Výsledok exportu databázy: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker stopuje</string>\n  <string name=\"notification_title\">OSMTracker stopuje (#{0})</string>\n  <string name=\"notification_text\">Ťuknite sem na zobrazenie hlavnej obrazovky</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Zobrazenie stopy</string>\n  <string name=\"displaytrack_map\">Zobraziť mapu v pozadí</string>\n  <string name=\"displaytrack_north\">S</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Uložiť</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Presnosť</string>\n  <string name=\"various_accuracy_with_sats\">Presnosť {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Čaká sa na pozíciu GPS… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Čaká sa na smerovanie...</string>\n  <string name=\"various_heading_unknown\">Nedá sa zistiť smerovanie</string>\n  <string name=\"various_export_finished\">Proces exportovania prebehol úspešne</string>\n  <string name=\"various_waiting_position\">Poloha nie je dostupná</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Zobrazenie OpenStreetMap stopy</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Aktualizovať &amp; Inštalovať</string>\n  <string name=\"buttons_presets_context_menu_delete\">Vymazať</string>\n  <string name=\"buttons_presets_updating_layout\">Aktualizujem...</string>\n  <string name=\"buttons_presets_successful_update\">Rozloženie bolo úspešne aktualizované</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Rozloženie nebolo aktualizované, skúste inokedy</string>\n  <string name=\"buttons_presets_delete_message\">Naozaj chcete vymazať rozloženie {0} ?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Áno</string>\n  <string name=\"buttons_presets_successful_delete\">Rozloženie bolo úspešne odstránené</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Priečinok piktogramov bol úspešne vymazaný</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Tento súbor nemal priradený žiadny priečinok pre priktogramy</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Rozloženie sa nepodarilo odstrániť</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Chyba: nepodarilo sa pripojiť na Internet</string>\n  <string name=\"available_layouts_response_null_exception\">Chyba: nepodarilo sa pripojiť na predvolený repozitár s prisposobenými rozloženiami tlačidiel</string>\n  <string name=\"available_layouts_connecting_message\">(Pripájanie...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Stiahnuť</string>\n  <string name=\"available_layouts_not_available_language\">Váš jazyk nie je dostupný. Vyberte jeden zo zoznamu</string>\n  <string name=\"available_layouts_language_dialog_title\">Dostupné jazyky</string>\n  <string name=\"available_layouts_checking_language_dialog\">Kontrolujú sa miestne verzie jazykov</string>\n  <string name=\"available_layouts_downloading_dialog\">Sťahovanie...</string>\n  <string name=\"available_layouts_successful_download\">Rozloženie bolo úspešne stiahnuté</string>\n  <string name=\"available_layouts_unsuccessful_download\">Rozloženie sa nedá stiahnuť, skúste inokedy</string>\n  <string name=\"available_layouts_null_response_received\">Nastala chyba pri sťahovaní údajov zo servera</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Predvolené</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Prispôsobené</string>\n  <string name=\"github_repository_settings_username\">Meno používateľa na Githube:</string>\n  <string name=\"github_repository_settings_repository_name\">Názov repozitára:</string>\n  <string name=\"github_repository_settings_branch_name\">Názov vetvy:</string>\n  <string name=\"github_repository_settings_valid_server\">Platný názov Github repozitára</string>\n  <string name=\"github_repository_settings_invalid_server\">Neplatný názov Github repozitára</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">úspešne vytvorené</string>\n  <string name=\"error_creating\">Chyba pri vytváraní</string>\n  <string name=\"db_error\">Chyba databázy</string>\n  <string name=\"successfully_saved\">úspešne uložené</string>\n  <string name=\"saving_error\">Chyba pri ukladaní</string>\n  <string name=\"repository_information_error\">Chyba s infomáciami o repozitári</string>\n  <string name=\"successfully_uploaded\">Úspešne nahraté</string>\n  <string name=\"error_uploading\">Chyba pri nahrávaní</string>\n  <string name=\"gpx_file_read_error\">Chyba pri načítaní GPX súboru</string>\n  <string name=\"gpx_file_not_found\">Nenašiel sa GPX súbor</string>\n  <string name=\"uploading_file\">Nahrávanie súboru:</string>\n  <string name=\"item_selected\">Vybratá položka:</string>\n  <string name=\"github_repository_private\">Súkromné:</string>\n  <string name=\"github_creating_repository\">Vytváranie repozitára</string>\n  <string name=\"github_no_repository_name\">Musíte zadať názov repozitára</string>\n  <string name=\"error_field_required\">Musíte zadať hodnotu do tohto poľa</string>\n  <string name=\"retrieving_repositories\">Získavam repozitáre...</string>\n  <string name=\"error_retrieving_repositories\">Chyba pri získavaní repozitárov</string>\n  <string name=\"successfully_retrieved_repositories\">Získavanie repozitárov prebehlo úspešne</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Nastaviť</string>\n  <string name=\"github_token_placeholder\">Token GitHubu:</string>\n  <string name=\"github_get_token_btn\">Získať token:</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_configure\">Nastaviť</string>\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Hlasový záznam</string>\n  <string name=\"wpt_stillimage\">Fotografia</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logotip OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Povečaj</string>\n  <string name=\"acc.zoom_out\">Pomanjšaj</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Kazalnik moči satelitskega signala</string>\n  <string name=\"acc.record_indicator\">Kazalnik snemanja v teku</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Kazalnik stanja sledenja</string>\n  <string name=\"acc.upload_status\">Kazalnik stanja pošiljanja OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Nastavitve</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Nastavitve GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Prikaži zaslon sistemskih nastavitev GPS</string>\n  <string name=\"prefs_check_gps_startup\">Preveri GPS ob zagonu</string>\n  <string name=\"prefs_check_gps_startup_summary\">Preveri, ali je GPS ob zagonu onemogočen in ponudi omogočanje</string>\n  <string name=\"prefs_gps_ignore_clock\">Prezri uro GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Prezri uro GPS in uporabi Androidovo uro za časovne žige</string>\n  <string name=\"prefs_gps_logging_interval\">Razmik beleženja GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Uporabite 0 za najmanjši možni razmik (vpliva na porabo energije)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekund</string>\n  <string name=\"prefs_ui\">Uporabniški vmesnik</string>\n  <string name=\"prefs_ui_picture_source\">Privzeti vir fotografij</string>\n  <string name=\"prefs_ui_picture_source_summary\">Dobi fotografije iz fotoaparata ali galerije?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Fotoaparat</item>\n    <item>Galerija</item>\n    <item>Vedno vprašaj</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Prednastavitve gumbov</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Izberite nabor gumbov po meri (glejte dokumentacijo)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Privzeto</string>\n  <string name=\"prefs_ui_orientation\">Usmerjenost</string>\n  <string name=\"prefs_ui_orientation_summary\">Priljubljena usmerjenost za zaslon z gumbi</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Samodejna</item>\n    <item>Pokončna</item>\n    <item>Ležeča</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Trajanje glasovnega posnetka</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekund</string>\n  <string name=\"prefs_theme\">Grafična tema glavnega zaslona</string>\n  <string name=\"prefs_theme_summary\">Za uveljavitev sprememb je zahtevan ponovni zagon programa</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Privzeta od OS-a</item>\n    <item>Privzeta od OS-a (temna)</item>\n    <item>Privzeta od OS-a (svetla)</item>\n    <item>Visokokontrastna</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Zaslon vedno vklopljen</string>\n  <string name=\"prefs_display_always_on_summary\">Zaslon bo ob sledenju ostal vklopljen. Onemogočite, da prihranite energijo</string>\n  <string name=\"prefs_displaytrack_osm\">Zemljevid ozadja</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Prikaži zemljevid OpenStreetMap pod sledjo. Zahteva podatkovno povezavo</string>\n  <string name=\"prefs_output\">Nastavitve GPX</string>\n  <string name=\"prefs_storage_dir\">Mapa zunanje pom. naprave (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Uveljavljeno za naslednjo sled (ne trenutno)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Ena mapa na sled</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Shrani vsako sled in povezane datoteke v svojo mapo</string>\n  <string name=\"prefs_output_filename\">Ime datoteke za poimen. sledi</string>\n  <string name=\"prefs_output_filename_summary\">Vzorec imena datoteke, če ima sled ime</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Ime sledi</item>\n    <item>Ime, začetni datum in čas</item>\n    <item>Začetni datum in čas</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Natančnost v datoteki GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Dodaj podatke o natančnosti z imenom točke ali v njeni pripombi v datoteko GPX</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Brez</item>\n    <item>Z imenom točke</item>\n    <item>V pripombi točke</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Uporabi približek HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Zapolni HDOP v GPX-u z vrednostjo približka iz natančnosti</string>\n  <string name=\"prefs_sound_enabled\">Omogoči zvok</string>\n  <string name=\"prefs_sound_enabled_summary\">Predvajaj zvok, ko se snemanje glasu začne in konča</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Ponastavi overitev OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Pozabi na poverila OSM in dovoljenja in prisili program OSMTracker, da za njih ponovno vpraša</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Za ponovno pošiljanje sledi boste morali pooblastiti program OSMTracker. Ali ste prepričani?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Cycle Map</item>\n    <item>MapQuest Open</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Brez</item>\n    <item>v pripombi</item>\n    <item>v razširitvi</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Določi, ali in kako naj bodo podatki kompasa izvoženi v datoteko GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Razno</string>\n  <string name=\"tag.restriction\">Omejitev</string>\n  <string name=\"tag.car\">Avto</string>\n  <string name=\"tag.tourism\">Turizem</string>\n  <string name=\"tag.amenity\">Dobrine</string>\n  <string name=\"tag.amenity_more\">Dobrine (+)</string>\n  <string name=\"tag.way\">Pot</string>\n  <string name=\"tag.track\">Sled</string>\n  <string name=\"tag.landuse\">Uporaba zemljišča</string>\n  <string name=\"tag.misc_bus_stop\">Avtobusna postaja</string>\n  <string name=\"tag.misc_railway\">Železnica</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Poštni nabiralnik</string>\n  <string name=\"tag.misc_atm\">Bankomat</string>\n  <string name=\"tag.misc_bollard\">Stebriček</string>\n  <string name=\"tag.misc_toilets\">Stranišča</string>\n  <string name=\"tag.misc_shelter\">Zavetišče</string>\n  <string name=\"tag.misc_surveillance\">Nadzor</string>\n  <string name=\"tag.restriction_20\">Največ 20</string>\n  <string name=\"tag.restriction_30\">Največ 30</string>\n  <string name=\"tag.restriction_40\">Največ 40</string>\n  <string name=\"tag.restriction_50\">Največ 50</string>\n  <string name=\"tag.restriction_60\">Največ 60</string>\n  <string name=\"tag.restriction_70\">Največ 70</string>\n  <string name=\"tag.restriction_80\">Največ 80</string>\n  <string name=\"tag.restriction_90\">Največ 90</string>\n  <string name=\"tag.restriction_100\">Največ 100</string>\n  <string name=\"tag.restriction_110\">Največ 110</string>\n  <string name=\"tag.restriction_120\">Največ 120</string>\n  <string name=\"tag.restriction_130\">Največ 130</string>\n  <string name=\"tag.restriction_no_exit\">Brez izhoda</string>\n  <string name=\"tag.restriction_traffic_light\">Semafor</string>\n  <string name=\"tag.restriction_one_way\">Enosmerna cesta</string>\n  <string name=\"tag.car_fuel_station\">Bencinska črpalka</string>\n  <string name=\"tag.car_parking\">Parkiranje</string>\n  <string name=\"tag.car_emergency_phone\">Telefon v sili</string>\n  <string name=\"tag.car_turning_circle\">Krožišče</string>\n  <string name=\"tag.car_speed_camera\">Hitrostna kamera</string>\n  <string name=\"tag.tourism_view_point\">Razgeldna točka</string>\n  <string name=\"tag.tourism_information\">Informacije</string>\n  <string name=\"tag.tourism_picnic\">Mesto za piknik</string>\n  <string name=\"tag.tourism_attraction\">Zanimivost</string>\n  <string name=\"tag.tourism_theme_park\">Tematski park</string>\n  <string name=\"tag.tourism_castle\">Grad</string>\n  <string name=\"tag.tourism_monument\">Spomenik</string>\n  <string name=\"tag.tourism_museum\">Muzej</string>\n  <string name=\"tag.tourism_cinema\">Kino</string>\n  <string name=\"tag.amenity_bench\">Klop</string>\n  <string name=\"tag.amenity_water\">Voda</string>\n  <string name=\"tag.amenity_pharmacy\">Lekarna</string>\n  <string name=\"tag.amenity_shop\">Trgovina</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Šport</string>\n  <string name=\"tag.amenity_taxi\">Taksi</string>\n  <string name=\"tag.amenity_doctors\">Bolnica,\\nZdravniki</string>\n  <string name=\"tag.amenity_recycling\">Recikliranje</string>\n  <string name=\"tag.amenity_place_of_worship\">Mesto za\\nčaščenje</string>\n  <string name=\"tag.amenity_post_office\">Pošta</string>\n  <string name=\"tag.amenity_library\">Knjižnica</string>\n  <string name=\"tag.amenitymore_school\">Šola</string>\n  <string name=\"tag.amenitymore_police\">Policija</string>\n  <string name=\"tag.amenitymore_fire_station\">Gasilski dom</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Igrišče</string>\n  <string name=\"tag.amenitymore_pub\">Gostilna</string>\n  <string name=\"tag.amenitymore_hotel\">Hotel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Hostel</string>\n  <string name=\"tag.amenitymore_restaurant\">Restavracija</string>\n  <string name=\"tag.amenitymore_fastfood\">Hitra prehrana</string>\n  <string name=\"tag.amenitymore_camp_site\">Mesto za kampiranje</string>\n  <string name=\"tag.way_bridge\">Most</string>\n  <string name=\"tag.way_zebra_crossing\">Prehid za pešce</string>\n  <string name=\"tag.way_motorway\">Avtocesta</string>\n  <string name=\"tag.way_trunk\">Deblo</string>\n  <string name=\"tag.way_primary\">Primaren</string>\n  <string name=\"tag.way_secondary\">Sekundaren</string>\n  <string name=\"tag.way_tertiary\">Terciaren</string>\n  <string name=\"tag.way_residential\">Bivališče</string>\n  <string name=\"tag.way_service\">Storitev</string>\n  <string name=\"tag.track_track\">Sled</string>\n  <string name=\"tag.track_cycleway\">Kolesarska pot</string>\n  <string name=\"tag.track_footway\">Pešpot</string>\n  <string name=\"tag.track_bridleway\">Jezdna pot</string>\n  <string name=\"tag.track_steps\">Koraki</string>\n  <string name=\"tag.track_living_street\">Ulica s prebivališči</string>\n  <string name=\"tag.track_pedestrian\">Pešec</string>\n  <string name=\"tag.track_grade1\">1. stopnja</string>\n  <string name=\"tag.track_grade2\">2. stopnja</string>\n  <string name=\"tag.track_grade3\">3. stopnja</string>\n  <string name=\"tag.track_grade4\">4. stopnja</string>\n  <string name=\"tag.track_grade5\">5. stopnja</string>\n  <string name=\"tag.landuse_farm\">Kmetija</string>\n  <string name=\"tag.landuse_landfill\">Odlagališče</string>\n  <string name=\"tag.landuse_basin\">Kotlina</string>\n  <string name=\"tag.landuse_reservoir\">Zajetje</string>\n  <string name=\"tag.landuse_forest\">Gozd</string>\n  <string name=\"tag.landuse_allotments\">Vrtički</string>\n  <string name=\"tag.landuse_cemetery\">Pokopališče</string>\n  <string name=\"tag.landuse_recreation_ground\">Igrišče za\\n rekreacijo</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker za Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Ta program, ki ga je navdihnil OSMTracker na sistemu Windows Mobile, vam  omogoča slediti svojim potovanjem, označiti pomembne točke (glasovni posnetek, fotografije) in jih izvoziti v obliko GPX za kasnejšo uporabo z orodji Open Street Map, kot je JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Beležnik sledi</string>\n  <string name=\"tracklogger_waiting_gps\">Počakajte na določitev lokacije GPS, da omogočite gumbe …</string>\n  <string name=\"tracklogger_voicerec_title\">Glasovni posnetek</string>\n  <string name=\"tracklogger_voicerec_text\">Snemanje {0}-sek. zvočnega izrezka.</string>\n  <string name=\"tracklogger_voicerec_stop\">Ustavi</string>\n  <string name=\"tracklogger_btnBack\">Nazaj</string>\n  <string name=\"tracklogger_tracked\">Sledeno:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS onemogočen</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS je onemogočen. Ali ga želite omogočiti?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galerija ali fotoaparat?</string>\n  <string name=\"tracklogger_camera\">Posnemi fotografijo s fotoaparatom</string>\n  <string name=\"tracklogger_gallery\">Izberi fotografijo iz galerije</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Seznam točk</string>\n  <string name=\"wplist_latitude\">Zemlj. šir.:</string>\n  <string name=\"wplist_longitude\">Zemlj. dol.:</string>\n  <string name=\"wplist_elevation\">Nadm. viš.:</string>\n  <string name=\"wplist_accuracy\">Natan.:</string>\n  <string name=\"wplist_compass\">Smer komp.:</string>\n  <string name=\"wplist_compass_accuracy\">Natan. komp.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Upravitelj sledi</string>\n  <string name=\"trackmgr_tracklist\">Seznam sledi:</string>\n  <string name=\"trackmgr_waypoints_count\">Točke:</string>\n  <string name=\"trackmgr_trackpoints_count\">Točke sledi:</string>\n  <string name=\"trackmgr_empty\">Nimate sledi.</string>\n  <string name=\"trackmgr_newtrack_error\">Ustvarjanje nove sledi ni mogoče: [0]</string>\n  <string name=\"trackmgr_continuetrack_hint\">Trenutno snemate <b>sled št. {0}</b>\\nIzberite jo na seznamu, da nadaljujete</string>\n  <string name=\"trackmgr_contextmenu_stop\">Ustavi sledenje</string>\n  <string name=\"trackmgr_contextmenu_resume\">Nadaljuj sledenje</string>\n  <string name=\"trackmgr_contextmenu_delete\">Izbriši</string>\n  <string name=\"trackmgr_contextmenu_export\">Izvozi kot GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Pošlji na OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Prikaži</string>\n  <string name=\"trackmgr_contextmenu_details\">Podrobnosti</string>\n  <string name=\"trackmgr_contextmenu_title\">Sled št. {0}</string>\n  <string name=\"trackmgr_delete_confirm\">Sled št. {0} bo izbisana</string>\n  <string name=\"trackmgr_deleteall_confirm\">Vse sledi bodo izbrisane. Ali ste prepričani?</string>\n  <string name=\"trackmgr_exporting\">Izbvažanje sledi št. {0} </string>\n  <string name=\"trackmgr_exporting_prepare\">Pripravljanje izvoza </string>\n  <string name=\"trackmgr_export_error\">Izvoz sledi ni mogoč: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Vsa sledi bodo izvožene, kar lahko traja dolgo časa. Ali ste prepričani?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Podorobnosti sledi</string>\n  <string name=\"trackdetail_startdate\">Začetni čas:</string>\n  <string name=\"trackdetail_enddate\">Končni čas:</string>\n  <string name=\"trackdetail_startloc\">Začetna lok.:</string>\n  <string name=\"trackdetail_endloc\">Končna lok.:</string>\n  <string name=\"trackdetail_exportdate\">Izvoženo:</string>\n  <string name=\"trackdetail_osm_upload_date\">Poslano na OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Izvozi kot GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Še ni izvoženo)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Še ni poslano)</string>\n  <string name=\"trackdetail_export_display\">Prikaži</string>\n  <string name=\"trackdetail_description\">Opis</string>\n  <string name=\"trackdetail_tags\">Oznake (ločene z vejico)</string>\n  <string name=\"trackdetail_description_mandatory\">Vnesti morate opis</string>\n  <string name=\"osm_visibility_private\">Zasebno</string>\n  <string name=\"osm_visibility_public\">Javno</string>\n  <string name=\"osm_visibility_trackable\">Sledljivo</string>\n  <string name=\"osm_visibility_identifiable\">Prepoznavno</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Pošiljanje OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Shrani in pošlji</string>\n  <string name=\"osm_upload_tmpfile_failed\">Sledi ni mogoče izvoziti v začasno datoeko</string>\n  <string name=\"osm_upload_oauth_failed\">Ni se mogoče overiti z OSM-om</string>\n  <string name=\"osm_upload_sending\">Pošiljanje sledi št. {0} </string>\n  <string name=\"osm_upload_waiting_response\">Čakanje na odziv strežnika OpenStreetMap </string>\n  <string name=\"osm_upload_error\">Napaka med pošiljanjem sledi</string>\n  <string name=\"osm_upload_bad_response\">Strežnik OSM je vrnil napako: ({0}) sporočilo {1}</string>\n  <string name=\"osm_upload_unauthorized\">Napaka pri pooblastitvi. Ali bi radi počistili shranjena poverila OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Pošiljanje OpenStreetMap je uspelo</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Posnemi glas</string>\n  <string name=\"gpsstatus_record_stillimage\">Posnemi fotografijo</string>\n  <string name=\"gpsstatus_record_textnote\">Besedilna opomba</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Nastavitve</string>\n  <string name=\"menu_waypointlist\">Točke</string>\n  <string name=\"menu_about\">O programu</string>\n  <string name=\"menu_displaytrack\">Prikaži sled</string>\n  <string name=\"menu_stoptracking\">Ustavi in shrani</string>\n  <string name=\"menu_newtrack\">Nova sled</string>\n  <string name=\"menu_deletetracks\">Izbriši vse sledi</string>\n  <string name=\"menu_continue\">Nadaljuj sled</string>\n  <string name=\"menu_stopcurrenttrack\">Ustavi trenutno sled</string>\n  <string name=\"menu_save\">Shrani</string>\n  <string name=\"menu_cancel\">Prekliči</string>\n  <string name=\"menu_export\">Izvozi kot GPX</string>\n  <string name=\"menu_osm_upload\">Pošiljanje OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Postavi GPS na sredino</string>\n  <string name=\"menu_exportall\">Izvozi vse kot GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Zapis na zunanjo pomničniško napravo nni mogoč</string>\n  <string name=\"error_create_track_dir\">Ustvarjanje mape sledi %s ni mogoče</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Preverite, ali je zunanja pom. naprava pravilno vstavljena in priklopljena.</string>\n  <string name=\"error_voicerec_failed\">Snemanje glasu je spodletelo.</string>\n  <string name=\"error_userlayout_parsing\">Napaka pri razčlenjevanju razporeditvene datoteke XML. Povrnite na privzeto razporeditev.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Sledeno s programom OSMTracker za Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Opozorilo: vrednosti HDOP niso HDOP, kot jih vrne naprava GPS. Približane so iz natančnosti lokacije v metrih.</string>\n  <!--About screen-->\n  <string name=\"about\">O programu</string>\n  <string name=\"about_text\">Za več podatkov, dokumentacijo in poročil o težavah obiščite domačo stran projekta:</string>\n  <string name=\"about_translate_text\">Pomagajte prevesti OSMTracker:</string>\n  <string name=\"about_debug_info\">Podatki o razhroščevanju</string>\n  <string name=\"about_export_db\">Izvozi podatkovno zbirko</string>\n  <string name=\"about_exporting_db\">Izvažanje podatkovnr zbirke </string>\n  <string name=\"about_export_db_result\">Rezultat izvoza podatkovne zbirke: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker sledi</string>\n  <string name=\"notification_title\">OSMTracker sledi (št. {0})</string>\n  <string name=\"notification_text\">Tapnite tukaj, da prikažete gl. zaslon</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Prikaži sled</string>\n  <string name=\"displaytrack_map\">Prikaži zemljevid ozadja</string>\n  <string name=\"displaytrack_north\">S</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Shrani</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Natančnost</string>\n  <string name=\"various_accuracy_with_sats\">Natančnost {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Čakanje na lokacijo GPS … ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Počakajte na smer </string>\n  <string name=\"various_heading_unknown\">Smeri ni mogoče določiti</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Prikaz sledi OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Glasovni posnetek</string>\n  <string name=\"wpt_stillimage\">Fotografija</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sq/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Logo e OSMGjurmues-it</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zmadho pamjen</string>\n  <string name=\"acc.zoom_out\">Zvogëlo pamjen</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Treguesi \\\"Fortësia e sinjalit satelitorë\\\"</string>\n  <string name=\"acc.record_indicator\">Treguesi \\\"Duke inçizuar\\\"</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Treguesi \\\"Gjëndja e gjurmës\\\"</string>\n  <string name=\"acc.upload_status\">Treguesi \\\"Gjëndja e ngarkimit në OpenStreetMap\\\"</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker логотип</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Увеличај</string>\n  <string name=\"acc.zoom_out\">Умањи</string>\n  <string name=\"acc.zoom_center\">Центрирај</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Показатељ сигнала сателита</string>\n  <string name=\"acc.record_indicator\">Показатељ напретка снимања</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Показатељ стања путање</string>\n  <string name=\"acc.upload_status\">Показатељ слања на Отворене мапе</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Поставке</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS поставке</string>\n  <string name=\"prefs_gps_os_settings_summary\">Приказ системског екрана GPS поставки</string>\n  <string name=\"prefs_check_gps_startup\">Провери GPS при покретању</string>\n  <string name=\"prefs_check_gps_startup_summary\">Провери да ли је GPS искључен и понуди укључивање</string>\n  <string name=\"prefs_gps_ignore_clock\">Занемари GPS часовник</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Занемари GPS часовник и користи Андроидов за времена</string>\n  <string name=\"prefs_use_barometer\">Бележи ваздушни притисак [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Промена захтева рестарт праћења</string>\n  <string name=\"prefs_gps_logging_interval\">Учестаност GPS записа</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Користи 0 за најкраће могуће (утиче на батерију)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">сек</string>\n  <string name=\"prefs_gps_logging_min_distance\">Размак „GPS“ бележења</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">најмањи размак између тачака бележења, 0 за најкраћи могући</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">m</string>\n  <string name=\"prefs_ui\">Сучеље</string>\n  <string name=\"prefs_ui_picture_source\">Подразумевани извор слика</string>\n  <string name=\"prefs_ui_picture_source_summary\">Слике са камере или из галерије?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Камера</item>\n    <item>Галерија</item>\n    <item>Увек питај</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Предефинисана дугмад</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Изабери посебне сетове дугмади (види документацију)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">ПОДРАЗУМЕВАНИ РАСПОРЕД</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Подразумевано</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">ПРЕУЗЕТИ РАСПОРЕД</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Немате преузете фајлове распореда</string>\n  <string name=\"prefs_ui_available_layout\">Доступни распореди</string>\n  <string name=\"prefs_ui_github_repository_settings\">Поставке Гитхаб ризнице</string>\n  <string name=\"prefs_ui_orientation\">Усмерење</string>\n  <string name=\"prefs_ui_orientation_summary\">Жељено усмерење за екран дугмади</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Аутоматски</item>\n    <item>Усправно</item>\n    <item>Положено</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Трајање гласовне белешке</string>\n  <string name=\"prefs_voicerec_duration_seconds\">сек.</string>\n  <string name=\"prefs_theme\">Тема главног екрана</string>\n  <string name=\"prefs_theme_summary\">Потребно је поновно покретање да би се применила</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Подразумевано</item>\n    <item>Подразумевано (тамно)</item>\n    <item>Подразумевано (светло)</item>\n    <item>Високи контраст</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Екран увек укључен</string>\n  <string name=\"prefs_display_always_on_summary\">Екран ће остати укључен током праћења. Искључите да сачувате батерију</string>\n  <string name=\"prefs_displaytrack_osm\">Мапа у позадини</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Приказуј OpenStreet мапу испод трага. Морате бити повезани</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Увек приказати мапу у позадини? Морате бити повезани</string>\n  <string name=\"prefs_output\">GPX поставке</string>\n  <string name=\"prefs_storage_dir_hint\">Односи се на наредно праћење (не на текуће)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Један директоријум по праћењу</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Сачувај свако праћење и његове фајлове у сопствени директоријум</string>\n  <string name=\"prefs_output_filename\">Назив фајла за праћења</string>\n  <string name=\"prefs_output_filename_summary\">Шаблон за назив фајла праћења</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Назив праћења</item>\n    <item>Назив, почетни датум и време</item>\n    <item>Почетни датум и време, назив</item>\n    <item>Почетни датум и време</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Тачност у GPX фајлу</string>\n  <string name=\"prefs_output_accuracy_summary\">Додај податке о тачности у GPX фајл уз назив пролазне тачке или у њен коментар</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Без тачности</item>\n    <item>Уз назив пролазне тачке</item>\n    <item>У коментар пролазне тачке</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Користи HDOP апроксимацију</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Попуни HDOP у GPX-у са процењеном вредношћу из прецизности</string>\n  <string name=\"prefs_sound_enabled\">Укључи звук</string>\n  <string name=\"prefs_sound_enabled_summary\">Пусти звук када гласовна белешка почне и заврши се</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Ресетуј OSM пријаву</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Заборави OSM акредитиве и дозволе и присили OSM пратиоца да их затражи поново</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Мораћете поново да овластите OSM пратиоца да шаље праћења. Сигурни сте?</string>\n  <string name=\"prefs_map_tile\">Добављач поља мапе</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Без усмерења</item>\n    <item>У коментару</item>\n    <item>У проширењу</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Извоз усмерења компаса</string>\n  <string name=\"prefs_compass_heading_summary\">Одређује да ли ће и како подаци компаса бити извезени у GPX фајл</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Разно</string>\n  <string name=\"tag.restriction\">Ограничења</string>\n  <string name=\"tag.car\">Ауто</string>\n  <string name=\"tag.tourism\">Туризам</string>\n  <string name=\"tag.amenity\">Комфор</string>\n  <string name=\"tag.amenity_more\">Комфор (+)</string>\n  <string name=\"tag.way\">Пут</string>\n  <string name=\"tag.track\">Стаза</string>\n  <string name=\"tag.landuse\">Земљиште</string>\n  <string name=\"tag.misc_bus_stop\">Аутобуска станица</string>\n  <string name=\"tag.misc_railway\">Пруга</string>\n  <string name=\"tag.misc_telephone\">Телефон</string>\n  <string name=\"tag.misc_post_box\">Поштанско сандуче</string>\n  <string name=\"tag.misc_atm\">Банкомат</string>\n  <string name=\"tag.misc_bollard\">Препрека</string>\n  <string name=\"tag.misc_toilets\">Тоалети</string>\n  <string name=\"tag.misc_shelter\">Заклон</string>\n  <string name=\"tag.misc_surveillance\">Видео надзор</string>\n  <string name=\"tag.restriction_20\">макс 20</string>\n  <string name=\"tag.restriction_30\">макс 30</string>\n  <string name=\"tag.restriction_40\">макс 40</string>\n  <string name=\"tag.restriction_50\">макс 50</string>\n  <string name=\"tag.restriction_60\">макс 60</string>\n  <string name=\"tag.restriction_70\">макс 70</string>\n  <string name=\"tag.restriction_80\">макс 80</string>\n  <string name=\"tag.restriction_90\">макс 90</string>\n  <string name=\"tag.restriction_100\">макс 100</string>\n  <string name=\"tag.restriction_110\">макс 110</string>\n  <string name=\"tag.restriction_120\">макс 120</string>\n  <string name=\"tag.restriction_130\">макс 130</string>\n  <string name=\"tag.restriction_no_exit\">Слепа улица</string>\n  <string name=\"tag.restriction_traffic_light\">Семафор</string>\n  <string name=\"tag.restriction_one_way\">Једносмерно</string>\n  <string name=\"tag.car_fuel_station\">Бензинска станица</string>\n  <string name=\"tag.car_parking\">Паркинг</string>\n  <string name=\"tag.car_emergency_phone\">Хитан телефон</string>\n  <string name=\"tag.car_turning_circle\">Место за окретање</string>\n  <string name=\"tag.car_speed_camera\">Брзинска камера</string>\n  <string name=\"tag.tourism_view_point\">Видиковац</string>\n  <string name=\"tag.tourism_information\">Информације</string>\n  <string name=\"tag.tourism_picnic\">Пикник место</string>\n  <string name=\"tag.tourism_attraction\">Атракција</string>\n  <string name=\"tag.tourism_theme_park\">Тематски парк</string>\n  <string name=\"tag.tourism_castle\">Замак</string>\n  <string name=\"tag.tourism_monument\">Споменик</string>\n  <string name=\"tag.tourism_museum\">Музеј</string>\n  <string name=\"tag.tourism_cinema\">Биоскоп</string>\n  <string name=\"tag.amenity_bench\">Клупа</string>\n  <string name=\"tag.amenity_water\">Вода</string>\n  <string name=\"tag.amenity_pharmacy\">Апотека</string>\n  <string name=\"tag.amenity_shop\">Продавница</string>\n  <string name=\"tag.amenity_marina\">Марина</string>\n  <string name=\"tag.amenity_sport\">Спорт</string>\n  <string name=\"tag.amenity_taxi\">Такси</string>\n  <string name=\"tag.amenity_doctors\">Болница,\\nлекари</string>\n  <string name=\"tag.amenity_recycling\">Рециклажа</string>\n  <string name=\"tag.amenity_place_of_worship\">Верско\\nместо</string>\n  <string name=\"tag.amenity_post_office\">Пошта</string>\n  <string name=\"tag.amenity_library\">Библиотека</string>\n  <string name=\"tag.amenitymore_school\">Школа</string>\n  <string name=\"tag.amenitymore_police\">Полиција</string>\n  <string name=\"tag.amenitymore_fire_station\">Ватрогасци</string>\n  <string name=\"tag.amenitymore_bank\">Банка</string>\n  <string name=\"tag.amenitymore_playground\">Игралиште</string>\n  <string name=\"tag.amenitymore_pub\">Паб</string>\n  <string name=\"tag.amenitymore_hotel\">Хотел</string>\n  <string name=\"tag.amenitymore_motel\">Мотел</string>\n  <string name=\"tag.amenitymore_hostel\">Хостел</string>\n  <string name=\"tag.amenitymore_restaurant\">Ресторан</string>\n  <string name=\"tag.amenitymore_fastfood\">Брза храна</string>\n  <string name=\"tag.amenitymore_camp_site\">Камп</string>\n  <string name=\"tag.way_bridge\">Мост</string>\n  <string name=\"tag.way_zebra_crossing\">Пешачки прелаз</string>\n  <string name=\"tag.way_motorway\">Мотопут</string>\n  <string name=\"tag.way_trunk\">Аутопут</string>\n  <string name=\"tag.way_primary\">Првог реда</string>\n  <string name=\"tag.way_secondary\">Другог реда</string>\n  <string name=\"tag.way_tertiary\">Трећег реда</string>\n  <string name=\"tag.way_residential\">Стамбени</string>\n  <string name=\"tag.way_service\">Сервисни</string>\n  <string name=\"tag.track_track\">Стаза</string>\n  <string name=\"tag.track_cycleway\">Бициклистичка</string>\n  <string name=\"tag.track_footway\">Пешачка стаза</string>\n  <string name=\"tag.track_bridleway\">За јахање</string>\n  <string name=\"tag.track_steps\">Степенице</string>\n  <string name=\"tag.track_living_street\">У насељу</string>\n  <string name=\"tag.track_pedestrian\">Пешачка</string>\n  <string name=\"tag.track_grade1\">1. степена</string>\n  <string name=\"tag.track_grade2\">2. степена</string>\n  <string name=\"tag.track_grade3\">3. степена</string>\n  <string name=\"tag.track_grade4\">4. степена</string>\n  <string name=\"tag.track_grade5\">5. степена</string>\n  <string name=\"tag.landuse_farm\">Фарма</string>\n  <string name=\"tag.landuse_landfill\">Депонија</string>\n  <string name=\"tag.landuse_basin\">Басен</string>\n  <string name=\"tag.landuse_reservoir\">Резервоар</string>\n  <string name=\"tag.landuse_forest\">Шума</string>\n  <string name=\"tag.landuse_allotments\">Баште</string>\n  <string name=\"tag.landuse_cemetery\">Гробље</string>\n  <string name=\"tag.landuse_recreation_ground\">Место за\\nрекреацију</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">Пратилац за Андроид</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Инспирисан OSMTracker-ом на Windows Mobile, омогућава да пратите ваша путовања, маркирате значајна места (гласом или сликом), извезете их у GPX формат за касније коришћење са Open Street Map алатима попут JOSM-а.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Бележник праћења</string>\n  <string name=\"tracklogger_waiting_gps\">Чекам GPS позицију да укључим дугмад...</string>\n  <string name=\"tracklogger_voicerec_title\">Гласовна белешка</string>\n  <string name=\"tracklogger_voicerec_text\">Снимам {0}s аудио клип.</string>\n  <string name=\"tracklogger_voicerec_stop\">Заустави</string>\n  <string name=\"tracklogger_btnBack\">Назад</string>\n  <string name=\"tracklogger_tracked\">Испраћено:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS искључен</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS је искључен. Желите ли да га укључите?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Галерија или камера?</string>\n  <string name=\"tracklogger_camera\">Усликајте камером</string>\n  <string name=\"tracklogger_gallery\">Изаберите слику из галерије</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Листа пролазних тачака</string>\n  <string name=\"wplist_latitude\">Шир:</string>\n  <string name=\"wplist_longitude\">Дуж:</string>\n  <string name=\"wplist_elevation\">Вис:</string>\n  <string name=\"wplist_accuracy\">Прец:</string>\n  <string name=\"wplist_compass\">Компас:</string>\n  <string name=\"wplist_compass_accuracy\">Комп. тачн.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Менаџер праћења</string>\n  <string name=\"trackmgr_tracklist\">Листа праћења:</string>\n  <string name=\"trackmgr_waypoints_count\">Тачки пролаза:</string>\n  <string name=\"trackmgr_trackpoints_count\">Тачки праћења:</string>\n  <string name=\"trackmgr_empty\">Нема праћења.</string>\n  <string name=\"trackmgr_newtrack_hint\">Притисните да снимите нову путању.</string>\n  <string name=\"trackmgr_newtrack_error\">Не могу да направим ново праћење: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Тренутно снимате <b>путању #{0}</b>\\nИзаберите је у листи да наставите</string>\n  <string name=\"trackmgr_contextmenu_stop\">Заустави праћење</string>\n  <string name=\"trackmgr_contextmenu_resume\">Настави праћење</string>\n  <string name=\"trackmgr_contextmenu_delete\">Обриши</string>\n  <string name=\"trackmgr_contextmenu_export\">Извези</string>\n  <string name=\"trackmgr_contextmenu_share\">Подели</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Пошаљи на OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Отпреми на GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Приказ</string>\n  <string name=\"trackmgr_contextmenu_details\">Детаљи</string>\n  <string name=\"trackmgr_contextmenu_title\">Праћење #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Праћење #{0} биће избрисано</string>\n  <string name=\"trackmgr_deleteall_confirm\">Сва праћења биће обрисана. Сигурни сте?</string>\n  <string name=\"trackmgr_exporting\">Извозим праћење #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Припремам извоз...</string>\n  <string name=\"trackmgr_export_error\">Не могу да извезем праћење: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Биће извезена сва праћења. То може да потраје. Сигурни сте?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Детаљи праћења</string>\n  <string name=\"trackdetail_startdate\">Почетак:</string>\n  <string name=\"trackdetail_enddate\">Завршетак:</string>\n  <string name=\"trackdetail_startloc\">Креће од:</string>\n  <string name=\"trackdetail_endloc\">Завршава на:</string>\n  <string name=\"trackdetail_exportdate\">Извезено:</string>\n  <string name=\"trackdetail_osm_upload_date\">Послато на OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Извези као GPX</string>\n  <string name=\"trackdetail_export_notyet\">(још није извезено)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(још није послато)</string>\n  <string name=\"trackdetail_export_display\">Приказ</string>\n  <string name=\"trackdetail_name\">Назив</string>\n  <string name=\"trackdetail_description\">Опис</string>\n  <string name=\"trackdetail_tags\">Ознаке (раздвој запетом)</string>\n  <string name=\"trackdetail_description_mandatory\">Морате унети опис</string>\n  <string name=\"osm_visibility_private\">Лично</string>\n  <string name=\"osm_visibility_public\">Јавно</string>\n  <string name=\"osm_visibility_trackable\">Испратив</string>\n  <string name=\"osm_visibility_identifiable\">Препознатљив</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap слање</string>\n  <string name=\"osm_upload_ok\">Сачувај и пошаљи</string>\n  <string name=\"osm_upload_tmpfile_failed\">Не могу да извезем праћење у привремени фајл</string>\n  <string name=\"osm_upload_oauth_failed\">Не могу да се аутентификујем на OSM</string>\n  <string name=\"osm_upload_sending\">Шаљем праћење #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Чекам одговор OpenStreetMap сервера…</string>\n  <string name=\"osm_upload_error\">Грешка при слању праћења</string>\n  <string name=\"osm_upload_bad_response\">OSM сервер је вратио грешку: ({0}) порука {1}</string>\n  <string name=\"osm_upload_unauthorized\">Грешка ауторизације. Желите ли да очистите сачуване OpenStreetMap акредитиве?</string>\n  <string name=\"osm_upload_sucess\">Слање на OpenStreetMap успешно</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Гласовна белешка</string>\n  <string name=\"gpsstatus_record_stillimage\">Сликај</string>\n  <string name=\"gpsstatus_record_textnote\">Белешка</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"edit_waypoint_bt_preview\">Отвори датотеку</string>\n  <string name=\"edit_waypoint_bt_save\">Сачувај</string>\n  <string name=\"edit_waypoint_bt_delete\">Обриши</string>\n  <string name=\"edit_waypoint_bt_cancel\">Откажи</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Обриши</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Откажи</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Поставке</string>\n  <string name=\"menu_waypointlist\">Пролазне тачке</string>\n  <string name=\"menu_about\">О програму</string>\n  <string name=\"menu_displaytrack\">Прикажи праћење</string>\n  <string name=\"menu_stoptracking\">Заустави и сачувај</string>\n  <string name=\"menu_newtrack\">Ново праћење</string>\n  <string name=\"menu_deletetracks\">Обриши сва праћења</string>\n  <string name=\"menu_continue\">Настави праћење</string>\n  <string name=\"menu_stopcurrenttrack\">Заустави праћење</string>\n  <string name=\"menu_save\">Сачувај</string>\n  <string name=\"menu_cancel\">Откажи</string>\n  <string name=\"menu_export\">Извези као GPX</string>\n  <string name=\"menu_osm_upload\">Слање на OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Центрирај на GPS</string>\n  <string name=\"menu_exportall\">Извези све као GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Не могу да пишем у спољно складиште.</string>\n  <string name=\"error_create_track_dir\">Не могу да направим фасциклу праћења %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Проверите да ли је спољно складиште убачено и монтирано.</string>\n  <string name=\"error_voicerec_failed\">Гласовна белешка није успела</string>\n  <string name=\"error_userlayout_parsing\">Грешка при читању XML фајла распореда. Вратите на подразумевани распоред.</string>\n  <string name=\"error_gh_token_lenght\">Потребно је да токен има 40 знакова</string>\n  <!--messages-->\n  <string name=\"permission_required\">Потребна су права</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Испраћено са OSM пратиоцем за Андроид</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Пажња: HDOP вредности нису са GPS уређаја већ процењене на основу прецизности локације у метрима.</string>\n  <!--About screen-->\n  <string name=\"about\">О програму</string>\n  <string name=\"about_text\">За више информација, документацију и пријаве проблема, посетите страницу пројекта:</string>\n  <string name=\"about_translate_text\">Помогли у превођењу:</string>\n  <string name=\"about_debug_info\">Подаци за отклањање грешака</string>\n  <string name=\"about_export_db\">Извоз базе података</string>\n  <string name=\"about_exporting_db\">Извозим базу података...</string>\n  <string name=\"about_export_db_result\">Резултат извоза: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSM пратилац ради</string>\n  <string name=\"notification_title\">OSM пратилац прати (#{0})</string>\n  <string name=\"notification_text\">Тапните овде за приказ главног екрана</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Прикажи праћење</string>\n  <string name=\"displaytrack_map\">Прикажи мапу у позадини</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Сачувај</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Прецизност</string>\n  <string name=\"various_accuracy_with_sats\">Прецизност {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Чекам GPS позицију… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Чекам правац...</string>\n  <string name=\"various_heading_unknown\">Правац се не може одредити</string>\n  <string name=\"various_export_finished\">Успешно је завршен поступак извоза</string>\n  <string name=\"various_waiting_position\">Позиција није доступна</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap приказ праћења</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Ажурирање и инсталација</string>\n  <string name=\"buttons_presets_context_menu_delete\">Обриши</string>\n  <string name=\"buttons_presets_updating_layout\">Ажурирам…</string>\n  <string name=\"buttons_presets_successful_update\">Распоред успешно ажуриран</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Распоред није послат. Покушајте касније</string>\n  <string name=\"buttons_presets_delete_message\">Заиста желите да обришете распоред {0} ?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Да</string>\n  <string name=\"buttons_presets_successful_delete\">Распоред успешно уклоњен</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Директоријум са иконама успешно обрисан</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Овај фајл није имао придружени директоријум са иконама</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Распоред није могуће уклонити</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Грешка: не могу да се повежем на интернет</string>\n  <string name=\"available_layouts_response_null_exception\">Грешка: не могу да се повежем на ризницу подразумеваних посебних распореда</string>\n  <string name=\"available_layouts_connecting_message\">(Повезујем се…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Преузимање</string>\n  <string name=\"available_layouts_not_available_language\">Ваш језик није доступан па изаберите неки са листе</string>\n  <string name=\"available_layouts_language_dialog_title\">Доступни језици</string>\n  <string name=\"available_layouts_checking_language_dialog\">Проверавам локалне верзије језика</string>\n  <string name=\"available_layouts_downloading_dialog\">Преузимам…</string>\n  <string name=\"available_layouts_successful_download\">Распоред успешно преузет</string>\n  <string name=\"available_layouts_unsuccessful_download\">Распоред се не може преузети. Покушајте касније</string>\n  <string name=\"available_layouts_null_response_received\">Грешка при добављању података са сервера</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Подразумевано</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Посебно</string>\n  <string name=\"github_repository_settings_username\">Име на Гитхабу:</string>\n  <string name=\"github_repository_settings_repository_name\">Назив ризнице:</string>\n  <string name=\"github_repository_settings_branch_name\">Назив гране:</string>\n  <string name=\"github_repository_settings_valid_server\">Гитхаб ризница исправна</string>\n  <string name=\"github_repository_settings_invalid_server\">Гитхаб ризница неисправна</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">успешно направљено</string>\n  <string name=\"error_creating\">Грешка приликом прављења</string>\n  <string name=\"db_error\">Грешка базе података</string>\n  <string name=\"successfully_saved\">успешно сачувано</string>\n  <string name=\"saving_error\">Грешка приликом чувања</string>\n  <string name=\"pr_status\">Статус захтева за спајање:</string>\n  <string name=\"repository_information_error\">Грешка у вези са информацијама спремишта</string>\n  <string name=\"successfully_uploaded\">Учитавање је било успешно</string>\n  <string name=\"error_uploading\">Грешка приликом отпремања</string>\n  <string name=\"gpx_file_read_error\">Грешка приликом читања GPX датотеке</string>\n  <string name=\"gpx_file_not_found\">Није пронађена GPX датотека</string>\n  <string name=\"uploading_file\">Отпремање датотеке:</string>\n  <string name=\"item_selected\">Одабрана ставка:</string>\n  <string name=\"github_repository_private\">Приватно:</string>\n  <string name=\"github_creating_repository\">Прављење спремишта</string>\n  <!--GitHubConfig-->\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Можете да сачувате „размак” како бисте уклонили своје акредитиве.</string>\n  <!--GitHubUpload-->\n  <!--GitHubNewFork-->\n  <!--GitHubPullRequest-->\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Упутство за коришћење апликације OSMTracker за Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Добро дошли у OSMTracker за Android™ 👋</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Срећан пут и успешно праћење 🗺 😎</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Гласовна белешка</string>\n  <string name=\"wpt_stillimage\">Слика</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker-logga</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Zooma in</string>\n  <string name=\"acc.zoom_out\">Zooma ut</string>\n  <string name=\"acc.zoom_center\">Centrum</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Indikator för satellitsignalens styrka</string>\n  <string name=\"acc.record_indicator\">Förloppsindikator för inspelning</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Indikator för spårstatus</string>\n  <string name=\"acc.upload_status\">Indikator för OpenStreetMap-uppladdning</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Inställningar</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS-inställningar</string>\n  <string name=\"prefs_gps_os_settings_summary\">Visa systemets GPS-inställningar.</string>\n  <string name=\"prefs_check_gps_startup\">Kontrollera GPS vid start</string>\n  <string name=\"prefs_check_gps_startup_summary\">Kontrollera om GPS:en är inaktiv vid start och erbjud att aktivera den.</string>\n  <string name=\"prefs_gps_ignore_clock\">Ignorera GPS-klockan</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ignorera GPS-klockan och använd istället Androids klocka för tidsstämpling.</string>\n  <string name=\"prefs_use_barometer\">Logga barometertryck [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">Växling kräver omstart av spår</string>\n  <string name=\"prefs_gps_logging_interval\">GPS logg-intervall</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Använd 0 för kortast möjliga intervall (påverkar batteriets livslängd).</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">sekunder</string>\n  <string name=\"prefs_gps_logging_interval_empty\">GPS-loggningsintervallet får inte vara tomt</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS-loggningsavstånd</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">Minsta avstånd mellan spårpunkter i meter, använd 0 för kortast möjliga</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">meter</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">Minsta avstånd mellan spårpunkter kan inte vara tomt</string>\n  <string name=\"prefs_ui\">Användargränssnitt</string>\n  <string name=\"prefs_ui_picture_source\">Vald bildkälla</string>\n  <string name=\"prefs_ui_picture_source_summary\">Välj bild från kamera eller galleri?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galleri</item>\n    <item>Fråga alltid</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Knapplayout</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Tillåt egendefinierade knapplayouter (se dokumentationen).</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">STANDARDLAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Standard</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">NEDLADDAD LAYOUT</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Du har inga nedladdade layoutfiler</string>\n  <string name=\"prefs_ui_available_layout\">Tillgängliga layouter</string>\n  <string name=\"prefs_ui_github_repository_settings\">Inställningar för Github Repository</string>\n  <string name=\"prefs_ui_orientation\">Orientering</string>\n  <string name=\"prefs_ui_orientation_summary\">Orientering av knappskärmen du föredrar</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Automatisk</item>\n    <item>Stående</item>\n    <item>Liggande</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Längd på röstnoteringar</string>\n  <string name=\"prefs_voicerec_duration_seconds\">sekunder</string>\n  <string name=\"prefs_theme\">Utseende/tema</string>\n  <string name=\"prefs_theme_summary\">Applikationen måste startas om innan ändringarna syns.</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Systemstandard</item>\n    <item>Systemstandard (mörk)</item>\n    <item>Systemstandard (ljus)</item>\n    <item>Hög kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Skärmen alltid på</string>\n  <string name=\"prefs_display_always_on_summary\">Skärmen släcks inte under tiden spår spelas in. Avmarkera för att spara batteri.</string>\n  <string name=\"prefs_displaytrack_osm\">Bakgrundskarta</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Visa OpenStreetMap-karta under spåret. Dataanslutning krävs.</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">Visa alltid OpenStreetMap-bakgrund? Kräver dataanslutning</string>\n  <string name=\"prefs_output\">GPX-fil</string>\n  <string name=\"prefs_storage_dir\">Lagringsmapp i dokument</string>\n  <string name=\"prefs_storage_dir_hint\">Gäller för nästa och kommande spår, inte aktuellt spår.</string>\n  <string name=\"prefs_storage_dir_empty\">Värdet för lagringsmappen får inte vara tomt</string>\n  <string name=\"prefs_output_one_dir_per_track\">En mapp per spår</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Spara varje spår och relaterade filer i en egen mapp</string>\n  <string name=\"prefs_output_filename\">Spårens namn</string>\n  <string name=\"prefs_output_filename_summary\">Hur filnamnet på namngivna spår ska se ut.</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Spårets namn</item>\n    <item>Namn, startdatum och tid</item>\n    <item>Startdatum och tid, namn</item>\n    <item>Startdatum och tid</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">Filnamnsetikett</string>\n  <string name=\"prefs_output_filename_label_summary\">Denna etikett kommer att läggas till i slutet av filnamnet</string>\n  <string name=\"prefs_output_accuracy\">Noggrannhet</string>\n  <string name=\"prefs_output_accuracy_summary\">Tillåt noggrannhetsinformation i GPX-filen, i vägpunktsnamnet eller i en egen tagg.</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Nej</item>\n    <item>I vägpunktsnamnet</item>\n    <item>I vägpunktskommentaren</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Uppskattade HDOP-värden</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Använd uppskattade noggrannhets-värden som HDOP-värden i GPX-filen.</string>\n  <string name=\"prefs_sound_enabled\">Aktivera ljud</string>\n  <string name=\"prefs_sound_enabled_summary\">Spela upp ljud när ljudinspelning startar och slutar</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Återställ inloggning till OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Glöm bort inloggning och tillstånd och tvinga OSMTracker att fråga om detta igen</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Du måste godkänna OSMTracker för att kunna ladda upp spår igen. Är du säker?</string>\n  <string name=\"prefs_map_tile\">Tillhandahållare av kartrutor</string>\n  <string name=\"prefs_map_tile_summary\">Välj rut-leverantör för att rendera kartan</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ingen</item>\n    <item>i kommentar</item>\n    <item>i extension</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Exportera kompassriktning</string>\n  <string name=\"prefs_compass_heading_summary\">Definierar om och hur kompassdata ska exporteras till GPX-filen</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Diverse</string>\n  <string name=\"tag.restriction\">Hinder</string>\n  <string name=\"tag.car\">Bil</string>\n  <string name=\"tag.tourism\">Turism</string>\n  <string name=\"tag.amenity\">Inrättningar</string>\n  <string name=\"tag.amenity_more\">Inrättningar (+)</string>\n  <string name=\"tag.way\">Väg</string>\n  <string name=\"tag.track\">Spår</string>\n  <string name=\"tag.landuse\">Markanvändning</string>\n  <string name=\"tag.misc_bus_stop\">Busshållplats</string>\n  <string name=\"tag.misc_railway\">Järnväg</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Brevlåda</string>\n  <string name=\"tag.misc_atm\">Uttagsautomat</string>\n  <string name=\"tag.misc_bollard\">Trafikkon</string>\n  <string name=\"tag.misc_toilets\">Toaletter</string>\n  <string name=\"tag.misc_shelter\">Vindskydd</string>\n  <string name=\"tag.misc_surveillance\">Övervakning</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Utfart förbjuden</string>\n  <string name=\"tag.restriction_traffic_light\">Trafikljus</string>\n  <string name=\"tag.restriction_one_way\">Enkelriktat</string>\n  <string name=\"tag.car_fuel_station\">Bensinstation</string>\n  <string name=\"tag.car_parking\">Parkering</string>\n  <string name=\"tag.car_emergency_phone\">Nödtelefon</string>\n  <string name=\"tag.car_turning_circle\">Vändplats</string>\n  <string name=\"tag.car_speed_camera\">Fartkamera</string>\n  <string name=\"tag.tourism_view_point\">Utsiktsplats</string>\n  <string name=\"tag.tourism_information\">Informationstavla</string>\n  <string name=\"tag.tourism_picnic\">Picknickplats</string>\n  <string name=\"tag.tourism_attraction\">Sevärdhet</string>\n  <string name=\"tag.tourism_theme_park\">Nöjespark</string>\n  <string name=\"tag.tourism_castle\">Slott</string>\n  <string name=\"tag.tourism_monument\">Monument</string>\n  <string name=\"tag.tourism_museum\">Museum</string>\n  <string name=\"tag.tourism_cinema\">Biograf</string>\n  <string name=\"tag.amenity_bench\">Bänk</string>\n  <string name=\"tag.amenity_water\">Vatten</string>\n  <string name=\"tag.amenity_pharmacy\">Apotek</string>\n  <string name=\"tag.amenity_shop\">Butik</string>\n  <string name=\"tag.amenity_marina\">Marina</string>\n  <string name=\"tag.amenity_sport\">Sport</string>\n  <string name=\"tag.amenity_taxi\">Taxi</string>\n  <string name=\"tag.amenity_doctors\">Sjukvård</string>\n  <string name=\"tag.amenity_recycling\">Återvinning</string>\n  <string name=\"tag.amenity_place_of_worship\">Plats för\\ntillbedjan</string>\n  <string name=\"tag.amenity_post_office\">Postkontor</string>\n  <string name=\"tag.amenity_library\">Bibliotek</string>\n  <string name=\"tag.amenitymore_school\">Skola</string>\n  <string name=\"tag.amenitymore_police\">Polisstation</string>\n  <string name=\"tag.amenitymore_fire_station\">Brandstation</string>\n  <string name=\"tag.amenitymore_bank\">Bank</string>\n  <string name=\"tag.amenitymore_playground\">Lekplats</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">Hotell</string>\n  <string name=\"tag.amenitymore_motel\">Motell</string>\n  <string name=\"tag.amenitymore_hostel\">Vandrarhem</string>\n  <string name=\"tag.amenitymore_restaurant\">Restaurang</string>\n  <string name=\"tag.amenitymore_fastfood\">Snabbmat</string>\n  <string name=\"tag.amenitymore_camp_site\">Lägerplats</string>\n  <string name=\"tag.way_bridge\">Bro</string>\n  <string name=\"tag.way_zebra_crossing\">Övergångsställe</string>\n  <string name=\"tag.way_motorway\">Motorväg</string>\n  <string name=\"tag.way_trunk\">Stamväg</string>\n  <string name=\"tag.way_primary\">Primär</string>\n  <string name=\"tag.way_secondary\">Sekundär</string>\n  <string name=\"tag.way_tertiary\">Tertiär</string>\n  <string name=\"tag.way_residential\">Bostadsområde</string>\n  <string name=\"tag.way_service\">Tillfartsväg</string>\n  <string name=\"tag.track_track\">Bruksväg</string>\n  <string name=\"tag.track_cycleway\">Cykelväg</string>\n  <string name=\"tag.track_footway\">Gångväg</string>\n  <string name=\"tag.track_bridleway\">Ridväg</string>\n  <string name=\"tag.track_steps\">Trappa</string>\n  <string name=\"tag.track_living_street\">Gårdsgata</string>\n  <string name=\"tag.track_pedestrian\">Gågata</string>\n  <string name=\"tag.track_grade1\">Grad 1</string>\n  <string name=\"tag.track_grade2\">Grad 2</string>\n  <string name=\"tag.track_grade3\">Grad 3</string>\n  <string name=\"tag.track_grade4\">Grad 4</string>\n  <string name=\"tag.track_grade5\">Grad 5</string>\n  <string name=\"tag.landuse_farm\">Jordbruksmark</string>\n  <string name=\"tag.landuse_landfill\">Deponi</string>\n  <string name=\"tag.landuse_basin\">Hamnbassäng</string>\n  <string name=\"tag.landuse_reservoir\">Reservoar</string>\n  <string name=\"tag.landuse_forest\">Forest</string>\n  <string name=\"tag.landuse_allotments\">Kolonilotter</string>\n  <string name=\"tag.landuse_cemetery\">Begravningsplats</string>\n  <string name=\"tag.landuse_recreation_ground\">Fritidsområde</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker för Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Inspirerad av OSMTracker för Windows Mobile. Låter dig spara din färdväg, notera intressanta platser (det går även att skapa röst- och bildnoteringar) och exportera dem i GPX-format för att sedan kunna använda dem i OpenStreetMap-verktyg som t.ex. JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Spårloggning</string>\n  <string name=\"tracklogger_waiting_gps\">Vissa knappar aktiveras när GPS-låsning har erhållits.</string>\n  <string name=\"tracklogger_voicerec_title\">Röstnotering</string>\n  <string name=\"tracklogger_voicerec_text\">Spelar in en {0}s röstnotering.</string>\n  <string name=\"tracklogger_voicerec_stop\">Stopp</string>\n  <string name=\"tracklogger_btnBack\">Tillbaka</string>\n  <string name=\"tracklogger_tracked\">Noterad: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS inaktiverad</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS:en är inaktiverad. Vill du aktivera den?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Galleri eller kamera?</string>\n  <string name=\"tracklogger_camera\">Ta kort med kamera</string>\n  <string name=\"tracklogger_gallery\">Välj bild från galleri</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Vägpunktslista</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Höjd: </string>\n  <string name=\"wplist_accuracy\">Noggr.: </string>\n  <string name=\"wplist_compass\">Ber. riktn.:</string>\n  <string name=\"wplist_compass_accuracy\">Ber. noggr.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Spårhantering</string>\n  <string name=\"trackmgr_tracklist\">Spårlista:</string>\n  <string name=\"trackmgr_waypoints_count\">Vägpunkter: </string>\n  <string name=\"trackmgr_trackpoints_count\">Spårpunkter: </string>\n  <string name=\"trackmgr_empty\">Du har inga spår.</string>\n  <string name=\"trackmgr_newtrack_hint\">Tryck för att spela in ett nytt spår.</string>\n  <string name=\"trackmgr_newtrack_error\">Kan inte skapa nytt spår: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Du spelar just nu in <b>spår #{0}</b>\\nVälj det i listan för att fortsätta</string>\n  <string name=\"trackmgr_contextmenu_stop\">Stoppa inspelning</string>\n  <string name=\"trackmgr_contextmenu_resume\">Återuppta inspelning</string>\n  <string name=\"trackmgr_contextmenu_delete\">Radera</string>\n  <string name=\"trackmgr_contextmenu_export\">Exportera</string>\n  <string name=\"trackmgr_contextmenu_share\">Dela</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Ladda upp till OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">Ladda upp till GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">Visa spår på skärm</string>\n  <string name=\"trackmgr_contextmenu_details\">Visa detaljer</string>\n  <string name=\"trackmgr_contextmenu_title\">Spår #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Spår #{0} kommer att raderas</string>\n  <string name=\"trackmgr_deleteall_confirm\">Alla spår kommer att tas bort. Är du säker?</string>\n  <string name=\"trackmgr_exporting\">Exporterar spår #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Förbereder export...</string>\n  <string name=\"trackmgr_export_error\">Kan inte exportera spår: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Alla spår kommer att exporteras vilket kan ta lång tid. Är du säker?</string>\n  <string name=\"trackmgr_prepare_for_share_error\">Kan inte hantera spåret: {0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Spårdetaljer</string>\n  <string name=\"trackdetail_startdate\">Starttid:</string>\n  <string name=\"trackdetail_enddate\">Sluttid:</string>\n  <string name=\"trackdetail_startloc\">Startpunkt:</string>\n  <string name=\"trackdetail_endloc\">Slutpunkt:</string>\n  <string name=\"trackdetail_exportdate\">Exporterad:</string>\n  <string name=\"trackdetail_osm_upload_date\">Uppladdad till OpenStreetMap</string>\n  <string name=\"trackdetail_btn_export\">Exportera som GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Inte exporterad ännu)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(inte uppladdad än)</string>\n  <string name=\"trackdetail_export_display\">Visa</string>\n  <string name=\"trackdetail_name\">Namn</string>\n  <string name=\"trackdetail_description\">Beskrivning</string>\n  <string name=\"trackdetail_tags\">Etiketter (kommaseparerade)</string>\n  <string name=\"trackdetail_description_mandatory\">Du måste ange en beskrivning</string>\n  <string name=\"osm_visibility_private\">Privat</string>\n  <string name=\"osm_visibility_public\">Publik</string>\n  <string name=\"osm_visibility_trackable\">Spårbar</string>\n  <string name=\"osm_visibility_identifiable\">Identifierbar</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap uppladdning</string>\n  <string name=\"osm_upload_ok\">Spara och ladda upp</string>\n  <string name=\"osm_upload_tmpfile_failed\">Kunde inte exportera spåret till en temporär fil</string>\n  <string name=\"osm_upload_oauth_failed\">Kunde inte logga in på OSM</string>\n  <string name=\"osm_upload_sending\">Skickar spår #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Väntar på att OpenStreetMap-servern ska svara...</string>\n  <string name=\"osm_upload_error\">Fel vid uppladdning av spår</string>\n  <string name=\"osm_upload_bad_response\">OSM-servern returnerade ett fel: ({0}) meddelande {1}</string>\n  <string name=\"osm_upload_unauthorized\">Inloggningsfel. Vill du ta bort sparade inloggningsdata till OpenStreetMap</string>\n  <string name=\"osm_upload_sucess\">Uppladdning till OpenStreetMap klar</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload_cancel\">Avboka</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Röstnotering</string>\n  <string name=\"gpsstatus_record_stillimage\">Bildnotering</string>\n  <string name=\"gpsstatus_record_textnote\">Textnotering</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">Waypoint Namn/text</string>\n  <string name=\"waypoint_name_hint\">Ange waypointnamn</string>\n  <string name=\"edit_waypoint_bt_preview\">Öppna filen</string>\n  <string name=\"edit_waypoint_bt_save\">Spara</string>\n  <string name=\"edit_waypoint_bt_delete\">Radera</string>\n  <string name=\"edit_waypoint_bt_cancel\">Avboka</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">Ta bort waypoint</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">Vill du ta bort den här waypointen?</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">Radera</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">Avboka</string>\n  <!--osm Notes-->\n  <string name=\"edit_note_bt_update\">Spara</string>\n  <string name=\"edit_note_bt_delete\">Radera</string>\n  <string name=\"edit_note_bt_cancel\">Avboka</string>\n  <string name=\"delete_note_confirm_bt_ok\">Radera</string>\n  <string name=\"delete_note_confirm_bt_cancel\">Avboka</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Inställningar</string>\n  <string name=\"menu_waypointlist\">Vägpunkter</string>\n  <string name=\"menu_about\">Om</string>\n  <string name=\"menu_displaytrack\">Visa spår</string>\n  <string name=\"menu_stoptracking\">Stoppa &amp; spara</string>\n  <string name=\"menu_newtrack\">Nytt spår</string>\n  <string name=\"menu_deletetracks\">Ta bort alla spår</string>\n  <string name=\"menu_continue\">Fortsätt spår</string>\n  <string name=\"menu_stopcurrenttrack\">Stoppa aktuellt spår</string>\n  <string name=\"menu_save\">Spara</string>\n  <string name=\"menu_cancel\">Avbryt</string>\n  <string name=\"menu_export\">Exportera som GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap-uppladdning</string>\n  <string name=\"menu_center_to_gps\">Centrera till GPS</string>\n  <string name=\"menu_exportall\">Exportera alla som GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Det gick inte att skriva till det minneskortet.</string>\n  <string name=\"error_create_track_dir\">Kunde inte skapa spårmapp %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Kontrollera att minneskortet är korrekt isatt och fungerar.</string>\n  <string name=\"error_voicerec_failed\">Röstinspelningen misslyckades</string>\n  <string name=\"error_userlayout_parsing\">Ett fel inträffade när layoutfilen lästes in. Återställ orginalfilen.</string>\n  <string name=\"error_gh_token_lenght\">Token måste vara 40 tecken lång</string>\n  <string name=\"error_gh_pr_creation\">Fel vid skapande av PR</string>\n  <!--messages-->\n  <string name=\"permission_required\">Tillstånd krävs</string>\n  <string name=\"storage_permission_for_export_GPX\">För att exportera GPX-spåret behöver vi skriva till enhetens filsystem.</string>\n  <string name=\"storage_permission_for_display_track\">För att visa spåret korrekt behöver vi åtkomst till filsystemet.</string>\n  <string name=\"storage_permission_for_share_track\">För att dela spåret korrekt behöver vi åtkomst till filsystemet.</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">För att ladda upp spåret till OSM behöver vi åtkomst till filsystemet.</string>\n  <string name=\"acccept\">Acceptera</string>\n  <string name=\"gps_perms_required\">Kan inte fortsätta utan GPS-tillstånd</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Skapad med OSMTracker för Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Varning: HDOP-värdena är inte riktiga HDOP-värden från GPS-enheten. De är uppskattade värden, angivna i hela metrar, och bör inte användas.</string>\n  <!--About screen-->\n  <string name=\"about\">Om</string>\n  <string name=\"about_text\">För mer information, dokumentation och felrapportering, besök projektets hemsida:</string>\n  <string name=\"about_translate_text\">Hjälp till att översätta OSMTracker:</string>\n  <string name=\"about_debug_info\">Felsökningsinfo</string>\n  <string name=\"about_export_db\">Exportera databas</string>\n  <string name=\"about_exporting_db\">Exporterar databas...</string>\n  <string name=\"about_export_db_result\">Resultat av databasexport: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker körs fortfarande</string>\n  <string name=\"notification_title\">OSMTracker körs fortfarande  (#{0})</string>\n  <string name=\"notification_text\">Tryck för att visa startskärmen</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Visa spår</string>\n  <string name=\"displaytrack_map\">Visa bakgrundskarta</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Spara</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Noggrannhet</string>\n  <string name=\"various_accuracy_with_sats\">Noggrannhet {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Väntar på GPS-fix... ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Väntar på riktning...</string>\n  <string name=\"various_heading_unknown\">Riktning kan inte bestämmas</string>\n  <string name=\"various_export_finished\">Exporteringen slutfördes framgångsrikt</string>\n  <string name=\"various_waiting_position\">Position ej tillgänglig</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Spårvisning med OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Uppdatera &amp; installera</string>\n  <string name=\"buttons_presets_context_menu_delete\">Ta bort</string>\n  <string name=\"buttons_presets_updating_layout\">Uppdaterar...</string>\n  <string name=\"buttons_presets_successful_update\">Layout har uppdaterats</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Layout uppdaterades ej, försök igen senare</string>\n  <string name=\"buttons_presets_delete_message\">Är du säker på att du vill ta bort layouten {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Ja</string>\n  <string name=\"buttons_presets_successful_delete\">Layouten raderades framgångsrikt</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">ikon-katalog har tagits bort</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Denna fil har inte någon ikon-katalog associerad</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">Layouten kunde inte raderas</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Fel: kunde inte ansluta till internet</string>\n  <string name=\"available_layouts_response_null_exception\">Fel: kunde inte ansluta till standard-repository för anpassade layouter</string>\n  <string name=\"available_layouts_connecting_message\">(Ansluter...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Ladda ned</string>\n  <string name=\"available_layouts_not_available_language\">Ditt språk finns inte tillgängligt, välj ett från listan</string>\n  <string name=\"available_layouts_language_dialog_title\">Tillgängliga språk</string>\n  <string name=\"available_layouts_checking_language_dialog\">Kontrollerar lokal språkversioner</string>\n  <string name=\"available_layouts_downloading_dialog\">Laddar ned...</string>\n  <string name=\"available_layouts_successful_download\">Layouten har laddats ned</string>\n  <string name=\"available_layouts_unsuccessful_download\">Layouten kan inte laddas ned, försök igen senare</string>\n  <string name=\"available_layouts_null_response_received\">Fel vid hämtning av data från server</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Standard</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Anpassad</string>\n  <string name=\"github_repository_settings_username\">Github-användare: </string>\n  <string name=\"github_repository_settings_repository_name\">Repository-namn:</string>\n  <string name=\"github_repository_settings_branch_name\">Branch-namn: </string>\n  <string name=\"github_repository_settings_valid_server\">Github Repository giltigt</string>\n  <string name=\"github_repository_settings_invalid_server\">Github Repository felaktigt</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">skapad framgångsrikt</string>\n  <string name=\"error_creating\">Fel vid skapande</string>\n  <string name=\"db_error\">Databasfel</string>\n  <string name=\"successfully_saved\">sparade framgångsrikt</string>\n  <string name=\"saving_error\">Sparfel</string>\n  <string name=\"pr_status\">Status på pull request</string>\n  <string name=\"repository_information_error\">Fel med repository-information</string>\n  <string name=\"successfully_uploaded\">Laddade upp framgångsrikt</string>\n  <string name=\"error_uploading\">Fel vid uppladdning</string>\n  <string name=\"gpx_file_read_error\">Fel vid läsnng av GPX-fil</string>\n  <string name=\"gpx_file_not_found\">GPX-fil hittades inte</string>\n  <string name=\"uploading_file\">Laddar upp fil</string>\n  <string name=\"item_selected\">Valt objekt:</string>\n  <string name=\"github_repository_private\">Privat:</string>\n  <string name=\"github_creating_repository\">Skapar repository</string>\n  <string name=\"github_no_repository_name\">Du måste ange ett repository-namn</string>\n  <string name=\"error_field_required\">Du måste ange ett värde på detta fällt</string>\n  <string name=\"retrieving_repositories\">Hämtar arkiv...</string>\n  <string name=\"error_retrieving_repositories\">Fel vid hämtning av arkiv</string>\n  <string name=\"successfully_retrieved_repositories\">Lyckades hämta arkiven</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">Konfigurera</string>\n  <string name=\"github_token_placeholder\">GitHub-token:</string>\n  <string name=\"github_get_token_btn\">Hämta token</string>\n  <string name=\"how_to_get_ghToken_guide_title\">Så här får du en GitHub-token:</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. Klicka på knappen för att öppna GitHub-webbplatsen och skapa en token. Logga in med ditt GitHub-konto om det behövs.</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. Välj \\\"Tokens (Klassisk)\\\" och klicka på knappen \\\"Generera ny token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. Ge din token ett beskrivande namn.</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. Välj ett utgångsdatum. Vi rekommenderar \\\"Inget utgångsdatum\\\" för att undvika att upprepa detta steg.</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. Välj det omfång eller de behörigheter du vill bevilja för denna token (OSMTracker behöver bara repo-behörigheten).</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. Klicka på knappen \\\"Generera token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. Kopiera den genererade token och klistra in den i fältet \\\"GitHub token\\\".</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ Du kan spara tomt för att radera dina inloggningsuppgifter.</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">Förbindelse medlande</string>\n  <string name=\"upload_to_github_create_fork\">Skapa\\ngren</string>\n  <string name=\"upload_to_github_open_pull_request\">Öppna dra-förfrågan</string>\n  <string name=\"upload_to_github_select_repo\">Välj ett arkiv</string>\n  <string name=\"upload_to_github_create_repository\">Skapa arkiv</string>\n  <string name=\"upload_to_github_commit_btn\">Förbinda</string>\n  <string name=\"upload_to_github_configure\">Konfigurera</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">Ursprungligt användarnamn för arkivet</string>\n  <string name=\"upload_to_github_forked_repo_name\">Ursprungligt arkivnamn</string>\n  <string name=\"create\">Skapa</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">Titel för dra-förfrågan</string>\n  <string name=\"upload_to_github_pr_description\">Beskrivning av dra-förfrågan</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">Introduktion till OSMTracker for Android™</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">Välkommen till OSMTracker for Android™ 👋</string>\n  <string name=\"app_intro_slide1_description\">Den här appen är fri programvara som respekterar din frihet!</string>\n  <!--Intro - slide What's new-->\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">Lycka till med spårningen 🗺😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker för Android kommer att använda din GPS-position för att spela in spårpunkter och vägpunkter, även när appen körs i bakgrunden.\n\\nDina data används inte för annonsering.</string>\n  <string name=\"no_app_to_handle_file_type\">Ingen app hittades för att öppna den här filen.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Röstnotering</string>\n  <string name=\"wpt_stillimage\">Bildnotering</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ta/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">ஓஎஸ்ஐ கண்காணிப்பின் இலட்சினை</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">பெரிதாக்கு</string>\n  <string name=\"acc.zoom_out\">சிறிதாக்கு</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">செயற்கைக்கோள் சிக்னல் வலிமை காட்டி</string>\n  <string name=\"acc.record_indicator\">முன்னேற்றம் பதிவு காட்டி </string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">கண்காணிக்கும் நிலை காட்டி</string>\n  <string name=\"acc.upload_status\">திறந்த தெரு வரைபடம் பதிவேற்ற நிலை காட்டி</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ta/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">வகையுறா</string>\n  <string name=\"tag.restriction\">கட்டுப்பாடு</string>\n  <string name=\"tag.car\">வண்டி‍</string>\n  <string name=\"tag.tourism\">சுற்றுலா</string>\n  <string name=\"tag.amenity\">வசதிகள்</string>\n  <string name=\"tag.amenity_more\">வசதிகள்(+)</string>\n  <string name=\"tag.way\">வழி</string>\n  <string name=\"tag.track\">தடம்</string>\n  <string name=\"tag.landuse\">நிலப் பயன்பாடு</string>\n  <string name=\"tag.misc_bus_stop\">பேருந்து‍ நிறுத்தம்</string>\n  <string name=\"tag.misc_railway\">தொடர் வண்டி</string>\n  <string name=\"tag.misc_telephone\">தொலைபேசி</string>\n  <string name=\"tag.misc_post_box\">அஞ்சல் பெட்டி‍</string>\n  <string name=\"tag.misc_atm\">தானியியக்க வங்கி இயந்திரம்</string>\n  <string name=\"tag.misc_bollard\">கட்டைத் தூண்</string>\n  <string name=\"tag.misc_toilets\">கழிப்பறைகள்</string>\n  <string name=\"tag.misc_shelter\">உறைவிடம்</string>\n  <string name=\"tag.misc_surveillance\">கண்காணிப்பு</string>\n  <string name=\"tag.restriction_20\">அதிகபட்சம் 20</string>\n  <string name=\"tag.restriction_30\">அதிகபட்சம் 30</string>\n  <string name=\"tag.restriction_40\">அதிகபட்சம் 40</string>\n  <string name=\"tag.restriction_50\">அதிகபட்சம் 50</string>\n  <string name=\"tag.restriction_60\">அதிகபட்சம் 60</string>\n  <string name=\"tag.restriction_70\">அதிகபட்சம் 70</string>\n  <string name=\"tag.restriction_80\">அதிகபட்சம் 80</string>\n  <string name=\"tag.restriction_90\">அதிகபட்சம் 90</string>\n  <string name=\"tag.restriction_100\">அதிகபட்சம் 100</string>\n  <string name=\"tag.restriction_110\">அதிகபட்சம் 110</string>\n  <string name=\"tag.restriction_120\">அதிகபட்சம் 120</string>\n  <string name=\"tag.restriction_130\">அதிகபட்சம் 130</string>\n  <string name=\"tag.restriction_no_exit\">வெளியேற வழி இல்லை</string>\n  <string name=\"tag.restriction_traffic_light\">போக்குவரத்து சைகை விளக்கு</string>\n  <string name=\"tag.restriction_one_way\">ஒரு‍ வழிப் பாதை</string>\n  <string name=\"tag.car_fuel_station\">எரிபொருள் நிலையம்</string>\n  <string name=\"tag.car_parking\">வாகன நிறுத்துமிடம்</string>\n  <string name=\"tag.car_emergency_phone\">அவசரநிலை தொலைபேசி</string>\n  <string name=\"tag.car_turning_circle\">திருப்பல் வட்டம்</string>\n  <string name=\"tag.car_speed_camera\">வேகத்தை கண்காணிக்கும் புகைப்படக் கருவி</string>\n  <string name=\"tag.tourism_view_point\">பார்வைக் கோணம்</string>\n  <string name=\"tag.tourism_information\">தகவல்</string>\n  <string name=\"tag.tourism_picnic\">மகிழ்வுலா இடங்கள்</string>\n  <string name=\"tag.tourism_attraction\">ஈர்ப்பு</string>\n  <string name=\"tag.tourism_theme_park\">வணிக நோக்குடைய பூங்கா</string>\n  <string name=\"tag.tourism_castle\">அரண்மனை</string>\n  <string name=\"tag.tourism_monument\">நினைவுச் சின்னம்</string>\n  <string name=\"tag.tourism_museum\">அருங்காட்சியகம்</string>\n  <string name=\"tag.tourism_cinema\">திரைப்படம்</string>\n  <string name=\"tag.amenity_bench\">மேசை</string>\n  <string name=\"tag.amenity_water\">தண்ணீர்</string>\n  <string name=\"tag.amenity_pharmacy\">மருந்துக் கடை</string>\n  <string name=\"tag.amenity_shop\">கடை</string>\n  <string name=\"tag.amenity_marina\">சிறுகலத் துறைமுகம்</string>\n  <string name=\"tag.amenity_sport\">விளையாட்டு‍</string>\n  <string name=\"tag.amenity_taxi\">வாடகை உந்து‍</string>\n  <string name=\"tag.amenity_recycling\">மறுசுழற்சி</string>\n  <string name=\"tag.amenity_post_office\">அஞ்சல் அலுவலகம்</string>\n  <string name=\"tag.amenity_library\">நூலகம்</string>\n  <string name=\"tag.amenitymore_school\">பள்ளி</string>\n  <string name=\"tag.amenitymore_police\">காவல்</string>\n  <string name=\"tag.amenitymore_fire_station\">தீயணைப்பு \nநிலையம்</string>\n  <string name=\"tag.amenitymore_bank\">வங்கி</string>\n  <string name=\"tag.amenitymore_playground\">விளையாட்டு‍ மைதானம்</string>\n  <string name=\"tag.amenitymore_pub\">கேளிக்கை விடுதி</string>\n  <string name=\"tag.amenitymore_hotel\">உணவகம்</string>\n  <string name=\"tag.amenitymore_motel\">சாலையோர உணவகம்</string>\n  <string name=\"tag.amenitymore_hostel\">தங்கும் விடுதி</string>\n  <string name=\"tag.amenitymore_restaurant\">உணவகம்</string>\n  <string name=\"tag.amenitymore_fastfood\">துரித உணவு</string>\n  <string name=\"tag.amenitymore_camp_site\">முகாமிடம்</string>\n  <string name=\"tag.way_bridge\">பாலம்</string>\n  <string name=\"tag.way_zebra_crossing\">பாதையை கடப்பதற்கான வரிக்குதிரை கோடுகள் </string>\n  <string name=\"tag.way_motorway\">நெடுஞ்சாலை</string>\n  <string name=\"tag.way_trunk\">அடிமரம்</string>\n  <string name=\"tag.way_primary\">முதன்மை</string>\n  <string name=\"tag.way_secondary\">இரண்டாம் நிலை</string>\n  <string name=\"tag.way_tertiary\">மூன்றாவதான</string>\n  <string name=\"tag.way_residential\">தங்குமிடம்</string>\n  <string name=\"tag.way_service\">சேவை</string>\n  <string name=\"tag.track_track\">வழித்தடம்</string>\n  <string name=\"tag.track_cycleway\">மிதிவண்டிப் பாதை</string>\n  <string name=\"tag.track_footway\">நடைபாதை</string>\n  <string name=\"tag.track_bridleway\">குதிரைப் பாதை</string>\n  <string name=\"tag.track_steps\">படிகள்</string>\n  <string name=\"tag.track_living_street\">வாழும் தெரு‍</string>\n  <string name=\"tag.track_pedestrian\">பாதசாரி</string>\n  <string name=\"tag.track_grade1\">தரம் 1</string>\n  <string name=\"tag.track_grade2\">தரம் 2</string>\n  <string name=\"tag.track_grade3\">தரம் 3</string>\n  <string name=\"tag.track_grade4\">தரம் 4</string>\n  <string name=\"tag.track_grade5\">தரம் 5</string>\n  <string name=\"tag.landuse_farm\">வயல்</string>\n  <string name=\"tag.landuse_landfill\">நிலப்பரப்பு</string>\n  <string name=\"tag.landuse_basin\">கொள்கலன்</string>\n  <string name=\"tag.landuse_reservoir\">நீர்த்தேக்கம்</string>\n  <string name=\"tag.landuse_forest\">காடு‍</string>\n  <string name=\"tag.landuse_allotments\">ஒதுக்கீடுகள்</string>\n  <string name=\"tag.landuse_cemetery\">மயானம்</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ta/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">ஓஎஸ்எம் தடமறியும் ஆண்ட்ராய்டு த </string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger_waiting_gps\">புவி நிலை காட்டி பொத்தான்கள் செயல்படுத்த காத்திருக்கிறது...</string>\n  <string name=\"tracklogger_voicerec_title\">ஒலிப்பதிவு செய்தல்</string>\n  <string name=\"tracklogger_voicerec_text\">ஒலிக் கீற்று‍ {0} கள் பதிவிடு.</string>\n  <string name=\"tracklogger_voicerec_stop\">நிறுத்தம்</string>\n  <string name=\"tracklogger_btnBack\">பின்னால்</string>\n  <string name=\"tracklogger_tracked\">தடமறியப்பட்டது‍: </string>\n  <string name=\"tracklogger_gps_disabled\">ஜிபிஎஸ் செயலிழக்கச் செய்யப்பட்டுள்ளது</string>\n  <string name=\"tracklogger_gps_disabled_hint\">ஜிபிஎஸ் செயலிழக்கச் செய்யப்பட்டுள்ளது. நீங்கள் அதை செயலாக்க வேண்டுமா?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">படத்தொகுப்பு அல்லது புகைப்படக் கருவி?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">பாதைப் புள்ளி பட்டியல்</string>\n  <string name=\"wplist_longitude\">நீண்ட</string>\n  <string name=\"wplist_elevation\">ஏற்றம்</string>\n  <string name=\"wplist_accuracy\">துல்லியம்</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">தடத்தின் மேலாளர்</string>\n  <string name=\"trackmgr_tracklist\">தடத்தின் பட்டியல்</string>\n  <string name=\"trackmgr_waypoints_count\">வழிக் குறிப்பு</string>\n  <string name=\"trackmgr_trackpoints_count\">தடத்தின் புள்ளி</string>\n  <string name=\"trackmgr_empty\">உங்களுக்கு‍ எந்த வழித் தடங்களும் இல்லை.</string>\n  <string name=\"trackmgr_newtrack_error\">புதிய தடத்தை உருவாக்க முடியவில்லை: {0}</string>\n  <string name=\"trackmgr_contextmenu_stop\">தடத்தை நிறுத்து‍</string>\n  <string name=\"trackmgr_contextmenu_delete\">நீக்கு</string>\n  <string name=\"trackmgr_contextmenu_export\">புவி நிலை காட்டி போல் ஏற்று‍</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">திறந்த தெரு‍ வரைபடத்தில் தரவேற்று‍</string>\n  <string name=\"trackmgr_contextmenu_details\">விவரங்கள்</string>\n  <string name=\"trackmgr_contextmenu_title\">தடம் #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">தடம் #{0} நீக்கப்படும்</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">தடத்தின் விளக்கங்கள்</string>\n  <string name=\"trackdetail_startdate\">தொடங்கும் நேரம்:</string>\n  <string name=\"trackdetail_enddate\">முடிவு நேரம்‌:</string>\n  <string name=\"trackdetail_startloc\">துவங்கும் நேரம்:</string>\n  <string name=\"trackdetail_endloc\">முடியும் நேரம்:</string>\n  <string name=\"trackdetail_exportdate\">ஏற்றுமதி செய்யப்பட்ட:</string>\n  <string name=\"trackdetail_osm_upload_date\">திறந்த தெரு‍ வரைபடத்திற்கு‍ பதிவேற்றப்பட்டது:</string>\n  <string name=\"trackdetail_btn_export\">புவி நிலை காட்டி‍ போல் ஏற்று‍</string>\n  <string name=\"trackdetail_description\">விளக்கம்</string>\n  <string name=\"trackdetail_tags\">இணைப்புப் புரி (காற்புள்ளியால் பிரிக்கப்பட்டது‍)</string>\n  <string name=\"trackdetail_description_mandatory\">நீங்கள் கண்டிப்பாக விளக்கத்தை உள்ளிட வேண்டும்</string>\n  <string name=\"osm_visibility_private\">தனிப்பட்ட</string>\n  <string name=\"osm_visibility_public\">பொது‍</string>\n  <string name=\"osm_visibility_trackable\">தடமறிய முடிந்தவை</string>\n  <string name=\"osm_visibility_identifiable\">அடையாளம் காணக்கூடிய</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload_ok\">சேமி மற்றும் பதிவேற்றுக</string>\n  <string name=\"osm_upload_error\">தடம் பதிவேற்றுவதில் பிழை </string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">குரல் பதிவு</string>\n  <string name=\"gpsstatus_record_textnote\">உரை குறிப்பு</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">அமைப்புகள்</string>\n  <string name=\"menu_about\">பற்றி</string>\n  <string name=\"menu_newtrack\">புதிய தடம்</string>\n  <string name=\"menu_save\">சேமி</string>\n  <string name=\"menu_cancel\">ரத்து‍ செய்</string>\n  <!--Errors-->\n  <!--GPX-->\n  <!--About screen-->\n  <string name=\"about\">பற்றி</string>\n  <string name=\"about_debug_info\">தகவலை பிழைதிருத்து‍</string>\n  <!--Notification-->\n  <string name=\"notification_text\">பிரதானத் திரையில் காண்பிக்க இங்கே தட்டவும்</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">தடத்தை காண்பி</string>\n  <string name=\"displaytrack_map\">பின்புல வரைபடக் காட்சி</string>\n  <string name=\"displaytrack_north\">காலகம்</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">சேமி</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">மெகா</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ta/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">ஒலிப்பதிவு, குரல் பதிவு</string>\n  <string name=\"wpt_stillimage\">படம்</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-th/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">อื่น ๆ</string>\n  <string name=\"tag.restriction\">ข้อจำกัด</string>\n  <string name=\"tag.car\">รถ</string>\n  <string name=\"tag.tourism\">ท่องเที่ยว</string>\n  <string name=\"tag.amenity\">แหล่งบริการ</string>\n  <string name=\"tag.amenity_more\">แหล่งบริการ (+)</string>\n  <string name=\"tag.way\">ถนน</string>\n  <string name=\"tag.track\">ทาง</string>\n  <string name=\"tag.landuse\">พื้นที่ใช้สอย</string>\n  <string name=\"tag.misc_bus_stop\">ป้ายรถประจำทาง</string>\n  <string name=\"tag.misc_railway\">รถไฟ</string>\n  <string name=\"tag.misc_telephone\">โทรศัพท์</string>\n  <string name=\"tag.misc_post_box\">ตู้ไปรษณีย์</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">เสากั้น</string>\n  <string name=\"tag.misc_toilets\">ห้องน้ำ</string>\n  <string name=\"tag.misc_shelter\">ศาลาพัก</string>\n  <string name=\"tag.misc_surveillance\">กล้องวงจรปิด</string>\n  <string name=\"tag.restriction_30\">สูงสุด 30</string>\n  <string name=\"tag.restriction_50\">สูงสุด 50</string>\n  <string name=\"tag.restriction_80\">สูงสุด 80</string>\n  <string name=\"tag.restriction_100\">สูงสุด 100</string>\n  <string name=\"tag.restriction_110\">สูงสุด 110</string>\n  <string name=\"tag.restriction_120\">สูงสุด 120</string>\n  <string name=\"tag.restriction_no_exit\">ทางตัน</string>\n  <string name=\"tag.restriction_one_way\">เดินรถทางเดียว</string>\n  <string name=\"tag.car_fuel_station\">สถานีเชื้อเพลิง</string>\n  <string name=\"tag.car_parking\">ลานจอดรถ</string>\n  <string name=\"tag.car_emergency_phone\">โทรศัพท์ฉุกเฉิน</string>\n  <string name=\"tag.car_turning_circle\">วงเวียนกลับรถ</string>\n  <string name=\"tag.car_speed_camera\">กล้องจับความเร็ว</string>\n  <string name=\"tag.tourism_view_point\">จุดชมวิว</string>\n  <string name=\"tag.tourism_information\">ข้อมูลท่องเที่ยว</string>\n  <string name=\"tag.tourism_picnic\">จุดปิกนิก</string>\n  <string name=\"tag.tourism_attraction\">จุดน่าสนใจ</string>\n  <string name=\"tag.tourism_theme_park\">สวนสนุก</string>\n  <string name=\"tag.tourism_castle\">ปราสาท</string>\n  <string name=\"tag.tourism_monument\">อนุสาวรีย์</string>\n  <string name=\"tag.tourism_museum\">พิพิธภัณฑ์</string>\n  <string name=\"tag.tourism_cinema\">โรงภาพยนตร์</string>\n  <string name=\"tag.amenity_bench\">ที่นั่ง</string>\n  <string name=\"tag.amenity_water\">น้ำ</string>\n  <string name=\"tag.amenity_pharmacy\">ร้านขายยา</string>\n  <string name=\"tag.amenity_shop\">ร้านค้า</string>\n  <string name=\"tag.amenity_marina\">ท่าเรือเล็ก</string>\n  <string name=\"tag.amenity_sport\">กีฬา</string>\n  <string name=\"tag.amenity_taxi\">แท็กซี่</string>\n  <string name=\"tag.amenity_recycling\">รีไซเคิล</string>\n  <string name=\"tag.amenity_post_office\">ที่ทำการไปรษณีย์</string>\n  <string name=\"tag.amenity_library\">ห้องสมุด</string>\n  <string name=\"tag.amenitymore_school\">โรงเรียน</string>\n  <string name=\"tag.amenitymore_police\">สถานีตำรวจ</string>\n  <string name=\"tag.amenitymore_fire_station\">สถานีดับเพลิง</string>\n  <string name=\"tag.amenitymore_bank\">ธนาคาร</string>\n  <string name=\"tag.amenitymore_playground\">สนามเล่น</string>\n  <string name=\"tag.amenitymore_pub\">ผับ</string>\n  <string name=\"tag.amenitymore_hotel\">โรงแรม</string>\n  <string name=\"tag.amenitymore_motel\">โมเทล</string>\n  <string name=\"tag.amenitymore_hostel\">โฮสเทล</string>\n  <string name=\"tag.amenitymore_restaurant\">ร้านอาหาร</string>\n  <string name=\"tag.amenitymore_fastfood\">จานด่วน</string>\n  <string name=\"tag.amenitymore_camp_site\">จุดตั้งแคมป์</string>\n  <string name=\"tag.way_bridge\">สะพาน</string>\n  <string name=\"tag.way_zebra_crossing\">ทางม้าลาย</string>\n  <string name=\"tag.way_motorway\">ทางหลวงพิเศษ</string>\n  <string name=\"tag.way_trunk\">สายใหญ่</string>\n  <string name=\"tag.way_primary\">ทางหลวงแผ่นดิน 1 หลัก</string>\n  <string name=\"tag.way_secondary\">ทางหลวงแผ่นดิน 2 หลัก</string>\n  <string name=\"tag.way_tertiary\">ทางหลวงแผ่นดิน 3 หลัก</string>\n  <string name=\"tag.way_residential\">ถนนที่พักอาศัย</string>\n  <string name=\"tag.way_service\">ทางบริการ</string>\n  <string name=\"tag.track_track\">ทาง</string>\n  <string name=\"tag.track_cycleway\">ทางจักรยาน</string>\n  <string name=\"tag.track_footway\">ทางเดินเท้า</string>\n  <string name=\"tag.track_bridleway\">ทางม้า</string>\n  <string name=\"tag.track_steps\">ขั้นบันได</string>\n  <string name=\"tag.track_living_street\">ถนนคนอาศัย</string>\n  <string name=\"tag.track_pedestrian\">ถนนคนเดิน</string>\n  <string name=\"tag.track_grade1\">ระดับ 1</string>\n  <string name=\"tag.track_grade2\">ระดับ 2</string>\n  <string name=\"tag.track_grade3\">ระดับ 3</string>\n  <string name=\"tag.track_grade4\">ระดับ 4</string>\n  <string name=\"tag.track_grade5\">ระดับ 5</string>\n  <string name=\"tag.landuse_farm\">เกษตร</string>\n  <string name=\"tag.landuse_landfill\">ที่ถมขยะ</string>\n  <string name=\"tag.landuse_basin\">แอ่งน้ำ</string>\n  <string name=\"tag.landuse_reservoir\">แหล่งเก็บน้ำ</string>\n  <string name=\"tag.landuse_forest\">ป่า</string>\n  <string name=\"tag.landuse_allotments\">ที่จัดสรร</string>\n  <string name=\"tag.landuse_cemetery\">สุสาน</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-th/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">ปูมเส้นทาง</string>\n  <string name=\"tracklogger_waiting_gps\">รอตรึงตำแหน่ง GPS เพื่อให้ปุ่มใช้งานได้…</string>\n  <string name=\"tracklogger_voicerec_title\">บันทึกเสียง</string>\n  <string name=\"tracklogger_voicerec_text\">บันทึกคลิปเสียง {0}วิ</string>\n  <string name=\"tracklogger_btnBack\">กลับ</string>\n  <string name=\"tracklogger_tracked\">ตาม: </string>\n  <string name=\"tracklogger_gps_disabled\">GPS ปิดอยู่</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS ถูกปิดอยู่ ต้องการเปิดไหม?</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">รายการจุดแวะ</string>\n  <string name=\"wplist_latitude\">Lat: </string>\n  <string name=\"wplist_longitude\">Long: </string>\n  <string name=\"wplist_elevation\">Ele: </string>\n  <string name=\"wplist_accuracy\">Accur: </string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">ตัวจัดการเส้นทาง</string>\n  <string name=\"trackmgr_tracklist\">รายการเส้นทาง:</string>\n  <string name=\"trackmgr_waypoints_count\">จุดแวะ: </string>\n  <string name=\"trackmgr_trackpoints_count\">จุดในเส้นทาง: </string>\n  <string name=\"trackmgr_empty\">คุณไม่มีเส้นทางใดเลย</string>\n  <string name=\"trackmgr_newtrack_error\">ไม่สามารถสร้างเส้นทางใหม่: {0}</string>\n  <string name=\"trackmgr_contextmenu_delete\">ลบ</string>\n  <string name=\"trackmgr_contextmenu_export\">ส่งออกเป็น GPX</string>\n  <string name=\"trackmgr_contextmenu_display\">แสดง</string>\n  <string name=\"trackmgr_contextmenu_title\">เส้นทาง #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">เส้นทาง #{0} จะถูกลบ</string>\n  <string name=\"trackmgr_exporting\">ส่งออกเส่้นทาง #{0}…</string>\n  <string name=\"trackmgr_export_error\">ไม่สามารถส่งเส้นทาง: {0}</string>\n  <!--Track Detail-->\n  <!--OSM upload-->\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">บันทึกเสียง</string>\n  <string name=\"gpsstatus_record_textnote\">จดข้อความ</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">ตั้งค่า</string>\n  <string name=\"menu_waypointlist\">จุดแวะ</string>\n  <string name=\"menu_displaytrack\">แสดงเส้นทาง</string>\n  <string name=\"menu_stoptracking\">หยุด และ บันทึก</string>\n  <string name=\"menu_newtrack\">เส้นทางใหม่</string>\n  <string name=\"menu_continue\">ต่อเส้นทางเดิม</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">ไม่สามารถเขียนลงอุปกรณ์บันทึกภายนอกได้</string>\n  <string name=\"error_externalstorage_not_writable_hint\">โปรดตรวจสอบว่าอุปกรณ์บันทึกภายนอกถูกใส่และติดตั้งอย่างถูกต้อง</string>\n  <string name=\"error_voicerec_failed\">บันทึกเสียงไม่สำเร็จ</string>\n  <string name=\"error_userlayout_parsing\">ผิดพลาดขณะวิเคราะห์ผังแฟ้ม XML  โปรดกลับไปใช้ผังปริยาย</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Tracked with OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Warning: HDOP values aren\\'t the HDOP returned by GPS device. They\\'re approximated for location accuracy in meters, and should not be taken into account.</string>\n  <!--About screen-->\n  <string name=\"about\">เกี่ยวกับ</string>\n  <string name=\"about_text\">ข้อมูลเพิ่มเติม เอกสาร และรายงานปัญหา โปรดไปที่หน้าเว็บโครงการ:</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker ยังทำงานอยู่</string>\n  <string name=\"notification_title\">OSMTracker ยังทำงานอยู่</string>\n  <string name=\"notification_text\">กดที่นี่เพื่อแสดงหน้าจอหลัก</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">แสดงเส้นทาง</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <!--Various-->\n  <string name=\"various_unit_meters\">ม</string>\n  <string name=\"various_accuracy\">ความแม่นยำ</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <!--parameters: (used sats, visible sats)-->\n  <!--parameters: (heading in degrees)-->\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap แสดงเส้นทาง</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-th/waypoints.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <string name=\"wpt_voicerec\">บันทึกเสียง</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logosu</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Yaklaş</string>\n  <string name=\"acc.zoom_out\">Uzaklaş</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Uydu sinyali gücü göstergesi</string>\n  <string name=\"acc.record_indicator\">Kayıt sürüyor göstergesi</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">İz durumu göstergesi</string>\n  <string name=\"acc.upload_status\">OpenStreetMap yükleme durumu göstergesi</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Ayarlar</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS ayarları</string>\n  <string name=\"prefs_gps_os_settings_summary\">Sistem GPS ayarları ekranını görüntüle</string>\n  <string name=\"prefs_check_gps_startup\">Başlatıldığında GPS\\'yi kontrol et</string>\n  <string name=\"prefs_check_gps_startup_summary\">Başlangıçta GPS\\'in devre dışı olup olmadığını kontrol et ve etkinleştirmeyi teklif et</string>\n  <string name=\"prefs_gps_ignore_clock\">GPS zamanlayıcısını görmezden gel</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Zaman damgaları için GPS zamanlayıcısını görmezden gel ve Android zamanlayıcısını kullan</string>\n  <string name=\"prefs_use_barometer\">Barometrik basıncı [hPa] kaydet</string>\n  <string name=\"prefs_use_barometer_summary\">Açma/kapatma, izlemeyi baştan başlatmayı zorunlu kılsın</string>\n  <string name=\"prefs_gps_logging_interval\">GPS kaydetme süresi</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Mümkün olan kısa kayıt süresini seçmek için 0\\'ı kullanın (Pil ömrünü etkiler)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">saniye</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS kaydetme mesafesi</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">İzleme noktaları arasındaki metre cinsinden asgari mesafe. Mümkün olan en kısa mesafeyi seçmek için 0\\'ı kullanın</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">metre</string>\n  <string name=\"prefs_ui\">Kullanıcı arayüzü</string>\n  <string name=\"prefs_ui_picture_source\">Varsayılan fotoğraf kaynağı</string>\n  <string name=\"prefs_ui_picture_source_summary\">Fotoğraflar kameradan mı galeriden mi alınsın?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Kamera</item>\n    <item>Galeri</item>\n    <item>Her zaman sor</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Buton hazır ayarları</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Özel bir buton grubu seçin (Belgelere bakın)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">VARSAYILAN YERLEŞİM</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Varsayılan</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">İNDİRİLMİŞ YERLEŞİM</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">Herhangi bir indirilmiş yerleşim dosyanız yok</string>\n  <string name=\"prefs_ui_available_layout\">Mevcut Yerleşimler</string>\n  <string name=\"prefs_ui_github_repository_settings\">GitHub Kod Havuzu Ayarları</string>\n  <string name=\"prefs_ui_orientation\">Yönelim</string>\n  <string name=\"prefs_ui_orientation_summary\">Buton bölmesi için tercih edilen yönelim</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Otomatik</item>\n    <item>Dikey</item>\n    <item>Yatay</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Ses kayıt süresi</string>\n  <string name=\"prefs_voicerec_duration_seconds\">saniye</string>\n  <string name=\"prefs_theme\">Ana ekran grafik teması</string>\n  <string name=\"prefs_theme_summary\">Değişikliğin etkili olması için uygulamanın yeniden başlatılması gerekiyor</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>OS varsayılan</item>\n    <item>OS varsayılan (karanlık)</item>\n    <item>OS varsayılan (aydınlık)</item>\n    <item>Yüksek kontrast</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Ekranı sürekli açık tut</string>\n  <string name=\"prefs_display_always_on_summary\">İzleme sırasında ekran açık kalacaktır. Pil tasarrufu yapmak için devre dışı bırakın</string>\n  <string name=\"prefs_displaytrack_osm\">Arka plan haritası</string>\n  <string name=\"prefs_displaytrack_osm_summary\">İzin altında OpenStreetMap haritasını görüntüle. Bir veri bağlantısı gerektirir</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">OpenStreetMap arka planı her zaman gösterilsin mi? Bir veri bağlantısı gerektirir</string>\n  <string name=\"prefs_output\">GPX ayarları</string>\n  <string name=\"prefs_storage_dir_hint\">Bir sonraki izlemede etkili olacak (Şu ankinde değil)</string>\n  <string name=\"prefs_output_one_dir_per_track\">İzleme başına bir dizin</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Her bir izlemeyi ve ilişkili dosyalarını kendi dizinine kaydedin</string>\n  <string name=\"prefs_output_filename\">İsimlendirilmiş izlemeler için dosya adı</string>\n  <string name=\"prefs_output_filename_summary\">İzlemenin bir adı olacaksa dosya adı için bir örüntü</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>İzleme adı</item>\n    <item>İsim, başlama tarihi ve zamanı</item>\n    <item>Başlama tarihi ve zamanı, İsim</item>\n    <item>Başlama tarihi ve zamanı</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">GPX dosyasının doğruluğu</string>\n  <string name=\"prefs_output_accuracy_summary\">GPX dosyasına doğruluk verisini koordinat adına veya koordinat yorumuna ekle</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Hiçbiri</item>\n    <item>Koordinat adına</item>\n    <item>Koordinat yorumuna</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">HDOP tahminini kullan</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">GPX\\'teki HDOP\\'yi doğruluktan elde edilen yaklaşık değerle doldur</string>\n  <string name=\"prefs_sound_enabled\">Sesi etkinleştir</string>\n  <string name=\"prefs_sound_enabled_summary\">Ses kaydı başladığında ve bittiğinde bir ses çalar</string>\n  <string name=\"prefs_osm_clear_oauth_data\">OSM doğrulamasını sıfırla</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">OSM bilgilerini ve izinlerini unut ve OSMTracker\\'ı bunları tekrar sormaya zorla</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">İzleme yüklemek için OSMTracker\\'a tekrardan yetki vermeniz gerekecek. Emin misiniz?</string>\n  <string name=\"prefs_map_tile\">Harita kutucuğu sağlayıcısı</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Hiçbiri</item>\n    <item>yorumda</item>\n    <item>uzantıda</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">Pusula yönünü dışa aktar</string>\n  <string name=\"prefs_compass_heading_summary\">Pusula verilerinin GPX dosyasına aktarılıp aktarılmayacağını ve nasıl aktarılacağını tanımlar</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Ses kaydetme</string>\n  <string name=\"wpt_stillimage\">Fotoğraf</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker logo</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Yakınlaş</string>\n  <string name=\"acc.zoom_out\">Uzaklaş</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">uydu sinyal gücü göstergesi</string>\n  <string name=\"acc.record_indicator\">kayıt ilerleme göstergesi</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">rota durumu göstergesi</string>\n  <string name=\"acc.upload_status\">OpenStreetMap yükleme durumu göstergesi</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Diğer</string>\n  <string name=\"tag.restriction\">Sınırlı</string>\n  <string name=\"tag.car\">Otomobil</string>\n  <string name=\"tag.tourism\">Turizm</string>\n  <string name=\"tag.amenity\">Sosyal Tesis</string>\n  <string name=\"tag.amenity_more\">Sosyal Tesis (+)</string>\n  <string name=\"tag.way\">Yol</string>\n  <string name=\"tag.track\">İz</string>\n  <string name=\"tag.landuse\">Kullanımdaki arazi</string>\n  <string name=\"tag.misc_bus_stop\">Otobüs durağı</string>\n  <string name=\"tag.misc_railway\">Demiryolu</string>\n  <string name=\"tag.misc_telephone\">Telefon</string>\n  <string name=\"tag.misc_post_box\">Posta kutusu</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">İskele</string>\n  <string name=\"tag.misc_toilets\">Tuvaletler</string>\n  <string name=\"tag.misc_shelter\">Sığınak</string>\n  <string name=\"tag.misc_surveillance\">Nezaret</string>\n  <string name=\"tag.restriction_20\">En fazla 20</string>\n  <string name=\"tag.restriction_30\">En fazla 30</string>\n  <string name=\"tag.restriction_40\">En fazla 40</string>\n  <string name=\"tag.restriction_50\">En fazla 50</string>\n  <string name=\"tag.restriction_60\">En fazla 60</string>\n  <string name=\"tag.restriction_70\">En fazla 70</string>\n  <string name=\"tag.restriction_80\">En fazla 80</string>\n  <string name=\"tag.restriction_90\">En fazla 90</string>\n  <string name=\"tag.restriction_100\">En fazla 100</string>\n  <string name=\"tag.restriction_110\">En fazla 110</string>\n  <string name=\"tag.restriction_120\">En fazla 120</string>\n  <string name=\"tag.restriction_130\">En fazla 130</string>\n  <string name=\"tag.restriction_no_exit\">Çıkış yok</string>\n  <string name=\"tag.restriction_traffic_light\">Trafik ışığı</string>\n  <string name=\"tag.restriction_one_way\">Tek yön</string>\n  <string name=\"tag.car_fuel_station\">Akaryakıt istasyonu</string>\n  <string name=\"tag.car_parking\">Park yeri</string>\n  <string name=\"tag.car_emergency_phone\">Acil Telefon</string>\n  <string name=\"tag.car_turning_circle\">Kavşak</string>\n  <string name=\"tag.car_speed_camera\">Hız kamerası</string>\n  <string name=\"tag.tourism_view_point\">Görüş noktası</string>\n  <string name=\"tag.tourism_information\">Danışma</string>\n  <string name=\"tag.tourism_picnic\">Piknik yeri</string>\n  <string name=\"tag.tourism_attraction\">İlgi çekici yer</string>\n  <string name=\"tag.tourism_theme_park\">Eğlence parkı</string>\n  <string name=\"tag.tourism_castle\">Kale</string>\n  <string name=\"tag.tourism_monument\">Anıt</string>\n  <string name=\"tag.tourism_museum\">Müze</string>\n  <string name=\"tag.tourism_cinema\">Sinema</string>\n  <string name=\"tag.amenity_bench\">Bank</string>\n  <string name=\"tag.amenity_water\">Su</string>\n  <string name=\"tag.amenity_pharmacy\">Eczane</string>\n  <string name=\"tag.amenity_shop\">Dükkan</string>\n  <string name=\"tag.amenity_marina\">Yat limanı</string>\n  <string name=\"tag.amenity_sport\">Spor</string>\n  <string name=\"tag.amenity_taxi\">Taksi</string>\n  <string name=\"tag.amenity_recycling\">Geri dönüşüm</string>\n  <string name=\"tag.amenity_post_office\">Postane</string>\n  <string name=\"tag.amenity_library\">Kütüphane</string>\n  <string name=\"tag.amenitymore_school\">Okul</string>\n  <string name=\"tag.amenitymore_police\">Polis</string>\n  <string name=\"tag.amenitymore_fire_station\">İtfaiye istasyon</string>\n  <string name=\"tag.amenitymore_bank\">Banka</string>\n  <string name=\"tag.amenitymore_playground\">Oyun alanı</string>\n  <string name=\"tag.amenitymore_pub\">Bar</string>\n  <string name=\"tag.amenitymore_hotel\">Otel</string>\n  <string name=\"tag.amenitymore_motel\">Motel</string>\n  <string name=\"tag.amenitymore_hostel\">Pansiyon</string>\n  <string name=\"tag.amenitymore_restaurant\">Restoran</string>\n  <string name=\"tag.amenitymore_fastfood\">Hızlı yemek</string>\n  <string name=\"tag.amenitymore_camp_site\">Kamp alanı</string>\n  <string name=\"tag.way_bridge\">Köprü</string>\n  <string name=\"tag.way_zebra_crossing\">Yaya geçidi</string>\n  <string name=\"tag.way_motorway\">Otoyol</string>\n  <string name=\"tag.way_trunk\">Baraj</string>\n  <string name=\"tag.way_primary\">birinci</string>\n  <string name=\"tag.way_secondary\">ikinci</string>\n  <string name=\"tag.way_tertiary\">üçüncü derece</string>\n  <string name=\"tag.way_residential\">yerleşim</string>\n  <string name=\"tag.way_service\">servis</string>\n  <string name=\"tag.track_track\">rota</string>\n  <string name=\"tag.track_cycleway\">dönüş yolu</string>\n  <string name=\"tag.track_footway\">Yaya geçidi</string>\n  <string name=\"tag.track_bridleway\">Uygun yol</string>\n  <string name=\"tag.track_steps\">Adımlar</string>\n  <string name=\"tag.track_living_street\">yaşayan sokak</string>\n  <string name=\"tag.track_pedestrian\">yaya</string>\n  <string name=\"tag.track_grade1\">1. sınıf</string>\n  <string name=\"tag.track_grade2\">2. sınıf</string>\n  <string name=\"tag.track_grade3\">3. sınıf</string>\n  <string name=\"tag.track_grade4\">4. sınıf</string>\n  <string name=\"tag.track_grade5\">5. sınıf</string>\n  <string name=\"tag.landuse_farm\">tarla</string>\n  <string name=\"tag.landuse_landfill\">dolgu arazi</string>\n  <string name=\"tag.landuse_basin\">havza</string>\n  <string name=\"tag.landuse_reservoir\">rezervuar</string>\n  <string name=\"tag.landuse_forest\">Orman</string>\n  <string name=\"tag.landuse_allotments\">hisseler</string>\n  <string name=\"tag.landuse_cemetery\">Mezarlık</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Ses kayıt</string>\n  <string name=\"wpt_stillimage\">Fotoğraf</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Логотип OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Збільшити</string>\n  <string name=\"acc.zoom_out\">Зменшити</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Індикатор рівня супутникового сигналу</string>\n  <string name=\"acc.record_indicator\">Індикатор прогресу запису</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Індикатор стану треку</string>\n  <string name=\"acc.upload_status\">Індикатор стану завантаження OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Налаштування</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Налаштування GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Показати екран системних налаштувань GPS</string>\n  <string name=\"prefs_check_gps_startup\">Перевіряти GPS при запуску</string>\n  <string name=\"prefs_check_gps_startup_summary\">Перевіряти статус GPS при запуску, пропонувати включити</string>\n  <string name=\"prefs_gps_ignore_clock\">Ігнорувати час GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Ігнорувати час GPS  та використовувати час телефону для часових міток</string>\n  <string name=\"prefs_gps_logging_interval\">Інтервал запису точок GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Задайте 0 для мінімально можливого (виснажує батарею)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">секунд(и)</string>\n  <string name=\"prefs_ui\">Інтерфейс</string>\n  <string name=\"prefs_ui_picture_source\">Типове джерело зображення</string>\n  <string name=\"prefs_ui_picture_source_summary\">Зробити знімок камерою чи вибрати з галереї?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Камера</item>\n    <item>Галерея</item>\n    <item>Завжди запитувати</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Шаблони кнопок</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Виберіть варіант розміщення кнопок (див. док.)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">ТИПОВИЙ МАКЕТ</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Типово</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">ЗАВАНТАЖЕНИЙ МАКЕТ</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">У вас немає завантажених макетів</string>\n  <string name=\"prefs_ui_available_layout\">Доступні Макети</string>\n  <string name=\"prefs_ui_github_repository_settings\">Налаштування репозиторію Github</string>\n  <string name=\"prefs_ui_orientation\">Орієнтація</string>\n  <string name=\"prefs_ui_orientation_summary\">Переважна орієнтація екрану з кнопками</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Автоматична</item>\n    <item>Портретна</item>\n    <item>Ландшафтна</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Тривалість запису аудіо</string>\n  <string name=\"prefs_voicerec_duration_seconds\">секунд(и)</string>\n  <string name=\"prefs_theme\">Основна тема оформлення</string>\n  <string name=\"prefs_theme_summary\">Перезапустіть застосунок, щоб зміни вступили в дію</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Типова у системі</item>\n    <item>Типова у системі(темна)</item>\n    <item>Типова у системі(світла)</item>\n    <item>Високий контраст</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Не вимикати екран</string>\n  <string name=\"prefs_display_always_on_summary\">Екран завжди буде увімкнений під час запису треку. Вимкніть для економії заряду батареї</string>\n  <string name=\"prefs_displaytrack_osm\">Фонова мапа</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Показує трек поверх мапи OpenStreetMap. Вимагає з\\'єднання з інтернетом</string>\n  <string name=\"prefs_output\">Налаштування GPX</string>\n  <string name=\"prefs_storage_dir_hint\">Буде використовуватися для запису наступного треку (не для поточного)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Окрема тека для кожного треку</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Зберігати кожен трек і пов\\'язані файли в окрему теку</string>\n  <string name=\"prefs_output_filename\">Ім\\'я файлів для іменованих треків</string>\n  <string name=\"prefs_output_filename_summary\">Шаблон імені файлу</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item> Ім\\'я треку </item>\n    <item> Ім\\'я, дата та час старту </item>\n    <item> Дата і час старту, Ім\\'я </item>\n    <item>Дата і час старту </item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Точність у GPX файлі</string>\n  <string name=\"prefs_output_accuracy_summary\">Записувати інформацію про точність в GPX файл, в назву дорожньої точки, або окремим тегом</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item> Ні </item>\n    <item> З ім\\'ям дорожньої точки </item>\n    <item> У коментар дорожньої точки </item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Використовувати усереднення HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Заповнювати тег HDOP в GPX файлі усередненим значенням точності</string>\n  <string name=\"prefs_sound_enabled\">Увімкнути звук</string>\n  <string name=\"prefs_sound_enabled_summary\">Відтворювати сигнал в момент початку і закінчення запису аудіо</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Скинути облікові дані OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Видалити облікові дані доступу до OSM і примусити OSMTracker запросити їх знову.</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Потрібно буде заново авторизувати OSMTracker, щоб завантажувати шляхи. Ви впевнені?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Ні</item>\n    <item>у коментарі</item>\n    <item>у розширенні</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Визначає, коли і як дані компасу можна експортувати у файл GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Інше</string>\n  <string name=\"tag.restriction\">Обмеження</string>\n  <string name=\"tag.car\">Машина</string>\n  <string name=\"tag.tourism\">Туризм</string>\n  <string name=\"tag.amenity\">Інфраструктура</string>\n  <string name=\"tag.amenity_more\">Інфраструктура(+)</string>\n  <string name=\"tag.way\">Дорога</string>\n  <string name=\"tag.track\">Путівець</string>\n  <string name=\"tag.landuse\">Землекористування</string>\n  <string name=\"tag.misc_bus_stop\">Зупинка автобуса</string>\n  <string name=\"tag.misc_railway\">Залізниця</string>\n  <string name=\"tag.misc_telephone\">Телефон</string>\n  <string name=\"tag.misc_post_box\">Пошта</string>\n  <string name=\"tag.misc_atm\">Банкомат</string>\n  <string name=\"tag.misc_bollard\">Перешкода</string>\n  <string name=\"tag.misc_toilets\">Туалет</string>\n  <string name=\"tag.misc_shelter\">Навіс</string>\n  <string name=\"tag.misc_surveillance\">Камера спостереження</string>\n  <string name=\"tag.restriction_20\">Max 20</string>\n  <string name=\"tag.restriction_30\">Max 30</string>\n  <string name=\"tag.restriction_40\">Max 40</string>\n  <string name=\"tag.restriction_50\">Max 50</string>\n  <string name=\"tag.restriction_60\">Max 60</string>\n  <string name=\"tag.restriction_70\">Max 70</string>\n  <string name=\"tag.restriction_80\">Max 80</string>\n  <string name=\"tag.restriction_90\">Max 90</string>\n  <string name=\"tag.restriction_100\">Max 100</string>\n  <string name=\"tag.restriction_110\">Max 110</string>\n  <string name=\"tag.restriction_120\">Max 120</string>\n  <string name=\"tag.restriction_130\">Max 130</string>\n  <string name=\"tag.restriction_no_exit\">Нема виїзду</string>\n  <string name=\"tag.restriction_traffic_light\">Світлофор</string>\n  <string name=\"tag.restriction_one_way\">Односторонній</string>\n  <string name=\"tag.car_fuel_station\">АЗС</string>\n  <string name=\"tag.car_parking\">Стоянка</string>\n  <string name=\"tag.car_emergency_phone\">Екстренний телефон</string>\n  <string name=\"tag.car_turning_circle\">Коло для повороту</string>\n  <string name=\"tag.car_speed_camera\">Камера швидкості</string>\n  <string name=\"tag.tourism_view_point\">Оглядовий майданчик</string>\n  <string name=\"tag.tourism_information\">Інформація</string>\n  <string name=\"tag.tourism_picnic\">Місце для пікніка</string>\n  <string name=\"tag.tourism_attraction\">Пам\\'ятка</string>\n  <string name=\"tag.tourism_theme_park\">Парк розваг</string>\n  <string name=\"tag.tourism_castle\">Замок</string>\n  <string name=\"tag.tourism_monument\">Пам\\'ятник</string>\n  <string name=\"tag.tourism_museum\">Музей</string>\n  <string name=\"tag.tourism_cinema\">Кіно</string>\n  <string name=\"tag.amenity_bench\">Лавка</string>\n  <string name=\"tag.amenity_water\">Вода</string>\n  <string name=\"tag.amenity_pharmacy\">Аптека</string>\n  <string name=\"tag.amenity_shop\">Магазин</string>\n  <string name=\"tag.amenity_marina\">Гавань</string>\n  <string name=\"tag.amenity_sport\">Спорт</string>\n  <string name=\"tag.amenity_taxi\">Таксі</string>\n  <string name=\"tag.amenity_doctors\">Лікарня,\\nЛікарі</string>\n  <string name=\"tag.amenity_recycling\">Сміттєзвалище</string>\n  <string name=\"tag.amenity_place_of_worship\">Культове\\nмісце</string>\n  <string name=\"tag.amenity_post_office\">Пошта</string>\n  <string name=\"tag.amenity_library\">Бібліотека</string>\n  <string name=\"tag.amenitymore_school\">Школа</string>\n  <string name=\"tag.amenitymore_police\">Міліція</string>\n  <string name=\"tag.amenitymore_fire_station\">Пожежна</string>\n  <string name=\"tag.amenitymore_bank\">Банк</string>\n  <string name=\"tag.amenitymore_playground\">Ігровий майданчик</string>\n  <string name=\"tag.amenitymore_pub\">Бар</string>\n  <string name=\"tag.amenitymore_hotel\">Готель</string>\n  <string name=\"tag.amenitymore_motel\">Мотель</string>\n  <string name=\"tag.amenitymore_hostel\">Хостел</string>\n  <string name=\"tag.amenitymore_restaurant\">Ресторан</string>\n  <string name=\"tag.amenitymore_fastfood\">Швидка їжа</string>\n  <string name=\"tag.amenitymore_camp_site\">Кемпінг</string>\n  <string name=\"tag.way_bridge\">Міст</string>\n  <string name=\"tag.way_zebra_crossing\">Пішохідний перехід</string>\n  <string name=\"tag.way_motorway\">Автострада</string>\n  <string name=\"tag.way_trunk\">Магістраль</string>\n  <string name=\"tag.way_primary\">Головна</string>\n  <string name=\"tag.way_secondary\">Другорядна</string>\n  <string name=\"tag.way_tertiary\">Третинна</string>\n  <string name=\"tag.way_residential\">Вулиця</string>\n  <string name=\"tag.way_service\">Службовий проїзд</string>\n  <string name=\"tag.track_track\">Путівець</string>\n  <string name=\"tag.track_cycleway\">Велосипедна доріжка</string>\n  <string name=\"tag.track_footway\">Пішохідна доріжка</string>\n  <string name=\"tag.track_bridleway\">Кінна стежка</string>\n  <string name=\"tag.track_steps\">Сходи</string>\n  <string name=\"tag.track_living_street\">Житлова зона</string>\n  <string name=\"tag.track_pedestrian\">Пішохідна вулиця</string>\n  <string name=\"tag.track_grade1\">Клас 1</string>\n  <string name=\"tag.track_grade2\">Клас 2</string>\n  <string name=\"tag.track_grade3\">Клас 3</string>\n  <string name=\"tag.track_grade4\">Клас 4</string>\n  <string name=\"tag.track_grade5\">Клас 5</string>\n  <string name=\"tag.landuse_farm\">Ферма</string>\n  <string name=\"tag.landuse_landfill\">Звалище</string>\n  <string name=\"tag.landuse_basin\">Басейн стоку</string>\n  <string name=\"tag.landuse_reservoir\">Резервуар</string>\n  <string name=\"tag.landuse_forest\">Ліс</string>\n  <string name=\"tag.landuse_allotments\">Дачі</string>\n  <string name=\"tag.landuse_cemetery\">Цвинтар</string>\n  <string name=\"tag.landuse_recreation_ground\">Зона  відпочинку</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker для Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Як і OSMTracker для Windows Mobile, програма дозволяє записувати Ваші подорожі, відзначаючи найважливіші точки (із записом аудіо, фото), експортувати їх у формат GPX для подальшого використання в редакторах OpenStreetMap, наприклад в JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Реєстратор шляхів</string>\n  <string name=\"tracklogger_waiting_gps\">Очікування сигналу GPS для активації кнопок…</string>\n  <string name=\"tracklogger_voicerec_title\">Запис голосу</string>\n  <string name=\"tracklogger_voicerec_text\">Записується аудіо: {0}с</string>\n  <string name=\"tracklogger_voicerec_stop\">Стоп</string>\n  <string name=\"tracklogger_btnBack\">Назад</string>\n  <string name=\"tracklogger_tracked\">Записано:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS вимкнено</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS вимкнено. Бажаєте його включити?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Галерея чи камера?</string>\n  <string name=\"tracklogger_camera\">Зробити знімок камерою</string>\n  <string name=\"tracklogger_gallery\">Вибрати фото з галереї</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Список дорожніх точок</string>\n  <string name=\"wplist_latitude\">Шир.:</string>\n  <string name=\"wplist_longitude\">Довг.:</string>\n  <string name=\"wplist_elevation\">Вис:</string>\n  <string name=\"wplist_accuracy\">Точн:</string>\n  <string name=\"wplist_compass\">Напр. компасу:</string>\n  <string name=\"wplist_compass_accuracy\">Точн. комп.:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Менеджер треків</string>\n  <string name=\"trackmgr_tracklist\">Список треків:</string>\n  <string name=\"trackmgr_waypoints_count\">Дорожні точки:</string>\n  <string name=\"trackmgr_trackpoints_count\">Точки треку:</string>\n  <string name=\"trackmgr_empty\">У вас не має  треків.</string>\n  <string name=\"trackmgr_newtrack_error\">Неможливо створити новий трек:{0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Наразі ви записуєте трек #{0}&lt;/b&gt;\\nВиберіть його у списку для продовження</string>\n  <string name=\"trackmgr_contextmenu_stop\">Зупинити запис</string>\n  <string name=\"trackmgr_contextmenu_resume\">Продовжити запис</string>\n  <string name=\"trackmgr_contextmenu_delete\">Вилучити</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Завантажити на OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Показати</string>\n  <string name=\"trackmgr_contextmenu_details\">Подробиці</string>\n  <string name=\"trackmgr_contextmenu_title\">Трек #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Трек #{0} буде видалено</string>\n  <string name=\"trackmgr_deleteall_confirm\">Усі треки буде вилучено. Ви впевнені?</string>\n  <string name=\"trackmgr_exporting\">Експорт треку #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Підготовка експорту…</string>\n  <string name=\"trackmgr_export_error\">Неможливо експортувати трек:{0}…</string>\n  <string name=\"trackmgr_exportall_confirm\">Буде експортовано всі треки, це може тривати певний час.</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Відомості треку</string>\n  <string name=\"trackdetail_startdate\">Час початку:</string>\n  <string name=\"trackdetail_enddate\">Час закінчення:</string>\n  <string name=\"trackdetail_startloc\">Початок:</string>\n  <string name=\"trackdetail_endloc\">Кінець:</string>\n  <string name=\"trackdetail_exportdate\">Експортовано:</string>\n  <string name=\"trackdetail_osm_upload_date\">Завантажено на OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Експортувати в GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Ще не експортовано)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Ще не завантажено)</string>\n  <string name=\"trackdetail_export_display\">Показати</string>\n  <string name=\"trackdetail_description\">Опис</string>\n  <string name=\"trackdetail_tags\">Мітки (через кому)</string>\n  <string name=\"trackdetail_description_mandatory\">Вам необхідно додати опис</string>\n  <string name=\"osm_visibility_private\">Приватний</string>\n  <string name=\"osm_visibility_public\">Загальнодоступний</string>\n  <string name=\"osm_visibility_trackable\">Відстежуваний</string>\n  <string name=\"osm_visibility_identifiable\">Індентифікований</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Завантаження на OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Зберегти і завантажити</string>\n  <string name=\"osm_upload_tmpfile_failed\">Не вдалося експортувати трек у тимчасовий файл</string>\n  <string name=\"osm_upload_oauth_failed\">Не вдалося пройти автентифікацію на OSM</string>\n  <string name=\"osm_upload_sending\">Надсилається трек #{0}...</string>\n  <string name=\"osm_upload_waiting_response\">Очікування відповіді від сервера OpenStreetMap…</string>\n  <string name=\"osm_upload_error\">Помилка завантаження треку</string>\n  <string name=\"osm_upload_bad_response\">Сервер OSM повернув помилку: ({0}) {1}</string>\n  <string name=\"osm_upload_unauthorized\">Помилка авторизації. Видалити збережені облікові дані OpenStreetMap?</string>\n  <string name=\"osm_upload_sucess\">Завантаження на OpenStreetMap завершено</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Запис звуку</string>\n  <string name=\"gpsstatus_record_stillimage\">Зробити фото</string>\n  <string name=\"gpsstatus_record_textnote\">Запис тексту</string>\n  <!--edit_waypoint_dialog-->\n  <!--Menu-->\n  <string name=\"menu_settings\">Налаштування</string>\n  <string name=\"menu_waypointlist\">Дорожні точки</string>\n  <string name=\"menu_about\">Про програму</string>\n  <string name=\"menu_displaytrack\">Показати трек</string>\n  <string name=\"menu_stoptracking\">Зупинити і зберегти</string>\n  <string name=\"menu_newtrack\">Новий трек</string>\n  <string name=\"menu_deletetracks\">Вилучити всі треки</string>\n  <string name=\"menu_continue\">Продовжити трек</string>\n  <string name=\"menu_stopcurrenttrack\">Зупинити запис треку</string>\n  <string name=\"menu_save\">Зберегти</string>\n  <string name=\"menu_cancel\">Скасувати</string>\n  <string name=\"menu_export\">Експортувати в GFX</string>\n  <string name=\"menu_osm_upload\">Завантаження на OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Центрувати по GPS</string>\n  <string name=\"menu_exportall\">Експортувати усе в GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Неможливо записати на зовнішній носій.</string>\n  <string name=\"error_create_track_dir\">Неможливо створити теку трека %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Перевірте, чи зовнішній носій вірно вставлений та змонтований</string>\n  <string name=\"error_voicerec_failed\">Помилка запису аудіо</string>\n  <string name=\"error_userlayout_parsing\">Помилка розбору файлу розмітки XML. Верніться до типової розмітки.</string>\n  <!--messages-->\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Записано на OSMTracker для Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Увага: значення HDOP - це не значення HDOP, одержані від GPS пристрою. Це наближено обчислені значення, з метровою точністю.</string>\n  <!--About screen-->\n  <string name=\"about\">Про програму:</string>\n  <string name=\"about_text\">Детальна інформація, повідомлення про помилки знаходяться на офіційному сайті проєкту:</string>\n  <string name=\"about_translate_text\">Допомогти з перекладом OSMTracker:</string>\n  <string name=\"about_debug_info\">Налагоджувальна інформація</string>\n  <string name=\"about_export_db\">Експортувати базу даних</string>\n  <string name=\"about_exporting_db\">Експортується база даних…</string>\n  <string name=\"about_export_db_result\">Результат експорту бази даних: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker запущено</string>\n  <string name=\"notification_title\">OSMTracker запущено (#{0})</string>\n  <string name=\"notification_text\">Натисніть тут для повернення на головний екран</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Показати трек</string>\n  <string name=\"displaytrack_map\">Показувати фонову мапу</string>\n  <string name=\"displaytrack_north\">Пн</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Зберегти</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">м</string>\n  <string name=\"various_accuracy\">Точність</string>\n  <string name=\"various_accuracy_with_sats\">Точність {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Очікування сигналу GPS…({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Очікуємо на напрямок…</string>\n  <string name=\"various_heading_unknown\">Напрямок не можна визначити</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Показ треку з OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">Оновити та встановити</string>\n  <string name=\"buttons_presets_context_menu_delete\">Вилучити</string>\n  <string name=\"buttons_presets_updating_layout\">Оновлення…</string>\n  <string name=\"buttons_presets_successful_update\">Макет оновлено</string>\n  <string name=\"buttons_presets_unsuccessful_update\">Макет не оновлено, спробуйте ще раз згодом</string>\n  <string name=\"buttons_presets_delete_message\">Ви точно бажаєте вилучити Макет - {0}?</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">Так</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">Теку значків вилучено</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">Цей файл не має жодної пов\\'язаної теки значків</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">Помилка: неможливо під\\'єднатися до Інтернету</string>\n  <string name=\"available_layouts_response_null_exception\">Помилка: неможливо під\\'єднатися до репозиторію макетів користувача</string>\n  <string name=\"available_layouts_connecting_message\">(З\\'єднуюсь…)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">Завантаження</string>\n  <string name=\"available_layouts_not_available_language\">Ваша мова не доступна, спробуйте іншу з переліку</string>\n  <string name=\"available_layouts_language_dialog_title\">Доступні мови</string>\n  <string name=\"available_layouts_checking_language_dialog\">Перевірка версії місцевої мови</string>\n  <string name=\"available_layouts_downloading_dialog\">Завантаження…</string>\n  <string name=\"available_layouts_successful_download\">Макет завантажено</string>\n  <string name=\"available_layouts_unsuccessful_download\">Макет не було завантажено, спробуйте ще раз згодом</string>\n  <string name=\"available_layouts_null_response_received\">Помилка отримання даних з сервера</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">Типово</string>\n  <string name=\"github_repository_settings_custom_checkbox\">Власні</string>\n  <string name=\"github_repository_settings_username\">Github логін: </string>\n  <string name=\"github_repository_settings_repository_name\">Репозиторій: </string>\n  <string name=\"github_repository_settings_branch_name\">Гілка:</string>\n  <string name=\"github_repository_settings_valid_server\">Репозиторій існує</string>\n  <string name=\"github_repository_settings_invalid_server\">Репозиторій не існує</string>\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Запис голосу</string>\n  <string name=\"wpt_stillimage\">Фото</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v11/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"trackmgr_newtrack_hint\">To record a track, press </string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-v11/theme_highcontrast.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<style name=\"HighContrast\" parent=\"@android:style/Theme.Holo\">\n\t\t<!-- item name=\"android:background\">#ffffff</item -->\n\t\t<item name=\"android:buttonStyle\">@style/Widget.Button</item>\n\t\t<item name=\"android:buttonStyleToggle\">@style/Widget.Button.Toggle</item>\n\t</style>\n\n\t<style name=\"Widget.Button\" parent=\"@android:style/Widget.Holo.Button\">\n\t\t<item name=\"android:background\">@drawable/theme_highcontrast_btn</item>\n\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n\t<style name=\"Widget.Button.Toggle\" parent=\"@android:style/Widget.Holo.Button.Toggle\">\n\t\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v11/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"DefaultTheme\" parent=\"@android:style/Theme.Holo\"/>\n    <style name=\"DarkTheme\" parent=\"@android:style/Theme.Holo\"/>\n    <style name=\"LightTheme\" parent=\"@android:style/Theme.Holo.Light\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-v14/theme_highcontrast.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<style name=\"HighContrast\" parent=\"@android:style/Theme.DeviceDefault\">\n\t\t<!-- item name=\"android:background\">#ffffff</item -->\n\t\t<item name=\"android:buttonStyle\">@style/Widget.Button</item>\n\t\t<item name=\"android:buttonStyleToggle\">@style/Widget.Button.Toggle</item>\n\t</style>\n\n\t<style name=\"Widget.Button\" parent=\"@android:style/Widget.DeviceDefault.Button\">\n\t\t<item name=\"android:background\">@drawable/theme_highcontrast_btn</item>\n\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n\t<style name=\"Widget.Button.Toggle\" parent=\"@android:style/Widget.DeviceDefault.Button.Toggle\">\n\t\t\t<item name=\"android:textColor\">#ffffff</item>\n\t</style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v14/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"DefaultTheme\" parent=\"@android:style/Theme.DeviceDefault\"/>\n    <style name=\"DarkTheme\" parent=\"@android:style/Theme.DeviceDefault\"/>\n    <style name=\"LightTheme\" parent=\"@android:style/Theme.DeviceDefault.Light\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-vi/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">Biểu trưng OSMTracker</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">Phóng to</string>\n  <string name=\"acc.zoom_out\">Thu nhỏ</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">Đèn sức tín hiệu</string>\n  <string name=\"acc.record_indicator\">Đèn đang ghi</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">Đèn trạng thái tuyến đường</string>\n  <string name=\"acc.upload_status\">Đèn trạng thái tải lên OpenStreetMap</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">Tùy chọn</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">Tùy chọn GPS</string>\n  <string name=\"prefs_gps_os_settings_summary\">Hiện màn hình tùy chọn GPS của hệ thống</string>\n  <string name=\"prefs_check_gps_startup\">Kiểm tra GPS khi khởi động</string>\n  <string name=\"prefs_check_gps_startup_summary\">Kiểm tra GPS có tắt khi khởi động và đề nghị bật nó lên</string>\n  <string name=\"prefs_gps_ignore_clock\">Bỏ qua đồng hồ GPS</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">Bỏ qua đồng hồ GPS và lấy ngày giờ từ đồng hồ Android</string>\n  <string name=\"prefs_gps_logging_interval\">Khoảng ghi GPS</string>\n  <string name=\"prefs_gps_logging_interval_summary\">Sử dụng 0 để ghi liên tục (tốn pin)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">giây</string>\n  <string name=\"prefs_ui\">Giao diện người dùng</string>\n  <string name=\"prefs_ui_picture_source\">Nguồn hình ảnh mặc định</string>\n  <string name=\"prefs_ui_picture_source_summary\">Lấy hình ảnh từ máy ảnh hoặc thư viện?</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>Máy ảnh</item>\n    <item>Thư viện</item>\n    <item>Luôn hỏi</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">Nút sẵn</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">Chọn bộ nút tùy biến (xem tài liệu)</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">Mặc định</string>\n  <string name=\"prefs_ui_orientation\">Hướng</string>\n  <string name=\"prefs_ui_orientation_summary\">Hướng ưa thích cho màn hình nút</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>Tự động</item>\n    <item>Đứng</item>\n    <item>Ngang</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">Thời gian ghi giọng nói</string>\n  <string name=\"prefs_voicerec_duration_seconds\">giây</string>\n  <string name=\"prefs_theme\">Hình dạng màn hình chính</string>\n  <string name=\"prefs_theme_summary\">Tùy chọn sẽ được áp dụng sau khi khởi động lại ứng dụng</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>Mặc định HĐH</item>\n    <item>Mặc định HĐH (tối)</item>\n    <item>Mặc định HĐH (sáng)</item>\n    <item>Tương phản cao</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">Luôn bật màn hình</string>\n  <string name=\"prefs_display_always_on_summary\">Màn hình sẽ bật lên luôn luôn trong việc theo dõi. Tắt để tiết kiệm pin.</string>\n  <string name=\"prefs_displaytrack_osm\">Bản đồ nề</string>\n  <string name=\"prefs_displaytrack_osm_summary\">Hiện bản đồ OpenStreetMap ở dưới tuyến đường (cần kết nối dữ liệu)</string>\n  <string name=\"prefs_output\">Tùy chọn GPX</string>\n  <string name=\"prefs_storage_dir\">Thư mục bộ nhớ bên ngoài (SD)</string>\n  <string name=\"prefs_storage_dir_hint\">Có hiệu lực vào tuyến đường sau (không phải tuyến đường hiện tại)</string>\n  <string name=\"prefs_output_one_dir_per_track\">Mỗi tuyến đường một thư mục</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">Lưu mỗi tuyến đường và các tập tin liên quan vào thư mục riêng</string>\n  <string name=\"prefs_output_filename\">Tên tập tin của tuyến đường có tên</string>\n  <string name=\"prefs_output_filename_summary\">Mẫu tên tập tin nếu tuyến đường có tên</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>Tên tuyến đường</item>\n    <item>Tên, ngày giờ bắt đầu</item>\n    <item>Ngày giờ bắt đầu</item>\n  </string-array>\n  <string name=\"prefs_output_accuracy\">Độ chính xác trong tập tin GPX</string>\n  <string name=\"prefs_output_accuracy_summary\">Ghi thông tin về độ chính xác vào tập tin GPX kèm tên hoặc lời ghi chép của tọa độ điểm</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>Không có</item>\n    <item>Kèm tên tọa độ điểm</item>\n    <item>Trong lời ghi chép của tọa độ điểm</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">Ước lượng HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">Điền HDOP trong GPX với giá trị ước lượng theo độ chính xác</string>\n  <string name=\"prefs_sound_enabled\">Bật âm thanh</string>\n  <string name=\"prefs_sound_enabled_summary\">Chơi tiếng khi bắt đầu và kết thúc ghi âm giọng nói</string>\n  <string name=\"prefs_osm_clear_oauth_data\">Đặt lại xác thực OSM</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">Quên các định danh và quyền lực OSM và bắt OSMTracker phải hỏi lại</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">Để tải lên tuyến đường về sau, bạn sẽ phải xác thực OSMTracker. Bạn có muốn tiếp tục?</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_map_tile_keys\">\n    <item>Mapnik</item>\n    <item>Bản đồ Xe đạp</item>\n    <item>MapQuest Mở</item>\n  </string-array>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>Không xuất</item>\n    <item>Xuất trong chú thích</item>\n    <item>Xuất trong phần mở rộng</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">Chọn định dạng để xuất dữ liệu la bàn ra tập tin GPX</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">Khác</string>\n  <string name=\"tag.restriction\">Hạn chế</string>\n  <string name=\"tag.car\">Xe</string>\n  <string name=\"tag.tourism\">Du lịch</string>\n  <string name=\"tag.amenity\">Tiện nghi</string>\n  <string name=\"tag.amenity_more\">Tiện nghi (+)</string>\n  <string name=\"tag.way\">Lối</string>\n  <string name=\"tag.track\">Đường mòn</string>\n  <string name=\"tag.landuse\">Kiểu sử dụng\nđất</string>\n  <string name=\"tag.misc_bus_stop\">Trạm\nxe buýt</string>\n  <string name=\"tag.misc_railway\">Đường sắt</string>\n  <string name=\"tag.misc_telephone\">Điện thoại</string>\n  <string name=\"tag.misc_post_box\">Hòm thư</string>\n  <string name=\"tag.misc_atm\">Máy rút tiền</string>\n  <string name=\"tag.misc_bollard\">Cột bê tông</string>\n  <string name=\"tag.misc_toilets\">Phòng vệ sinh</string>\n  <string name=\"tag.misc_shelter\">Chỗ che</string>\n  <string name=\"tag.misc_surveillance\">Máy quay phim giám sát</string>\n  <string name=\"tag.restriction_20\">Tối đa 20</string>\n  <string name=\"tag.restriction_30\">Tối đa 30</string>\n  <string name=\"tag.restriction_40\">Tối đa 40</string>\n  <string name=\"tag.restriction_50\">Tối đa 50</string>\n  <string name=\"tag.restriction_60\">Tối đa 60</string>\n  <string name=\"tag.restriction_70\">Tối đa 70</string>\n  <string name=\"tag.restriction_80\">Tối đa 80</string>\n  <string name=\"tag.restriction_90\">Tối đa 90</string>\n  <string name=\"tag.restriction_100\">Tối đa 100</string>\n  <string name=\"tag.restriction_110\">Tối đa 110</string>\n  <string name=\"tag.restriction_120\">Tối đa 120</string>\n  <string name=\"tag.restriction_130\">Tối đa 130</string>\n  <string name=\"tag.restriction_no_exit\">Không có\nlối ra</string>\n  <string name=\"tag.restriction_traffic_light\">Đèn giao thông</string>\n  <string name=\"tag.restriction_one_way\">Một chiều</string>\n  <string name=\"tag.car_fuel_station\">Cây xăng</string>\n  <string name=\"tag.car_parking\">Bãi đậu xe</string>\n  <string name=\"tag.car_emergency_phone\">Điện thoại\nkhẩn cấp</string>\n  <string name=\"tag.car_turning_circle\">Cuối đường\nvòng tròn</string>\n  <string name=\"tag.car_speed_camera\">Máy chụp ảnh\nxe chạy quá tốc độ</string>\n  <string name=\"tag.tourism_view_point\">Điểm ngắm cảnh</string>\n  <string name=\"tag.tourism_information\">Thông tin</string>\n  <string name=\"tag.tourism_picnic\">Nơi ăn ngoài trời</string>\n  <string name=\"tag.tourism_attraction\">Điểm thu hút\ndu lịch</string>\n  <string name=\"tag.tourism_theme_park\">Công viên chủ đề</string>\n  <string name=\"tag.tourism_castle\">Lâu đài</string>\n  <string name=\"tag.tourism_monument\">Công trình\ntưởng niệm</string>\n  <string name=\"tag.tourism_museum\">Bảo tàng</string>\n  <string name=\"tag.tourism_cinema\">Rạp phim</string>\n  <string name=\"tag.amenity_bench\">Ghế</string>\n  <string name=\"tag.amenity_water\">Nước uống</string>\n  <string name=\"tag.amenity_pharmacy\">Nhà thuốc</string>\n  <string name=\"tag.amenity_shop\">Tiệm</string>\n  <string name=\"tag.amenity_marina\">Bến tàu</string>\n  <string name=\"tag.amenity_sport\">Thể thao</string>\n  <string name=\"tag.amenity_taxi\">Tắc xi</string>\n  <string name=\"tag.amenity_doctors\">Bệnh viện,\\nBác sĩ</string>\n  <string name=\"tag.amenity_recycling\">Tái sinh</string>\n  <string name=\"tag.amenity_place_of_worship\">Nơi\\nthờ phụng</string>\n  <string name=\"tag.amenity_post_office\">Bưu điện</string>\n  <string name=\"tag.amenity_library\">Thư viện</string>\n  <string name=\"tag.amenitymore_school\">Nhà trường</string>\n  <string name=\"tag.amenitymore_police\">Cảnh sát</string>\n  <string name=\"tag.amenitymore_fire_station\">Cứu hỏa</string>\n  <string name=\"tag.amenitymore_bank\">Ngân hàng</string>\n  <string name=\"tag.amenitymore_playground\">Sân chơi</string>\n  <string name=\"tag.amenitymore_pub\">Quán rượu pub</string>\n  <string name=\"tag.amenitymore_hotel\">Khách sạn</string>\n  <string name=\"tag.amenitymore_motel\">Khách sạn dọc đường</string>\n  <string name=\"tag.amenitymore_hostel\">Nhà trọ</string>\n  <string name=\"tag.amenitymore_restaurant\">Nhà hàng</string>\n  <string name=\"tag.amenitymore_fastfood\">Nhà hàng ăn nhanh</string>\n  <string name=\"tag.amenitymore_camp_site\">Nơi cắm trại</string>\n  <string name=\"tag.way_bridge\">Cầu</string>\n  <string name=\"tag.way_zebra_crossing\">Lối băng qua đường</string>\n  <string name=\"tag.way_motorway\">Đường cao tốc</string>\n  <string name=\"tag.way_trunk\">Xa lộ</string>\n  <string name=\"tag.way_primary\">Đường chính</string>\n  <string name=\"tag.way_secondary\">Đường lớn</string>\n  <string name=\"tag.way_tertiary\">Phố</string>\n  <string name=\"tag.way_residential\">Ngõ dân cư</string>\n  <string name=\"tag.way_service\">Ngách</string>\n  <string name=\"tag.track_track\">Đường mòn</string>\n  <string name=\"tag.track_cycleway\">Đường xe đạp</string>\n  <string name=\"tag.track_footway\">Đường dạo</string>\n  <string name=\"tag.track_bridleway\">Đường mòn ngựa</string>\n  <string name=\"tag.track_steps\">Cầu thang</string>\n  <string name=\"tag.track_living_street\">Đường dân sinh</string>\n  <string name=\"tag.track_pedestrian\">Đường đi bộ</string>\n  <string name=\"tag.track_grade1\">Cấp 1</string>\n  <string name=\"tag.track_grade2\">Cấp 2</string>\n  <string name=\"tag.track_grade3\">Cấp 3</string>\n  <string name=\"tag.track_grade4\">Cấp 4</string>\n  <string name=\"tag.track_grade5\">Cấp 5</string>\n  <string name=\"tag.landuse_farm\">Trại</string>\n  <string name=\"tag.landuse_landfill\">Bãi rác</string>\n  <string name=\"tag.landuse_basin\">Lưu vực</string>\n  <string name=\"tag.landuse_reservoir\">Bể nước</string>\n  <string name=\"tag.landuse_forest\">Rừng trồng cây</string>\n  <string name=\"tag.landuse_allotments\">Khu vườn gia đình</string>\n  <string name=\"tag.landuse_cemetery\">Nghĩa địa</string>\n  <string name=\"tag.landuse_recreation_ground\">Sân\\ngiải trí</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker dành cho Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">Chương trình này được truyền cảm hứng từ OSMTracker trên phiên bản Windows Mobile. Nó cho phép theo dõi các đường đi của bạn, đánh dấu các tọa độ điểm đáng kể trên đường (bằng cách ghi giọng nói, chụp hình), và xuất dữ liệu sang định dạng GPX để mở sau trong các công cụ OpenStreetMap như JOSM.</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">Trình ghi tuyến đường</string>\n  <string name=\"tracklogger_waiting_gps\">Đang đợi GPS tìm vị trí để kích hoạt các nút…</string>\n  <string name=\"tracklogger_voicerec_title\">Ghi âm giọng nói</string>\n  <string name=\"tracklogger_voicerec_text\">Đang ghi đoạn âm {0} s.</string>\n  <string name=\"tracklogger_voicerec_stop\">Dừng lại</string>\n  <string name=\"tracklogger_btnBack\">Quay lại</string>\n  <string name=\"tracklogger_tracked\">Đã theo dõi:</string>\n  <string name=\"tracklogger_gps_disabled\">GPS đang tắt</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS hiện đang tắt. Bạn có muốn bật lên không?</string>\n  <string name=\"tracklogger_choose_gallery_camera\">Thư viện hoặc máy ảnh?</string>\n  <string name=\"tracklogger_camera\">Chụp hình với máy ảnh</string>\n  <string name=\"tracklogger_gallery\">Chọn hình từ thư viện</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">Danh sách tọa độ điểm</string>\n  <string name=\"wplist_latitude\">Kinh độ:</string>\n  <string name=\"wplist_longitude\">Vĩ độ:</string>\n  <string name=\"wplist_elevation\">Cao độ:</string>\n  <string name=\"wplist_accuracy\">Độ chinh xác:</string>\n  <string name=\"wplist_compass\">Hướng la bàn:</string>\n  <string name=\"wplist_compass_accuracy\">Độ chính xác la bàn:</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">Trình quản lý tuyến đường</string>\n  <string name=\"trackmgr_tracklist\">Danh sách tuyến đường:</string>\n  <string name=\"trackmgr_waypoints_count\">Tọa độ điểm:</string>\n  <string name=\"trackmgr_trackpoints_count\">Điểm tuyến đường:</string>\n  <string name=\"trackmgr_empty\">Bạn chưa có tuyến đường.</string>\n  <string name=\"trackmgr_newtrack_error\">Không thể tạo tuyến đường mới: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">Bạn hiện đang ghi <b>tuyến đường #{0}</b>\\nChọn nó trong danh sách để tiếp tục</string>\n  <string name=\"trackmgr_contextmenu_stop\">Dừng theo dõi</string>\n  <string name=\"trackmgr_contextmenu_resume\">Tiếp tục theo dõi</string>\n  <string name=\"trackmgr_contextmenu_delete\">Xóa</string>\n  <string name=\"trackmgr_contextmenu_export\">Xuất dưới dạng GPX</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">Tải lên OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">Hiển thị</string>\n  <string name=\"trackmgr_contextmenu_details\">Chi tiết</string>\n  <string name=\"trackmgr_contextmenu_title\">Tuyến đường #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">Tuyến đường #{0} sẽ bị xóa</string>\n  <string name=\"trackmgr_deleteall_confirm\">Bạn có chắc chắn muốn xóa tất cả các tuyến đường?</string>\n  <string name=\"trackmgr_exporting\">Đang xuất tuyến đường #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">Đang chuẩn bị xuất…</string>\n  <string name=\"trackmgr_export_error\">Không thể xuất tuyến đường: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">Việc xuất tất cả các tuyến đường sẽ được xuất có thể mất nhiều thời gian. Bạn có chắc chắn muốn tiếp tục?</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">Chi tiết Tuyến đường</string>\n  <string name=\"trackdetail_startdate\">Giờ bắt đầu:</string>\n  <string name=\"trackdetail_enddate\">Giờ kết thúc:</string>\n  <string name=\"trackdetail_startloc\">Bắt đầu vào:</string>\n  <string name=\"trackdetail_endloc\">Kết thúc vào:</string>\n  <string name=\"trackdetail_exportdate\">Ngày xuất:</string>\n  <string name=\"trackdetail_osm_upload_date\">Ngày tải lên OpenStreetMap:</string>\n  <string name=\"trackdetail_btn_export\">Xuất dưới dạng GPX</string>\n  <string name=\"trackdetail_export_notyet\">(Chưa xuất)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(Chưa tải lên)</string>\n  <string name=\"trackdetail_export_display\">Hiển thị</string>\n  <string name=\"trackdetail_description\">Miêu tả</string>\n  <string name=\"trackdetail_tags\">Thẻ (phân tách bằng dấu phẩy)</string>\n  <string name=\"trackdetail_description_mandatory\">Bạn phải nhập miêu tả</string>\n  <string name=\"osm_visibility_private\">Riêng</string>\n  <string name=\"osm_visibility_public\">Công khai</string>\n  <string name=\"osm_visibility_trackable\">Có thể theo dõi</string>\n  <string name=\"osm_visibility_identifiable\">Có thể nhận diện</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">Tải lên OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">Lưu và tải lên</string>\n  <string name=\"osm_upload_tmpfile_failed\">Không thể xuất tuyến đường ra tập tin tạm</string>\n  <string name=\"osm_upload_oauth_failed\">Không thể xác thực vào OpenStreetMap</string>\n  <string name=\"osm_upload_sending\">Đang gửi tuyến đường #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">Đang đợi máy chủ OpenStreetMap phản hồi…</string>\n  <string name=\"osm_upload_error\">Lỗi khi tải lên tuyến đường</string>\n  <string name=\"osm_upload_bad_response\">Máy chủ OSM gửi lại lỗi: ({0}) thông điệp {1}</string>\n  <string name=\"osm_upload_unauthorized\">Lỗi xác thực. Bạn có muốn xóa các định danh OpenStreetMap đã lưu?</string>\n  <string name=\"osm_upload_sucess\">Đã tải lên OpenStreetMap thành công</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">Ghi giọng nói</string>\n  <string name=\"gpsstatus_record_stillimage\">Chụp hình</string>\n  <string name=\"gpsstatus_record_textnote\">Ghi chép</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">Tùy chọn</string>\n  <string name=\"menu_waypointlist\">Tọa độ điểm</string>\n  <string name=\"menu_about\">Giới thiệu</string>\n  <string name=\"menu_displaytrack\">Hiện tuyến đường</string>\n  <string name=\"menu_stoptracking\">Dừng lại &amp; lưu</string>\n  <string name=\"menu_newtrack\">Tuyến đường mới</string>\n  <string name=\"menu_deletetracks\">Xóa tất cả các tuyến đường</string>\n  <string name=\"menu_continue\">Tiếp tục tuyến đường</string>\n  <string name=\"menu_stopcurrenttrack\">Dừng lại tuyến đường hiện tại</string>\n  <string name=\"menu_save\">Lưu</string>\n  <string name=\"menu_cancel\">Hủy bỏ</string>\n  <string name=\"menu_export\">Xuất dưới dạng GPX</string>\n  <string name=\"menu_osm_upload\">Tải lên OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">Đặt trung tâm vào GPS</string>\n  <string name=\"menu_exportall\">Xuất tất cả dưới dạng GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">Không thể ghi vào bộ nhớ bên ngoài.</string>\n  <string name=\"error_create_track_dir\">Không thể tạo thư mục tuyến đường %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">Xin vui lòng kiểm tra có cắm và gắn kết bộ nhớ bên ngoài một cách chính xác.</string>\n  <string name=\"error_voicerec_failed\">Thất bại khi ghi giọng nói</string>\n  <string name=\"error_userlayout_parsing\">Lỗi khi phân tích tập tin bố trí XML. Xin vui lòng khôi phục bố trí mặc định.</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">Được ghi bởi OSMTracker for Android™</string>\n  <string name=\"gpx_hdop_approximation_cmt\">Cảnh báo: Các giá trị HDOP không phải là HDOP theo thiết bị GPS. Chúng được ước lượng theo độ chính xác đo bằng mét.</string>\n  <!--About screen-->\n  <string name=\"about\">Giới thiệu</string>\n  <string name=\"about_text\">Để biết thêm thông tin, đọc tài liệu, và báo cáo lỗi, xin vui lòng ghé vào trang chủ dự án:</string>\n  <string name=\"about_translate_text\">Giúp biên dịch OSMTracker:</string>\n  <string name=\"about_debug_info\">Thông tin gỡ lỗi</string>\n  <string name=\"about_export_db\">Xuất cơ sở dữ liệu</string>\n  <string name=\"about_exporting_db\">Đang xuất cơ sở dữ liệu…</string>\n  <string name=\"about_export_db_result\">Kết quả xuất cơ sở dữ liệu: %s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker đang theo dõi</string>\n  <string name=\"notification_title\">OSMTracker đang theo dõi (#{0})</string>\n  <string name=\"notification_text\">Chạm vào đây để hiện màn hình chính</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">Hiện tuyến đường</string>\n  <string name=\"displaytrack_map\">Hiện bản đồ nền</string>\n  <string name=\"displaytrack_north\">B</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">Lưu</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">Độ chính xác</string>\n  <string name=\"various_accuracy_with_sats\">Độ chính xác {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">Đang đợi GPS tìm vị trí… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">Đang xác định hướng…</string>\n  <string name=\"various_heading_unknown\">Không thể xác định hướng</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">Hiển thị tuyến đường OpenStreetMap</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">Ghi âm giọng nói</string>\n  <string name=\"wpt_stillimage\">Hình ảnh</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker 图标</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">放大</string>\n  <string name=\"acc.zoom_out\">缩小</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">卫星信号强弱指示计</string>\n  <string name=\"acc.record_indicator\">记录进度指示计</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">轨迹状况指示计</string>\n  <string name=\"acc.upload_status\">OpemStreetMap 上传进度指示计</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">设置</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS设置</string>\n  <string name=\"prefs_gps_os_settings_summary\">显示系统GPS设置界面</string>\n  <string name=\"prefs_check_gps_startup\">开启时检查GPS状态</string>\n  <string name=\"prefs_check_gps_startup_summary\">若开启时检查到GPS关闭，开启它</string>\n  <string name=\"prefs_gps_ignore_clock\">忽略GPS授时</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">忽略GPS授时并使用系统时间作为时间戳</string>\n  <string name=\"prefs_gps_logging_interval\">GPS记录间隔</string>\n  <string name=\"prefs_gps_logging_interval_summary\">填0代表最小的可能时间间隔(会影响电池续航时长)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">秒</string>\n  <string name=\"prefs_ui\">用户界面</string>\n  <string name=\"prefs_ui_picture_source\">默认图片源</string>\n  <string name=\"prefs_ui_picture_source_summary\">拍照还是从相册中选择图片？</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>相机</item>\n    <item>相册</item>\n    <item>总是询问</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">按钮预设</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">选择一套自定义按钮(参见文档)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">默认布局</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">默认</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">下载布局</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">不存在已下载的布局文件</string>\n  <string name=\"prefs_ui_available_layout\">可用布局</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github仓库设置</string>\n  <string name=\"prefs_ui_orientation\">屏幕方向</string>\n  <string name=\"prefs_ui_orientation_summary\">按钮界面的屏幕方向偏好</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>自动</item>\n    <item>竖屏</item>\n    <item>横屏</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">录音时长</string>\n  <string name=\"prefs_voicerec_duration_seconds\">秒</string>\n  <string name=\"prefs_theme\">主界面主题</string>\n  <string name=\"prefs_theme_summary\">需重启应用使更改生效</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>系统默认</item>\n    <item>系统默认(黑)</item>\n    <item>系统默认(白)</item>\n    <item>高对比度</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">屏幕常亮</string>\n  <string name=\"prefs_display_always_on_summary\">记录轨迹时屏幕常亮。关闭以节约电量</string>\n  <string name=\"prefs_displaytrack_osm\">背景地图</string>\n  <string name=\"prefs_displaytrack_osm_summary\">在轨迹下显示OpenStreetMap。需要数据连接</string>\n  <string name=\"prefs_output\">GPX设置</string>\n  <string name=\"prefs_storage_dir_hint\">下次追踪生效(本次无效)</string>\n  <string name=\"prefs_output_one_dir_per_track\">每次追踪新建一个目录</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">分别将每条追踪记录及相关文件到各自目录</string>\n  <string name=\"prefs_output_filename\">已命名轨迹的文件名</string>\n  <string name=\"prefs_output_filename_summary\">文件名格式（如果轨迹有名称）</string>\n  <string name=\"prefs_output_accuracy\">GPX文件精度</string>\n  <string name=\"prefs_output_accuracy_summary\">将精度信息连同路径点名或路径点注释添加至GPX文件</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>无</item>\n    <item>路径点名</item>\n    <item>路径点注释</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">使用HDOP</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">使用精度信息估算填入GPX的HDOP值</string>\n  <string name=\"prefs_sound_enabled\">开启声音</string>\n  <string name=\"prefs_sound_enabled_summary\">在录音开始、结束时发出声响</string>\n  <string name=\"prefs_osm_clear_oauth_data\">重置 OSM 账户信息</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">清除本地OSM账户以及权限信息。OSMTracker将要求用户重新输入这些信息</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">你将要再次授权 OSMTracker 来上传轨迹。确定吗？</string>\n  <string name=\"prefs_map_tile_summary\"></string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>不保存</item>\n    <item>保存于注释</item>\n    <item>保存于扩展</item>\n  </string-array>\n  <string name=\"prefs_compass_heading_summary\">是否导出轨迹的方向信息，以及如何导出</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">杂项</string>\n  <string name=\"tag.restriction\">限制</string>\n  <string name=\"tag.car\">车</string>\n  <string name=\"tag.tourism\">旅游区</string>\n  <string name=\"tag.track\">追踪</string>\n  <string name=\"tag.misc_bus_stop\">汽车站</string>\n  <string name=\"tag.misc_railway\">铁路</string>\n  <string name=\"tag.misc_telephone\">电话亭</string>\n  <string name=\"tag.misc_post_box\">邮箱</string>\n  <string name=\"tag.misc_atm\">ATM机</string>\n  <string name=\"tag.misc_toilets\">厕所</string>\n  <string name=\"tag.misc_shelter\">庇护所</string>\n  <string name=\"tag.misc_surveillance\">监控</string>\n  <string name=\"tag.restriction_20\">最大 20</string>\n  <string name=\"tag.restriction_30\">最大 30</string>\n  <string name=\"tag.restriction_40\">最大 40</string>\n  <string name=\"tag.restriction_50\">最大 50</string>\n  <string name=\"tag.restriction_60\">最大 60</string>\n  <string name=\"tag.restriction_70\">最大 70</string>\n  <string name=\"tag.restriction_80\">最大 80</string>\n  <string name=\"tag.restriction_90\">最大 90</string>\n  <string name=\"tag.restriction_100\">最大 100</string>\n  <string name=\"tag.restriction_110\">最大 110</string>\n  <string name=\"tag.restriction_120\">最大 120</string>\n  <string name=\"tag.restriction_130\">最大 130</string>\n  <string name=\"tag.restriction_traffic_light\">交通灯</string>\n  <string name=\"tag.restriction_one_way\">单行道</string>\n  <string name=\"tag.car_fuel_station\">加油站</string>\n  <string name=\"tag.car_parking\">停车场</string>\n  <string name=\"tag.car_emergency_phone\">紧急电话</string>\n  <string name=\"tag.car_speed_camera\">测速摄像头</string>\n  <string name=\"tag.tourism_view_point\">景点</string>\n  <string name=\"tag.tourism_information\">信息板</string>\n  <string name=\"tag.tourism_picnic\">露营地</string>\n  <string name=\"tag.tourism_attraction\">名胜</string>\n  <string name=\"tag.tourism_theme_park\">主题公园</string>\n  <string name=\"tag.tourism_castle\">城堡</string>\n  <string name=\"tag.tourism_monument\">纪念馆</string>\n  <string name=\"tag.tourism_museum\">博物馆</string>\n  <string name=\"tag.tourism_cinema\">电影院</string>\n  <string name=\"tag.amenity_bench\">长椅</string>\n  <string name=\"tag.amenity_water\">水域</string>\n  <string name=\"tag.amenity_pharmacy\">药店</string>\n  <string name=\"tag.amenity_shop\">商店</string>\n  <string name=\"tag.amenity_marina\">小船坞</string>\n  <string name=\"tag.amenity_sport\">运动</string>\n  <string name=\"tag.amenity_taxi\">出租车站</string>\n  <string name=\"tag.amenity_recycling\">回收站</string>\n  <string name=\"tag.amenity_post_office\">邮局</string>\n  <string name=\"tag.amenity_library\">图书馆</string>\n  <string name=\"tag.amenitymore_school\">学校</string>\n  <string name=\"tag.amenitymore_police\">警察局</string>\n  <string name=\"tag.amenitymore_fire_station\">消防队</string>\n  <string name=\"tag.amenitymore_bank\">银行</string>\n  <string name=\"tag.amenitymore_playground\">游乐场</string>\n  <string name=\"tag.amenitymore_pub\">酒吧</string>\n  <string name=\"tag.amenitymore_hotel\">酒店</string>\n  <string name=\"tag.amenitymore_motel\">汽车旅馆</string>\n  <string name=\"tag.amenitymore_hostel\">招待所</string>\n  <string name=\"tag.amenitymore_restaurant\">餐厅</string>\n  <string name=\"tag.amenitymore_fastfood\">快餐</string>\n  <string name=\"tag.amenitymore_camp_site\">露营点</string>\n  <string name=\"tag.way_bridge\">桥</string>\n  <string name=\"tag.way_zebra_crossing\">斑马线</string>\n  <string name=\"tag.way_motorway\">高速公路</string>\n  <string name=\"tag.way_primary\">主要道路</string>\n  <string name=\"tag.way_secondary\">次级道路</string>\n  <string name=\"tag.way_residential\">住宅区</string>\n  <string name=\"tag.track_cycleway\">单车道</string>\n  <string name=\"tag.track_bridleway\">马道</string>\n  <string name=\"tag.track_living_street\">生活街道</string>\n  <string name=\"tag.track_pedestrian\">步行街</string>\n  <string name=\"tag.landuse_farm\">农场</string>\n  <string name=\"tag.landuse_landfill\">垃圾填埋场</string>\n  <string name=\"tag.landuse_reservoir\">水库</string>\n  <string name=\"tag.landuse_forest\">森林</string>\n  <string name=\"tag.landuse_cemetery\">墓地</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">受Windows Mobile操作系统版本的OSMTracker启发，本应用可以让你追踪记录你的旅行轨迹，标记重要的中途点(通过录音、照片等方式)，将其导出为GPX格式，以便此后用于诸如JOSM一类的OpenStreetMap工具。</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">追踪日志</string>\n  <string name=\"tracklogger_waiting_gps\">等待GPS定位来激活按钮...</string>\n  <string name=\"tracklogger_voicerec_title\">录音中</string>\n  <string name=\"tracklogger_voicerec_text\">录制了一个 {0} 秒的音频剪辑 </string>\n  <string name=\"tracklogger_voicerec_stop\">停止</string>\n  <string name=\"tracklogger_btnBack\">后退</string>\n  <string name=\"tracklogger_tracked\">已记录：</string>\n  <string name=\"tracklogger_gps_disabled\">GPS已禁用</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS已禁用。是否开启？</string>\n  <string name=\"tracklogger_choose_gallery_camera\">相册或拍照?</string>\n  <string name=\"tracklogger_camera\">用相机拍照</string>\n  <string name=\"tracklogger_gallery\">从相册中选择图片</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">路点列表</string>\n  <string name=\"wplist_latitude\">纬度：</string>\n  <string name=\"wplist_longitude\">经度：</string>\n  <string name=\"wplist_elevation\">海拔：</string>\n  <string name=\"wplist_accuracy\">精度：</string>\n  <string name=\"wplist_compass\">指南针朝向：</string>\n  <string name=\"wplist_compass_accuracy\">指南针精度：</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">轨迹管理器</string>\n  <string name=\"trackmgr_tracklist\">轨迹列表：</string>\n  <string name=\"trackmgr_waypoints_count\">路点：</string>\n  <string name=\"trackmgr_trackpoints_count\">追踪点：</string>\n  <string name=\"trackmgr_empty\">您没有任何轨迹。</string>\n  <string name=\"trackmgr_newtrack_error\">无法创建踪迹: {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">你正在录制 <b>轨迹 #{0}</b>\\n在列表中选择它以继续</string>\n  <string name=\"trackmgr_contextmenu_stop\">停止记录</string>\n  <string name=\"trackmgr_contextmenu_resume\">恢复追踪</string>\n  <string name=\"trackmgr_contextmenu_delete\">删除</string>\n  <string name=\"trackmgr_contextmenu_export\">以 GPX 文件导出</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">上传到 OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_display\">显示</string>\n  <string name=\"trackmgr_contextmenu_details\">详细</string>\n  <string name=\"trackmgr_contextmenu_title\">踪迹#{0}</string>\n  <string name=\"trackmgr_delete_confirm\">踪迹#{0}将被删除</string>\n  <string name=\"trackmgr_deleteall_confirm\">确定删除所有踪迹吗?</string>\n  <string name=\"trackmgr_exporting\">导出踪迹#{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">正准备导出…</string>\n  <string name=\"trackmgr_export_error\">不能导出踪迹: {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">所有已录制的轨迹都将被导出，这要花费较长的时间。您确定要这样做？</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">追踪细节</string>\n  <string name=\"trackdetail_startdate\">起始时间：</string>\n  <string name=\"trackdetail_enddate\">终止时间：</string>\n  <string name=\"trackdetail_startloc\">起始位置：</string>\n  <string name=\"trackdetail_endloc\">终止位置：</string>\n  <string name=\"trackdetail_exportdate\">导出：</string>\n  <string name=\"trackdetail_osm_upload_date\">上传到OpenStreetMap</string>\n  <string name=\"trackdetail_btn_export\">以GPX文件导出</string>\n  <string name=\"trackdetail_export_notyet\">(未导出)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(未上传)</string>\n  <string name=\"trackdetail_export_display\">显示</string>\n  <string name=\"trackdetail_description\">描述</string>\n  <string name=\"trackdetail_tags\">标签(逗号分隔)</string>\n  <string name=\"trackdetail_description_mandatory\">你必须输入描述</string>\n  <string name=\"osm_visibility_private\">私人</string>\n  <string name=\"osm_visibility_public\">公开</string>\n  <string name=\"osm_visibility_trackable\">可追踪</string>\n  <string name=\"osm_visibility_identifiable\">可识别</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">OpenStreetMap 上传</string>\n  <string name=\"osm_upload_ok\">保存并上传</string>\n  <string name=\"osm_upload_tmpfile_failed\">无法将轨迹导出为临时文件</string>\n  <string name=\"osm_upload_oauth_failed\">无法验证OSM账号</string>\n  <string name=\"osm_upload_sending\">发送轨迹 #{0} 中...</string>\n  <string name=\"osm_upload_waiting_response\">等待 OpenStreetMap 服务器回应</string>\n  <string name=\"osm_upload_error\">上传轨迹时出错</string>\n  <string name=\"osm_upload_bad_response\">OSM服务器返回了一条错误信息：({0}-详细信息如下:{1})</string>\n  <string name=\"osm_upload_unauthorized\">授权错误。是否清除已保存的OpenStreetMap证书？</string>\n  <string name=\"osm_upload_sucess\">已成功上传至OpenStreetMap</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">录音</string>\n  <string name=\"gpsstatus_record_stillimage\">拍照</string>\n  <string name=\"gpsstatus_record_textnote\">记笔记</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">设置</string>\n  <string name=\"menu_waypointlist\">路点</string>\n  <string name=\"menu_about\">关于</string>\n  <string name=\"menu_displaytrack\">显示轨迹</string>\n  <string name=\"menu_stoptracking\">停止 &amp; 保存</string>\n  <string name=\"menu_newtrack\">新轨迹</string>\n  <string name=\"menu_deletetracks\">删除全部轨迹</string>\n  <string name=\"menu_continue\">继续追踪</string>\n  <string name=\"menu_stopcurrenttrack\">停止当前追踪</string>\n  <string name=\"menu_save\">保存</string>\n  <string name=\"menu_cancel\">取消</string>\n  <string name=\"menu_export\">导出为 GPX</string>\n  <string name=\"menu_osm_upload\">OpenStreetMap 上传</string>\n  <string name=\"menu_center_to_gps\">根据GPS位置居中</string>\n  <string name=\"menu_exportall\">导出全部为 GPX</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">无法写入至外部存储。</string>\n  <string name=\"error_create_track_dir\">无法创建追踪文件夹 %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">请检查外部存储设备是否正确插入和安装。</string>\n  <string name=\"error_voicerec_failed\">录音失败</string>\n  <string name=\"error_userlayout_parsing\">解析XML样式文件出错。请还原回默认样式。</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">已以 OSMTracker for Android™ 记录轨迹</string>\n  <string name=\"gpx_hdop_approximation_cmt\">警告：HDOP值与GPS设备返回的HDOP值不同。这些值是由存在数米误差的位置估算得到的。</string>\n  <!--About screen-->\n  <string name=\"about\">关于</string>\n  <string name=\"about_text\">更多详细信息、文档和报告，请参阅项目主页：</string>\n  <string name=\"about_translate_text\">帮助翻译 OSMTracker:</string>\n  <string name=\"about_debug_info\">调试信息</string>\n  <string name=\"about_export_db\">导出数据库</string>\n  <string name=\"about_exporting_db\">正导出数据库…</string>\n  <string name=\"about_export_db_result\">数据库导出结果：%s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker 正在记录轨迹</string>\n  <string name=\"notification_title\">OSMTracker 正在记录踪迹 (#{0})</string>\n  <string name=\"notification_text\">轻触此处显示主界面</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">显示轨迹</string>\n  <string name=\"displaytrack_map\">显示背景地图</string>\n  <string name=\"displaytrack_north\">N</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">保存</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">m</string>\n  <string name=\"various_accuracy\">准确性</string>\n  <string name=\"various_accuracy_with_sats\">精度{0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">等待GPS修复……({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">等待定向……</string>\n  <string name=\"various_heading_unknown\">前进方向无法确定</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">以 OpenStreetMap 显示轨迹</string>\n  <!--Buttons presets messages-->\n  <!--Available Layouts messages-->\n  <!--Github Repository Settings-->\n  <!--App Introduction-->\n  <!--Intro - slide1-->\n  <!--Intro - slide2-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">录音</string>\n  <string name=\"wpt_stillimage\">照片</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/accessibility.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--About screen-->\n  <string name=\"acc.osmtracker_logo\">OSMTracker 標誌</string>\n  <!--Zoom in/out in map view-->\n  <string name=\"acc.zoom_in\">放大</string>\n  <string name=\"acc.zoom_out\">縮小</string>\n  <string name=\"acc.zoom_center\">縮放中心</string>\n  <!--GPS status bar-->\n  <string name=\"acc.sat_indicator\">訊號強度</string>\n  <string name=\"acc.record_indicator\">正在記錄</string>\n  <!--Track list-->\n  <string name=\"acc.track_status\">軌跡狀態</string>\n  <string name=\"acc.upload_status\">OSM上傳進度</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings-preferences.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Preferences-->\n  <string name=\"prefs\">設定</string>\n  <string name=\"prefs_gps\">GPS</string>\n  <string name=\"prefs_gps_os_settings\">GPS 設定</string>\n  <string name=\"prefs_gps_os_settings_summary\">顯示系統 GPS 設定畫面</string>\n  <string name=\"prefs_check_gps_startup\">在啟動時檢查 GPS 狀態</string>\n  <string name=\"prefs_check_gps_startup_summary\">啟動時檢查 GPS 是否關閉並提示開啟。</string>\n  <string name=\"prefs_gps_ignore_clock\">忽略 GPS 的時間</string>\n  <string name=\"prefs_gps_ignore_clock_summary\">忽略 GPS 的時間，改用 Android 系統時間</string>\n  <string name=\"prefs_use_barometer\">記錄氣壓 [hPa]</string>\n  <string name=\"prefs_use_barometer_summary\">切換需要重新啟動軌跡記錄</string>\n  <string name=\"prefs_notes\">文字註解</string>\n  <string name=\"prefs_notes_summary\">選取註解文字按鈕的值的儲存樣式</string>\n  <string-array name=\"prefs_notes_keys\">\n    <item>路徑</item>\n    <item>OSM 註解</item>\n    <item>全部</item>\n  </string-array>\n  <string name=\"prefs_gps_logging_interval\">GPS 記錄頻率</string>\n  <string name=\"prefs_gps_logging_interval_summary\">使用 0 會盡可能的記錄資料 (會影響電池續航力)</string>\n  <string name=\"prefs_gps_logging_interval_seconds\">秒</string>\n  <string name=\"prefs_gps_logging_interval_empty\">GPS 記錄頻率不能是空白的</string>\n  <string name=\"prefs_gps_logging_min_distance\">GPS 記錄距離</string>\n  <string name=\"prefs_gps_logging_min_distance_summary\">以公尺尺度的航點之間最小距離，設為 0 則是最小的可能</string>\n  <string name=\"prefs_gps_logging_min_distance_meters\">公尺</string>\n  <string name=\"prefs_gps_logging_min_distance_empty\">軌跡點之間最短距離不能是空白的</string>\n  <string name=\"prefs_ui\">使用者介面</string>\n  <string name=\"prefs_ui_picture_source\">預設照片來源</string>\n  <string name=\"prefs_ui_picture_source_summary\">拍張照或從相簿挑選？</string>\n  <string-array name=\"prefs_ui_picture_source_keys\">\n    <item>相機</item>\n    <item>相簿</item>\n    <item>總是詢問我</item>\n  </string-array>\n  <string name=\"prefs_ui_buttons_layout\">按鍵配置</string>\n  <string name=\"prefs_ui_buttons_layout_summary\">選擇自訂的按鍵配置 (參見文件)</string>\n  <string name=\"prefs_ui_buttons_layout_default_section\">預設樣式</string>\n  <string name=\"prefs_ui_buttons_layout_defaut\">預設</string>\n  <string name=\"prefs_ui_buttons_layout_downloaded_section\">下載樣式</string>\n  <string name=\"prefs_ui_buttons_layout_empty_section\">你沒有下載樣式檔</string>\n  <string name=\"prefs_ui_available_layout\">可用的樣式</string>\n  <string name=\"prefs_ui_github_repository_settings\">Github 程式庫設定</string>\n  <string name=\"prefs_ui_orientation\">排列方向</string>\n  <string name=\"prefs_ui_orientation_summary\">偏好的功能鈕介面排列方向</string>\n  <string-array name=\"prefs_ui_orientation_options_keys\">\n    <item>自動</item>\n    <item>直立</item>\n    <item>橫向</item>\n  </string-array>\n  <string name=\"prefs_voicerec_duration\">語音錄製長度</string>\n  <string name=\"prefs_voicerec_duration_seconds\">秒</string>\n  <string name=\"prefs_theme\">主功能畫面圖像主題</string>\n  <string name=\"prefs_theme_summary\">需重新啟用程式，這項設定才會生效</string>\n  <string-array name=\"prefs_theme_keys\">\n    <item>作業系統預設</item>\n    <item>作業系統預設 (暗)</item>\n    <item>作業系統預設 (亮)</item>\n    <item>高反差</item>\n  </string-array>\n  <string name=\"prefs_display_always_on\">讓螢幕維持開啟</string>\n  <string name=\"prefs_display_always_on_summary\">在記錄軌跡時，螢幕會保持開啟。關閉這個設定可節省用電量</string>\n  <string name=\"prefs_displaytrack_osm\">背景地圖</string>\n  <string name=\"prefs_displaytrack_osm_summary\">在軌跡底下顯示 OpenStreetMap 地圖。本功能需有可用的網路連結以傳輸資料</string>\n  <string name=\"prefs_displaytrack_osm_summary_ask\">保持顯示 OpenStreetMap 底圖？此功能需要連線</string>\n  <string name=\"prefs_output\">GPX 相關設定</string>\n  <string name=\"prefs_storage_dir\">文件當中的儲存資料夾</string>\n  <string name=\"prefs_storage_dir_hint\">設定值將在記錄下一筆軌跡資料時生效 (不是目前這筆)</string>\n  <string name=\"prefs_storage_dir_empty\">儲存目標不能是空白的</string>\n  <string name=\"prefs_output_one_dir_per_track\">給每筆軌跡各配置一個專屬資料夾</string>\n  <string name=\"prefs_output_one_dir_per_track_summary\">將每筆軌跡以及相關的檔案一起放在專屬的資料夾當中</string>\n  <string name=\"prefs_output_filename\">軌跡資料檔命名</string>\n  <string name=\"prefs_output_filename_summary\">軌跡資料檔的命名樣式</string>\n  <string-array name=\"prefs_output_filename_keys\">\n    <item>軌跡名稱</item>\n    <item>名稱、開始日期與時間</item>\n    <item>開始日期與時間、名稱</item>\n    <item>開始日期與時間</item>\n  </string-array>\n  <string name=\"prefs_output_filename_label\">檔案名稱標籤</string>\n  <string name=\"prefs_output_filename_label_summary\">這個標籤會附在檔案名稱的結尾</string>\n  <string name=\"prefs_output_accuracy\">在 GPX 檔中附加精確度資訊</string>\n  <string name=\"prefs_output_accuracy_summary\">將精確度資訊添加於 GPX 檔中的航點名稱，或是航點註解中</string>\n  <string-array name=\"prefs_output_accuracy_keys\">\n    <item>無</item>\n    <item>於航點名稱內</item>\n    <item>於航點註解中</item>\n  </string-array>\n  <string name=\"prefs_output_gpx_hdop_approximation\">使用 HDOP 近似值</string>\n  <string name=\"prefs_output_gpx_hdop_approximation_summary\">在 GPX 檔中填入 HDOP 近似值</string>\n  <string name=\"prefs_sound_enabled\">使用聲音</string>\n  <string name=\"prefs_sound_enabled_summary\">當錄製語音期間可播放聲音</string>\n  <string name=\"prefs_osm_visibility\">軌跡可見度</string>\n  <string name=\"prefs_osm_visibility_summary\">上傳到 openstreetmap.org 偏好的軌跡可見度</string>\n  <string-array name=\"prefs_osm_visibility_keys\">\n    <item>私人</item>\n    <item>可追蹤</item>\n    <item>公開</item>\n    <item>可識別</item>\n  </string-array>\n  <string name=\"prefs_osm_clear_oauth_data\">重新設定 OSM 認證</string>\n  <string name=\"prefs_osm_clear_oauth_data_summary\">捨棄現存的 OSM 認證與權限資訊，強制 OSMTracker 重新取得它們</string>\n  <string name=\"prefs_osm_clear_oauth_data_dialog\">您必須重新認證 OSMTracker 方能繼續上傳軌跡資料，確定嗎？</string>\n  <string name=\"prefs_map_tile\">地圖圖磚提供者</string>\n  <string name=\"prefs_map_tile_summary\">選擇渲染地圖的圖磚提供者</string>\n  <string-array name=\"prefs_compass_heading_keys\">\n    <item>無</item>\n    <item>於註解</item>\n    <item>於副檔名</item>\n  </string-array>\n  <string name=\"prefs_compass_heading\">匯出羅盤方位</string>\n  <string name=\"prefs_compass_heading_summary\">定義羅盤資料要如何匯出到 GPX 檔案</string>\n  <string name=\"prefs_reset_default_value\">重設預設值</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings-tags.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"tag.misc\">其他</string>\n  <string name=\"tag.restriction\">限制</string>\n  <string name=\"tag.car\">汽車</string>\n  <string name=\"tag.tourism\">觀光</string>\n  <string name=\"tag.amenity\">設施</string>\n  <string name=\"tag.amenity_more\">設施 (+)</string>\n  <string name=\"tag.way\">道路</string>\n  <string name=\"tag.track\">路徑</string>\n  <string name=\"tag.landuse\">土地利用</string>\n  <string name=\"tag.misc_bus_stop\">公車站</string>\n  <string name=\"tag.misc_railway\">鐵路</string>\n  <string name=\"tag.misc_telephone\">電話</string>\n  <string name=\"tag.misc_post_box\">郵筒</string>\n  <string name=\"tag.misc_atm\">ATM</string>\n  <string name=\"tag.misc_bollard\">安全島</string>\n  <string name=\"tag.misc_toilets\">洗手間</string>\n  <string name=\"tag.misc_shelter\">涼亭</string>\n  <string name=\"tag.misc_surveillance\">監視器</string>\n  <string name=\"tag.restriction_20\">最大值 20</string>\n  <string name=\"tag.restriction_30\">最大值 30</string>\n  <string name=\"tag.restriction_40\">最大值 40</string>\n  <string name=\"tag.restriction_50\">最大值 50</string>\n  <string name=\"tag.restriction_60\">最大值 60</string>\n  <string name=\"tag.restriction_70\">最大值 70</string>\n  <string name=\"tag.restriction_80\">最大值 80</string>\n  <string name=\"tag.restriction_90\">最大值 90</string>\n  <string name=\"tag.restriction_100\">最大值 100</string>\n  <string name=\"tag.restriction_110\">最大值 110</string>\n  <string name=\"tag.restriction_120\">最大值 120</string>\n  <string name=\"tag.restriction_130\">最大值 130</string>\n  <string name=\"tag.restriction_no_exit\">無出口</string>\n  <string name=\"tag.restriction_traffic_light\">紅綠燈</string>\n  <string name=\"tag.restriction_one_way\">單行道</string>\n  <string name=\"tag.car_fuel_station\">加油站</string>\n  <string name=\"tag.car_parking\">停車場</string>\n  <string name=\"tag.car_emergency_phone\">緊急電話</string>\n  <string name=\"tag.car_turning_circle\">迴轉道</string>\n  <string name=\"tag.car_speed_camera\">測速照相機</string>\n  <string name=\"tag.tourism_view_point\">視點</string>\n  <string name=\"tag.tourism_information\">道路資訊</string>\n  <string name=\"tag.tourism_picnic\">野餐區</string>\n  <string name=\"tag.tourism_attraction\">景點</string>\n  <string name=\"tag.tourism_theme_park\">主題樂園</string>\n  <string name=\"tag.tourism_castle\">城堡</string>\n  <string name=\"tag.tourism_monument\">紀念館</string>\n  <string name=\"tag.tourism_museum\">博物館</string>\n  <string name=\"tag.tourism_cinema\">電影院</string>\n  <string name=\"tag.amenity_bench\">長椅</string>\n  <string name=\"tag.amenity_water\">水域</string>\n  <string name=\"tag.amenity_pharmacy\">藥局</string>\n  <string name=\"tag.amenity_shop\">購物</string>\n  <string name=\"tag.amenity_marina\">碼頭</string>\n  <string name=\"tag.amenity_sport\">運動場</string>\n  <string name=\"tag.amenity_taxi\">計程車</string>\n  <string name=\"tag.amenity_doctors\">醫院,\\n醫生</string>\n  <string name=\"tag.amenity_recycling\">資源回收</string>\n  <string name=\"tag.amenity_place_of_worship\">宗教\\n場所</string>\n  <string name=\"tag.amenity_post_office\">郵局</string>\n  <string name=\"tag.amenity_library\">圖書館</string>\n  <string name=\"tag.amenitymore_school\">學校</string>\n  <string name=\"tag.amenitymore_police\">警察局</string>\n  <string name=\"tag.amenitymore_fire_station\">消防局</string>\n  <string name=\"tag.amenitymore_bank\">銀行</string>\n  <string name=\"tag.amenitymore_playground\">遊樂場</string>\n  <string name=\"tag.amenitymore_pub\">Pub</string>\n  <string name=\"tag.amenitymore_hotel\">飯店</string>\n  <string name=\"tag.amenitymore_motel\">汽車旅館</string>\n  <string name=\"tag.amenitymore_hostel\">青年旅社</string>\n  <string name=\"tag.amenitymore_restaurant\">餐館</string>\n  <string name=\"tag.amenitymore_fastfood\">速食店</string>\n  <string name=\"tag.amenitymore_camp_site\">露營區</string>\n  <string name=\"tag.way_bridge\">橋</string>\n  <string name=\"tag.way_zebra_crossing\">斑馬線</string>\n  <string name=\"tag.way_motorway\">高速公路</string>\n  <string name=\"tag.way_trunk\">主要幹道</string>\n  <string name=\"tag.way_primary\">一級道路</string>\n  <string name=\"tag.way_secondary\">二級道路</string>\n  <string name=\"tag.way_tertiary\">三級道路</string>\n  <string name=\"tag.way_residential\">住宅</string>\n  <string name=\"tag.way_service\">連絡道</string>\n  <string name=\"tag.track_track\">小徑</string>\n  <string name=\"tag.track_cycleway\">自行車道</string>\n  <string name=\"tag.track_footway\">步道</string>\n  <string name=\"tag.track_bridleway\">馬道</string>\n  <string name=\"tag.track_steps\">階梯</string>\n  <string name=\"tag.track_living_street\">社區道路</string>\n  <string name=\"tag.track_pedestrian\">人行道</string>\n  <string name=\"tag.track_grade1\">1 級步道</string>\n  <string name=\"tag.track_grade2\">2 級步道</string>\n  <string name=\"tag.track_grade3\">3 級步道</string>\n  <string name=\"tag.track_grade4\">4 級步道</string>\n  <string name=\"tag.track_grade5\">5 級步道</string>\n  <string name=\"tag.landuse_farm\">農畜地</string>\n  <string name=\"tag.landuse_landfill\">垃圾掩埋場</string>\n  <string name=\"tag.landuse_basin\">盆地</string>\n  <string name=\"tag.landuse_reservoir\">水庫</string>\n  <string name=\"tag.landuse_forest\">森林</string>\n  <string name=\"tag.landuse_allotments\">農場</string>\n  <string name=\"tag.landuse_cemetery\">墓地</string>\n  <string name=\"tag.landuse_recreation_ground\">休閒\\n設施</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <!--Generic strings-->\n  <string name=\"app_name\">OSMTracker for Android™</string>\n  <string name=\"app_short_name\">OSMTracker</string>\n  <string name=\"app_description\">受到 Windows Mobile 的啟發，此 APP 可讓您記錄您的旅程，標記明顯的地標 (透過錄音、照片)，並匯出成為 GPX 格式供 Open Streep Map 工具使用，如：JOSM。</string>\n  <!--TrackLogger-->\n  <string name=\"tracklogger\">軌跡記錄器</string>\n  <string name=\"tracklogger_waiting_gps\">等待 GPS 修正以開啟按鈕...</string>\n  <string name=\"tracklogger_voicerec_title\">錄音</string>\n  <string name=\"tracklogger_voicerec_text\">錄製一段 {0} 秒的聲音片段。</string>\n  <string name=\"tracklogger_voicerec_stop\">停止</string>\n  <string name=\"tracklogger_btnBack\">返回</string>\n  <string name=\"tracklogger_tracked\">記錄了：</string>\n  <string name=\"tracklogger_gps_disabled\">GPS 目前是關閉的</string>\n  <string name=\"tracklogger_gps_disabled_hint\">GPS 目前是關閉的，您想要開啟它嗎？</string>\n  <string name=\"tracklogger_choose_gallery_camera\">使用相簿或相機？</string>\n  <string name=\"tracklogger_camera\">使用相機拍照</string>\n  <string name=\"tracklogger_gallery\">從相簿中選擇照片</string>\n  <!--Waypoint List-->\n  <string name=\"wplist\">航點清單</string>\n  <string name=\"wplist_latitude\">緯度：</string>\n  <string name=\"wplist_longitude\">經度：</string>\n  <string name=\"wplist_elevation\">海拔：</string>\n  <string name=\"wplist_accuracy\">精確度：</string>\n  <string name=\"wplist_compass\">羅盤方位：</string>\n  <string name=\"wplist_compass_accuracy\">羅盤精確度：</string>\n  <!--Track Manager-->\n  <string name=\"trackmgr\">軌跡管理</string>\n  <string name=\"trackmgr_tracklist\">軌跡清單：</string>\n  <string name=\"trackmgr_waypoints_count\">航點：</string>\n  <string name=\"trackmgr_trackpoints_count\">軌跡點：</string>\n  <string name=\"trackmgr_notes_count\">註記：</string>\n  <string name=\"trackmgr_empty\">您尚未有任何的軌跡紀錄資料。</string>\n  <string name=\"trackmgr_newtrack_hint\">按壓來開始記錄新的軌跡。</string>\n  <string name=\"trackmgr_newtrack_error\">無法開始記錄新軌跡： {0}</string>\n  <string name=\"trackmgr_continuetrack_hint\">您目前正在錄製 <b>軌跡 #{0}</b>\\n請於清單中選擇該軌跡以繼續</string>\n  <string name=\"trackmgr_contextmenu_stop\">停止記錄</string>\n  <string name=\"trackmgr_contextmenu_resume\">繼續記錄</string>\n  <string name=\"trackmgr_contextmenu_delete\">刪除</string>\n  <string name=\"trackmgr_contextmenu_export\">匯出</string>\n  <string name=\"trackmgr_contextmenu_share\">分享</string>\n  <string name=\"trackmgr_contextmenu_osm_upload\">上傳至 OpenStreetMap</string>\n  <string name=\"trackmgr_contextmenu_github_upload\">上傳至 GitHub</string>\n  <string name=\"trackmgr_contextmenu_display\">顯示</string>\n  <string name=\"trackmgr_contextmenu_details\">詳細資訊</string>\n  <string name=\"trackmgr_contextmenu_title\">軌跡 #{0}</string>\n  <string name=\"trackmgr_delete_confirm\">軌跡 #{0} 將被刪除</string>\n  <string name=\"trackmgr_deleteall_confirm\">所有的軌跡都會被刪除，您確定嗎？</string>\n  <string name=\"trackmgr_exporting\">匯出軌跡 #{0}…</string>\n  <string name=\"trackmgr_exporting_prepare\">準備輸出...</string>\n  <string name=\"trackmgr_export_error\">無法匯出軌跡： {0}</string>\n  <string name=\"trackmgr_exportall_confirm\">將匯出所有軌跡，可能會耗費不少時間。您確定嗎？</string>\n  <string name=\"trackmgr_prepare_for_share_error\">無法處理軌跡：{0}</string>\n  <!--Track Detail-->\n  <string name=\"trackdetail\">軌跡細節</string>\n  <string name=\"trackdetail_startdate\">開始時間：</string>\n  <string name=\"trackdetail_enddate\">結束時間：</string>\n  <string name=\"trackdetail_startloc\">開始於：</string>\n  <string name=\"trackdetail_endloc\">結束於：</string>\n  <string name=\"trackdetail_exportdate\">匯出：</string>\n  <string name=\"trackdetail_osm_upload_date\">上傳至 OpenStreetMap：</string>\n  <string name=\"trackdetail_btn_export\">匯出為 GPX 檔</string>\n  <string name=\"trackdetail_export_notyet\">(尚未匯出)</string>\n  <string name=\"trackdetail_osm_upload_notyet\">(尚未上傳)</string>\n  <string name=\"trackdetail_export_display\">顯示</string>\n  <string name=\"trackdetail_name\">名稱</string>\n  <string name=\"trackdetail_description\">描述</string>\n  <string name=\"trackdetail_tags\">標籤 (以半形逗號分隔)</string>\n  <string name=\"trackdetail_description_mandatory\">您必須填寫描述欄</string>\n  <string name=\"trackdetail_visibility\">能見度</string>\n  <string name=\"osm_visibility_private\">私人</string>\n  <string name=\"osm_visibility_public\">公開</string>\n  <string name=\"osm_visibility_trackable\">可追蹤的</string>\n  <string name=\"osm_visibility_identifiable\">可辨識的</string>\n  <!--OSM upload-->\n  <string name=\"osm_upload\">上傳至 OpenStreetMap</string>\n  <string name=\"osm_upload_ok\">儲存並上傳</string>\n  <string name=\"osm_upload_tmpfile_failed\">無法將此軌跡匯出到暫存檔</string>\n  <string name=\"osm_upload_oauth_failed\">無法與 OSM 伺服器取得認證</string>\n  <string name=\"osm_upload_sending\">發送軌跡 #{0}…</string>\n  <string name=\"osm_upload_waiting_response\">等候 OpenStreetMap 伺服器回應…</string>\n  <string name=\"osm_upload_error\">上傳軌跡的過程中發生錯誤</string>\n  <string name=\"osm_upload_bad_response\">OSM 伺服器傳回錯誤: ({0}) 訊息 {1}</string>\n  <string name=\"osm_upload_unauthorized\">認證錯誤。您想要清除現存的 OpenStreetMap 認證資料嗎？</string>\n  <string name=\"osm_upload_sucess\">成功上傳至 OpenStreetMap</string>\n  <!--OSM Notes Upload-->\n  <string name=\"osm_note_upload\">上傳開放街圖註解</string>\n  <string name=\"osm_note_upload_error\">上傳註解時發生錯誤</string>\n  <string name=\"osm_note_label\">註解文字</string>\n  <string name=\"osm_note_upload_ok\">上傳</string>\n  <string name=\"osm_note_upload_cancel\">取消</string>\n  <string name=\"osm_note_footer\">經由%1$s%2$s</string>\n  <string name=\"osm_note_upload_unauthorized\">認證錯誤，如果你先前允許上傳軌跡的權限，你必須先清除已儲存的憑證，才有辦法認證 app 上傳軌跡以及<b>註解</b>。你想要清除已儲存的憑證嗎？</string>\n  <!--GPS Status & record bar-->\n  <string name=\"gpsstatus_record_voicerec\">錄製語音</string>\n  <string name=\"gpsstatus_record_stillimage\">拍照</string>\n  <string name=\"gpsstatus_record_textnote\">文字筆記</string>\n  <!--edit_waypoint_dialog-->\n  <string name=\"waypoint_name_label\">路徑節點名稱/文字</string>\n  <string name=\"waypoint_name_hint\">輸入路徑節點名稱</string>\n  <string name=\"edit_waypoint_bt_preview\">開啟檔案</string>\n  <string name=\"edit_waypoint_bt_save\">儲存</string>\n  <string name=\"edit_waypoint_bt_delete\">刪除</string>\n  <string name=\"edit_waypoint_bt_cancel\">取消</string>\n  <string name=\"delete_waypoint_confirm_dialog_title\">刪除路徑節點</string>\n  <string name=\"delete_waypoint_confirm_dialog_msg\">刪除這個路徑節點？</string>\n  <string name=\"delete_waypoint_confirm_bt_ok\">刪除</string>\n  <string name=\"delete_waypoint_confirm_bt_cancel\">取消</string>\n  <!--osm Notes-->\n  <string name=\"note_name_label\">註解名稱/文字</string>\n  <string name=\"edit_note_bt_update\">儲存</string>\n  <string name=\"edit_note_bt_delete\">刪除</string>\n  <string name=\"edit_note_bt_cancel\">取消</string>\n  <string name=\"delete_note_confirm_dialog_title\">刪除註解</string>\n  <string name=\"delete_note_confirm_dialog_msg\">刪除這個註解？</string>\n  <string name=\"delete_note_confirm_bt_ok\">刪除</string>\n  <string name=\"delete_note_confirm_bt_cancel\">取消</string>\n  <string name=\"notelist\">註解清單</string>\n  <string name=\"osm_note_bt_upload\">以 OSM 註解型式上傳</string>\n  <!--Menu-->\n  <string name=\"menu_settings\">設定</string>\n  <string name=\"menu_waypointlist\">航點</string>\n  <string name=\"menu_about\">關於</string>\n  <string name=\"menu_displaytrack\">顯示軌跡</string>\n  <string name=\"menu_stoptracking\">停止並儲存</string>\n  <string name=\"menu_newtrack\">新軌跡</string>\n  <string name=\"menu_deletetracks\">刪除全部軌跡</string>\n  <string name=\"menu_continue\">繼續軌跡</string>\n  <string name=\"menu_stopcurrenttrack\">停止目前軌跡</string>\n  <string name=\"menu_save\">儲存</string>\n  <string name=\"menu_cancel\">取消</string>\n  <string name=\"menu_export\">匯出為 GPX 檔</string>\n  <string name=\"menu_osm_upload\">上傳到 OpenStreetMap</string>\n  <string name=\"menu_center_to_gps\">以 GPS 為中心</string>\n  <string name=\"menu_exportall\">全部匯出為 GPX 檔</string>\n  <!--Errors-->\n  <string name=\"error_externalstorage_not_writable\">無法寫入外部儲存媒體。</string>\n  <string name=\"error_create_track_dir\">無法建立軌跡資料夾 %s</string>\n  <string name=\"error_externalstorage_not_writable_hint\">請檢查外部儲存媒體是否正確安置與掛載。</string>\n  <string name=\"error_voicerec_failed\">語音錄製失敗</string>\n  <string name=\"error_userlayout_parsing\">解析 XML 外觀配置檔時發生錯誤。請改用預設外觀。</string>\n  <string name=\"error_gh_token_lenght\">令牌必須至少有40個字元</string>\n  <string name=\"error_gh_pr_creation\">新增 PR 時發生錯誤</string>\n  <!--messages-->\n  <string name=\"permission_required\">需要權限</string>\n  <string name=\"storage_permission_for_export_GPX\">要匯出 GPS 軌跡則需寫入儲存裝置的權限。</string>\n  <string name=\"storage_permission_for_display_track\">要顯示軌跡的譯則需要儲存裝置的權限。</string>\n  <string name=\"storage_permission_for_share_track\">要分享軌跡的話則需要儲存裝置的權限</string>\n  <string name=\"storage_permission_for_upload_to_OSM\">要上傳軌跡到 OSM 則需要儲存裝置的權限。</string>\n  <string name=\"acccept\">接受</string>\n  <string name=\"gps_perms_required\">沒有 GPS 權限則無法繼續</string>\n  <!--GPX-->\n  <string name=\"gpx_track_name\">使用 OSMTracker for Android™ 記錄</string>\n  <string name=\"gpx_hdop_approximation_cmt\">警告：HDOP值並非GPS裝置回報的HDOP，HDOP值會與實際地點差大約幾公尺。</string>\n  <!--About screen-->\n  <string name=\"about\">關於</string>\n  <string name=\"about_text\">更多資訊、文件與問題回報，請洽本專案首頁：</string>\n  <string name=\"about_translate_text\">請幫忙翻譯 OSMTracker：</string>\n  <string name=\"about_debug_info\">除錯資訊</string>\n  <string name=\"about_export_db\">匯出資料庫</string>\n  <string name=\"about_exporting_db\">匯出資料庫中...</string>\n  <string name=\"about_export_db_result\">資料庫匯出結果：%s</string>\n  <!--Notification-->\n  <string name=\"notification_ticker_text\">OSMTracker 記錄中</string>\n  <string name=\"notification_title\">OSMTracker 記錄中 (#{0})</string>\n  <string name=\"notification_text\">點擊這裡顯示主功能畫面</string>\n  <!--Display track-->\n  <string name=\"displaytrack\">顯示軌跡</string>\n  <string name=\"displaytrack_map\">顯示地圖背景</string>\n  <string name=\"displaytrack_north\">北</string>\n  <!--Track detail-->\n  <string name=\"trackdetail_save\">儲存</string>\n  <!--Various-->\n  <string name=\"various_unit_meters\">公尺</string>\n  <string name=\"various_accuracy\">精確度</string>\n  <string name=\"various_accuracy_with_sats\">精準度 {0}{1} ({2}/{3})</string>\n  <!--parameters: (accuracy, meters, used sats, visible sats)-->\n  <string name=\"various_waiting_gps_fix\">等待 GPS 修正… ({0}/{1})</string>\n  <!--parameters: (used sats, visible sats)-->\n  <string name=\"various_heading_display\">{0}°</string>\n  <!--parameters: (heading in degrees)-->\n  <string name=\"various_heading\">等待方位…</string>\n  <string name=\"various_heading_unknown\">無法偵測方位</string>\n  <string name=\"various_export_finished\">成功完成匯出程序</string>\n  <string name=\"various_waiting_position\">無法取得位置</string>\n  <string name=\"various_position_lat_lon\">{0} {1} / {2} {3}</string>\n  <!--OSM map view-->\n  <string name=\"displaytrackmap\">OpenStreetMap 軌跡畫面</string>\n  <!--Buttons presets messages-->\n  <string name=\"buttons_presets_context_menu_update_install\">更新與安裝</string>\n  <string name=\"buttons_presets_context_menu_delete\">刪除</string>\n  <string name=\"buttons_presets_updating_layout\">更新中...</string>\n  <string name=\"buttons_presets_successful_update\">樣式已經成功更新</string>\n  <string name=\"buttons_presets_unsuccessful_update\">樣式還未更新，請稍後再試一次</string>\n  <string name=\"buttons_presets_delete_message\">你確定要刪除 {0} 樣式嗎？</string>\n  <string name=\"buttons_presets_delete_positive_confirmation\">是</string>\n  <string name=\"buttons_presets_successful_delete\">成功刪除模式</string>\n  <string name=\"buttons_presets_icon_directory_deleted\">圖標目錄已經成功刪除</string>\n  <string name=\"buttons_presets_icon_directory_does_not_exist\">檔案並沒有與任何圖標目錄相關</string>\n  <string name=\"buttons_presets_unsuccessful_delete\">無法刪除模式</string>\n  <!--Available Layouts messages-->\n  <string name=\"available_layouts_connection_error\">錯誤：無法連線到網路</string>\n  <string name=\"available_layouts_response_null_exception\">錯誤：無法連線到預設客製樣式庫</string>\n  <string name=\"available_layouts_connecting_message\">(連線中...)</string>\n  <string name=\"available_layouts_description_dialog_positive_confirmation\">下載</string>\n  <string name=\"available_layouts_not_available_language\">你使用的語言並不能用，請從清單選擇一個</string>\n  <string name=\"available_layouts_language_dialog_title\">可用語言</string>\n  <string name=\"available_layouts_checking_language_dialog\">檢查本地語言版本</string>\n  <string name=\"available_layouts_downloading_dialog\">下載中...</string>\n  <string name=\"available_layouts_successful_download\">樣式已經成功下載</string>\n  <string name=\"available_layouts_unsuccessful_download\">樣式無法下載，請稍後再試一次</string>\n  <string name=\"available_layouts_null_response_received\">從伺服器取得資料出現錯誤</string>\n  <!--Github Repository Settings-->\n  <string name=\"github_repository_settings_default_checkbox\">預設</string>\n  <string name=\"github_repository_settings_custom_checkbox\">客製</string>\n  <string name=\"github_repository_settings_username\">Github 使用者名稱：</string>\n  <string name=\"github_repository_settings_repository_name\">程式庫名稱：</string>\n  <string name=\"github_repository_settings_branch_name\">分支名稱：</string>\n  <string name=\"github_repository_settings_valid_server\">Github 程式庫有效</string>\n  <string name=\"github_repository_settings_invalid_server\">Github 程式庫無效</string>\n  <!--Upload to GitHub-->\n  <string name=\"successfully_created\">成功建立</string>\n  <string name=\"error_creating\">建立時發生錯誤</string>\n  <string name=\"db_error\">資料庫錯誤</string>\n  <string name=\"successfully_saved\">成功儲存</string>\n  <string name=\"saving_error\">儲存時發生錯誤</string>\n  <string name=\"pr_status\">拉取請求 (pull request) 狀態：</string>\n  <string name=\"repository_information_error\">程式庫資訊有錯誤</string>\n  <string name=\"successfully_uploaded\">成功上傳</string>\n  <string name=\"error_uploading\">上傳時發生錯誤</string>\n  <string name=\"gpx_file_read_error\">讀取 GPX 檔案時發生錯誤</string>\n  <string name=\"gpx_file_not_found\">沒有找到 GPX 檔案</string>\n  <string name=\"uploading_file\">上傳檔案：</string>\n  <string name=\"item_selected\">已經選取物件：</string>\n  <string name=\"github_repository_private\">私人的：</string>\n  <string name=\"github_creating_repository\">創建程式庫</string>\n  <string name=\"github_no_repository_name\">你必須指定程式庫名稱</string>\n  <string name=\"error_field_required\">你必須為這一欄位指定值</string>\n  <string name=\"retrieving_repositories\">從程式庫取得資訊…</string>\n  <string name=\"error_retrieving_repositories\">從程式庫取得資訊發生錯誤</string>\n  <string name=\"successfully_retrieved_repositories\">成功從程式庫取得資訊</string>\n  <!--GitHubConfig-->\n  <string name=\"github_config_btn\">設定</string>\n  <string name=\"github_token_placeholder\">GitHub 令牌：</string>\n  <string name=\"github_get_token_btn\">取得令牌</string>\n  <string name=\"how_to_get_ghToken_guide_title\">如何取得 GitHub 令牌：</string>\n  <string name=\"how_to_get_ghToken_guide_step_1\">1. 點按鈕來開啟 GitHub 網站與新增令牌。如果有需要則以你的 GitHub 帳號登入。</string>\n  <string name=\"how_to_get_ghToken_guide_step_2\">2. 選取「令牌 (古典)」然後點「新增新令牌」按鈕。</string>\n  <string name=\"how_to_get_ghToken_guide_step_3\">3. 指定敘述性名稱到你的令牌。</string>\n  <string name=\"how_to_get_ghToken_guide_step_4\">4. 選擇失效日期，我們建議「不會失效」來避難重覆此步驟。</string>\n  <string name=\"how_to_get_ghToken_guide_step_5\">5. 選擇你要這個的令牌允許權限範圍 (OSMTracker只需要程式庫的權限)。</string>\n  <string name=\"how_to_get_ghToken_guide_step_6\">6. 點「產生令牌」按鈕。</string>\n  <string name=\"how_to_get_ghToken_guide_step_7\">7. 複製產生的令牌以及貼到「GitHub令牌」欄位。</string>\n  <string name=\"how_to_get_ghToken_guide_note\">⚠️ 你可以儲存空白來刪除憑證。</string>\n  <!--GitHubUpload-->\n  <string name=\"upload_to_github_description\">提交訊息：</string>\n  <string name=\"upload_to_github_create_fork\">新增\\n分支</string>\n  <string name=\"upload_to_github_open_pull_request\">開啟拉取請求 (pull request)</string>\n  <string name=\"upload_to_github_select_repo\">選取程式庫</string>\n  <string name=\"upload_to_github_create_repository\">創建程式庫</string>\n  <string name=\"upload_to_github_commit_btn\">提交</string>\n  <string name=\"upload_to_github_configure\">設定</string>\n  <!--GitHubNewFork-->\n  <string name=\"upload_to_github_forked_repo_owner\">原始程式庫使用者名稱</string>\n  <string name=\"upload_to_github_forked_repo_name\">原始程式庫名稱</string>\n  <string name=\"create\">創建</string>\n  <!--GitHubPullRequest-->\n  <string name=\"upload_to_github_pr_title\">拉取請求 (pull request) 標題</string>\n  <string name=\"upload_to_github_pr_description\">拉取請求 (pull request) 敘述</string>\n  <!--END Upload to GitHub functionality-->\n  <!--App Introduction-->\n  <string name=\"app_intro\">OSMTracker for Android™ 說明</string>\n  <!--Intro - slide1-->\n  <string name=\"app_intro_slide1_title\">歡迎使用 OSMTracker for Android™👋</string>\n  <string name=\"app_intro_slide1_description\">這款 App 是尊重你自由的自由軟體</string>\n  <!--Intro - slide What's new-->\n  <string name=\"app_intro_slide_whats_new_title\">新版本推出什麼新功能呢？</string>\n  <string name=\"app_intro_slide_whats_new_description\">如今我們能夠上傳註解到 OSM，恢復介接 CyclOSM 以及 OpenTopo 圖磚。請享用！</string>\n  <!--Intro - slide2-->\n  <string name=\"app_intro_slide2_title\">記錄快樂🗺 😎</string>\n  <string name=\"app_intro_slide2_description\">OSMTracker for Android  會使用你的 GPS 位置來記錄航點和路徑，即便 App 在背景執行。\n\\n你的資料並不會拿來給廣告使用。</string>\n  <string name=\"no_app_to_handle_file_type\">沒有找到能開啟檔案的應用程式。</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/waypoints.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<resources>\n  <string name=\"wpt_voicerec\">錄製語音</string>\n  <string name=\"wpt_stillimage\">照片</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_100\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_120\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml/filepaths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <external-path\n        name=\"external\"\n        path=\".\" />\n    <external-files-path\n        name=\"external_files\"\n        path=\".\" />\n    <files-path\n        name=\"files\"\n        path=\".\" />\n    <cache-path\n        name=\"cache\"\n        path=\".\"/>\n</paths>"
  },
  {
    "path": "app/src/main/res/xml/preferences.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <Preference app:title=\"@string/prefs\"/>\n\n    <ListPreference\n        app:defaultValue=\"2\"\n        app:entries=\"@array/prefs_voicerec_durations\"\n        app:entryValues=\"@array/prefs_voicerec_durations\"\n        app:key=\"voicerec.duration\"\n        app:title=\"@string/prefs_voicerec_duration\" />\n    <CheckBoxPreference\n        app:defaultValue=\"true\"\n        app:key=\"sound_enabled\"\n        app:summary=\"@string/prefs_sound_enabled_summary\"\n        app:title=\"@string/prefs_sound_enabled\" />\n    <CheckBoxPreference\n        app:defaultValue=\"false\"\n        app:key=\"gpx.use_barometer\"\n        app:summary=\"@string/prefs_use_barometer_summary\"\n        app:title=\"@string/prefs_use_barometer\" />\n    <ListPreference\n        app:defaultValue=\"both\"\n        app:entries=\"@array/prefs_notes_keys\"\n        app:entryValues=\"@array/prefs_notes_values\"\n        app:key=\"gpx.notes\"\n        app:summary=\"@string/prefs_notes_summary\"\n        app:title=\"@string/prefs_notes\" />\n    <ListPreference\n        app:defaultValue=\"Identifiable\"\n        app:entries=\"@array/prefs_osm_visibility_keys\"\n        app:entryValues=\"@array/prefs_osm_visibility_values\"\n        app:key=\"osm.track.visibility\"\n        app:summary=\"@string/prefs_osm_visibility_summary\"\n        app:title=\"@string/prefs_osm_visibility\" />\n    <Preference\n        app:key=\"osm.oauth.clear-data\"\n        app:icon=\"@android:drawable/ic_dialog_alert\"\n        app:summary=\"@string/prefs_osm_clear_oauth_data_summary\"\n        app:title=\"@string/prefs_osm_clear_oauth_data\" />\n\n    <PreferenceCategory app:title=\"@string/prefs_gps\">\n        <Preference\n            app:key=\"gps.ossettings\"\n            app:summary=\"@string/prefs_gps_os_settings_summary\"\n            app:title=\"@string/prefs_gps_os_settings\" />\n        <CheckBoxPreference\n            app:defaultValue=\"true\"\n            app:key=\"gps.checkstartup\"\n            app:summary=\"@string/prefs_check_gps_startup_summary\"\n            app:title=\"@string/prefs_check_gps_startup\" />\n        <CheckBoxPreference\n            app:defaultValue=\"false\"\n            app:key=\"gps.ignoreclock\"\n            app:summary=\"@string/prefs_gps_ignore_clock_summary\"\n            app:title=\"@string/prefs_gps_ignore_clock\" />\n        <EditTextPreference\n            android:inputType=\"number\"\n            app:defaultValue=\"0\"\n            app:key=\"gps.logging.interval\"\n            app:summary=\"@string/prefs_gps_logging_interval_summary\"\n            app:title=\"@string/prefs_gps_logging_interval\" />\n        <EditTextPreference\n            android:inputType=\"number\"\n            app:defaultValue=\"0\"\n            app:key=\"gps.logging.min_distance\"\n            app:summary=\"@string/prefs_gps_logging_min_distance_summary\"\n            app:title=\"@string/prefs_gps_logging_min_distance\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory app:title=\"@string/prefs_output\">\n        <EditTextPreference\n            app:defaultValue=\"/osmtracker\"\n            app:dialogMessage=\"@string/prefs_storage_dir_hint\"\n            app:key=\"logging.storage.dir\"\n            app:title=\"@string/prefs_storage_dir\" />\n        <CheckBoxPreference\n            app:defaultValue=\"true\"\n            app:key=\"gpx.directory_per_track\"\n            app:summary=\"@string/prefs_output_one_dir_per_track_summary\"\n            app:title=\"@string/prefs_output_one_dir_per_track\" />\n        <ListPreference\n            app:defaultValue=\"name_date\"\n            app:entries=\"@array/prefs_output_filename_keys\"\n            app:entryValues=\"@array/prefs_output_filename_values\"\n            app:key=\"gpx.filename\"\n            app:summary=\"@string/prefs_output_filename_summary\"\n            app:title=\"@string/prefs_output_filename\" />\n        <EditTextPreference\n            app:defaultValue=\"\"\n            app:key=\"gpx.filename.label\"\n            app:summary=\"@string/prefs_output_filename_label_summary\"\n            app:title=\"@string/prefs_output_filename_label\" />\n        <ListPreference\n            app:defaultValue=\"none\"\n            app:entries=\"@array/prefs_output_accuracy_keys\"\n            app:entryValues=\"@array/prefs_output_accuracy_values\"\n            app:key=\"gpx.accuracy\"\n            app:summary=\"@string/prefs_output_accuracy_summary\"\n            app:title=\"@string/prefs_output_accuracy\" />\n        <CheckBoxPreference\n            app:defaultValue=\"false\"\n            app:key=\"gpx.hdop.approximation\"\n            app:summary=\"@string/prefs_output_gpx_hdop_approximation_summary\"\n            app:title=\"@string/prefs_output_gpx_hdop_approximation\" />\n        <ListPreference\n            app:defaultValue=\"none\"\n            app:entries=\"@array/prefs_compass_heading_keys\"\n            app:entryValues=\"@array/prefs_compass_heading_values\"\n            app:key=\"gpx.compass_heading\"\n            app:summary=\"@string/prefs_compass_heading_summary\"\n            app:title=\"@string/prefs_compass_heading\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory app:title=\"@string/prefs_ui\">\n        <ListPreference\n            app:defaultValue=\"camera\"\n            app:entries=\"@array/prefs_ui_picture_source_keys\"\n            app:entryValues=\"@array/prefs_ui_picture_source_values\"\n            app:key=\"ui.picture.source\"\n            app:summary=\"@string/prefs_ui_picture_source_summary\"\n            app:title=\"@string/prefs_ui_picture_source\" />\n        <CheckBoxPreference\n            app:defaultValue=\"true\"\n            app:key=\"ui.display_keep_on\"\n            app:summary=\"@string/prefs_display_always_on_summary\"\n            app:title=\"@string/prefs_display_always_on\" />\n        <ListPreference\n            app:defaultValue=\"net.osmtracker:style/DefaultTheme\"\n            app:entries=\"@array/prefs_theme_keys\"\n            app:entryValues=\"@array/prefs_theme_values\"\n            app:key=\"ui.theme\"\n            app:summary=\"@string/prefs_theme_summary\"\n            app:title=\"@string/prefs_theme\" />\n        <Preference\n            app:key=\"ui.buttons.layout\"\n            app:summary=\"@string/prefs_ui_buttons_layout_summary\"\n            app:title=\"@string/prefs_ui_buttons_layout\" />\n        <CheckBoxPreference\n            app:defaultValue=\"false\"\n            app:key=\"ui.displaytrack.osm\"\n            app:summary=\"@string/prefs_displaytrack_osm_summary\"\n            app:title=\"@string/prefs_displaytrack_osm\" />\n        <ListPreference\n            app:defaultValue=\"Mapnik\"\n            app:dependency=\"ui.displaytrack.osm\"\n            app:entries=\"@array/prefs_map_tile_keys\"\n            app:entryValues=\"@array/prefs_map_tile_values\"\n            app:key=\"ui.map.tile\"\n            app:summary=\"@string/prefs_map_tile_summary\"\n            app:title=\"@string/prefs_map_tile\" />\n        <ListPreference\n            app:defaultValue=\"none\"\n            app:entries=\"@array/prefs_ui_orientation_options_keys\"\n            app:entryValues=\"@array/prefs_ui_orientation_options_values\"\n            app:key=\"ui.orientation\"\n            app:summary=\"@string/prefs_ui_orientation_summary\"\n            app:title=\"@string/prefs_ui_orientation\" />\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml-da/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_90\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_130\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml-de/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t       \r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_100\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_120\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml-en-rGB/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layouts>\n\t<layout name=\"root\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t\n\t\t<row>\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"misc\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"restriction\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_20\" icon=\"button_restriction\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_40\" icon=\"button_restriction\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_60\" icon=\"button_restriction\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_70\" icon=\"button_restriction\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"car\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"tourism\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"amenity\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"amenity_more\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"way\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"track\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\n\t\t</row>\n\t</layout>\n\n\t<layout name=\"landuse\">\n\t\t<row>\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\n\t\t</row>\n\t\t<row>\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\n\t\t</row>\n\t</layout>\n</layouts>"
  },
  {
    "path": "app/src/main/res/xml-it/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_70\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_90\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_130\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>"
  },
  {
    "path": "app/src/main/res/xml-ja/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_100\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_120\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml-nb/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_40\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_60\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_70\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml-nn/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_40\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_60\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_70\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/main/res/xml-th/default_buttons_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<layouts>\r\n\t<layout name=\"root\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.misc\" icon=\"button_misc\" targetlayout=\"misc\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.restriction\" icon=\"button_restriction\" targetlayout=\"restriction\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.car\" icon=\"button_car\" targetlayout=\"car\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.tourism\" icon=\"button_tourism\" targetlayout=\"tourism\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity\" icon=\"button_amenity\" targetlayout=\"amenity\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.amenity_more\" icon=\"button_amenity\" targetlayout=\"amenity_more\"  />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"page\" label=\"@string/tag.way\" icon=\"button_way\" targetlayout=\"way\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.track\" icon=\"button_track\" targetlayout=\"track\"  />\r\n\t\t\t<button type=\"page\" label=\"@string/tag.landuse\" icon=\"button_landuse\" targetlayout=\"landuse\"  />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"misc\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bus_stop\" icon=\"button_misc_bus_stop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_railway\" icon=\"button_misc_railway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_telephone\" icon=\"button_misc_telephone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_post_box\" icon=\"button_misc_post_box\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_atm\" icon=\"button_misc_atm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_bollard\" icon=\"button_misc_bollard\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_toilets\" icon=\"button_misc_toilets\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_shelter\" icon=\"button_misc_shelter\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.misc_surveillance\" icon=\"button_misc_surveillance\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"restriction\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_30\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_50\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_80\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_100\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_110\" icon=\"button_restriction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_120\" icon=\"button_restriction\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_no_exit\" icon=\"button_restriction_no_exit\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_traffic_light\" icon=\"button_restriction_traffic_light\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.restriction_one_way\" icon=\"button_restriction_one_way\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"car\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_fuel_station\" icon=\"button_car_fuel_station\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_parking\" icon=\"button_car_parking\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_emergency_phone\" icon=\"button_car_emergency_phone\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_turning_circle\" icon=\"button_car_turning_circle\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.car_speed_camera\" icon=\"button_car_speed_camera\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"tourism\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_view_point\" icon=\"button_tourism_view_point\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_information\" icon=\"button_tourism_information\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_picnic\" icon=\"button_tourism_picnic\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_attraction\" icon=\"button_tourism_attraction\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_theme_park\" icon=\"button_tourism_theme_park\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_castle\" icon=\"button_tourism_castle\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_monument\" icon=\"button_tourism_monument\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_museum\" icon=\"button_tourism_museum\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.tourism_cinema\" icon=\"button_tourism_cinema\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_bench\" icon=\"button_amenity_bench\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_water\" icon=\"button_amenity_water\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_pharmacy\" icon=\"button_amenity_pharmacy\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_shop\" icon=\"button_amenity_shop\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_marina\" icon=\"button_amenity_marina\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_sport\" icon=\"button_amenity_sport\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_taxi\" icon=\"button_amenity_taxi\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_doctors\" icon=\"button_amenity_doctors\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_recycling\" icon=\"button_amenity_recycling\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_place_of_worship\" icon=\"button_amenity_place_of_worship\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_post_office\" icon=\"button_amenity_post_office\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenity_library\" icon=\"button_amenity_library\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"amenity_more\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_school\" icon=\"button_amenitymore_school\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_police\" icon=\"button_amenitymore_police\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fire_station\" icon=\"button_amenitymore_fire_station\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_bank\" icon=\"button_amenitymore_bank\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_playground\" icon=\"button_amenitymore_playground\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_pub\" icon=\"button_amenitymore_pub\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hotel\" icon=\"button_amenitymore_hotel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_motel\" icon=\"button_amenitymore_motel\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_hostel\" icon=\"button_amenitymore_hostel\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_restaurant\" icon=\"button_amenitymore_restaurant\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_fastfood\" icon=\"button_amenitymore_fastfood\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.amenitymore_camp_site\" icon=\"button_amenitymore_camp_site\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"way\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_bridge\" icon=\"button_way_bridge\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_zebra_crossing\" icon=\"button_way_zebra_crossing\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_motorway\" icon=\"button_way_motorway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_trunk\" icon=\"button_way_trunk\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_primary\" icon=\"button_way_primary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_secondary\" icon=\"button_way_secondary\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_tertiary\" icon=\"button_way_tertiary\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_residential\" icon=\"button_way_residential\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.way_service\" icon=\"button_way_service\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"track\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_track\" icon=\"button_track_track\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_cycleway\" icon=\"button_track_cycleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_footway\" icon=\"button_track_footway\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_bridleway\" icon=\"button_track_bridleway\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_steps\" icon=\"button_track_steps\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_living_street\" icon=\"button_track_living_street\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_pedestrian\" icon=\"button_track_pedestrian\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade1\" icon=\"button_track_grade1\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade2\" icon=\"button_track_grade2\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade3\" icon=\"button_track_grade3\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade4\" icon=\"button_track_grade4\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.track_grade5\" icon=\"button_track_grade5\" />\r\n\t\t</row>\r\n\t</layout>\r\n\r\n\t<layout name=\"landuse\">\r\n\t\t<row>\r\n\t\t\t<button type=\"voicerec\" icon=\"voice_32x32\" />\r\n\t\t\t<button type=\"picture\" icon=\"camera_32x32\" />\r\n\t\t\t<button type=\"textnote\" icon=\"text_32x32\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_farm\" icon=\"button_landuse_farm\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_landfill\" icon=\"button_landuse_landfill\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_basin\" icon=\"button_landuse_basin\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_reservoir\" icon=\"button_landuse_reservoir\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_forest\" icon=\"button_landuse_forest\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_allotments\" icon=\"button_landuse_allotments\" />\r\n\t\t</row>\r\n\t\t<row>\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_cemetery\" icon=\"button_landuse_cemetery\" />\r\n\t\t\t<button type=\"tag\" label=\"@string/tag.landuse_recreation_ground\" icon=\"button_landuse_recreation_ground\" />\r\n\t\t</row>\r\n\t</layout>\r\n</layouts>\r\n"
  },
  {
    "path": "app/src/test/assets/gpx/gpx-test.gpx",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"OSMTracker for Android™ - https://github.com/labexp/osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">\n\t<wpt lat=\"34.12\" lon=\"18.45\">\n\t\t<ele>5812.2</ele>\n\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t<name><![CDATA[wp1]]></name>\n\t\t<link href=\"http%3A%2F%2Flink1.com\">\n\t\t\t<text>http://link1.com</text>\n\t\t</link>\n\t\t<sat>2</sat>\n\t\t<hdop>0.0625</hdop>\n\t</wpt>\n\t<wpt lat=\"43.76\" lon=\"31.89\">\n\t\t<ele>75.4</ele>\n\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t<name><![CDATA[wp2]]></name>\n\t\t<link href=\"http%3A%2F%2Flink2.com\">\n\t\t\t<text>http://link2.com</text>\n\t\t</link>\n\t\t<sat>6</sat>\n\t\t<hdop>0.1525000035762787</hdop>\n\t</wpt>\n\t<trk>\n\t\t<name><![CDATA[Tracked with OSMTracker for Android™]]></name>\n\t\t<cmt><![CDATA[Warning: HDOP values aren't the HDOP as returned by the GPS device. They're approximated from the location accuracy in meters.]]></cmt>\n\t\t<trkseg>\n\t\t\t<trkpt lat=\"12.34\" lon=\"56.78\">\n\t\t\t\t<ele>4321.7</ele>\n\t\t\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t\t\t<hdop>0.10499999672174454</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>45.79999923706055</speed>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t\t<trkpt lat=\"21.57\" lon=\"12.6\">\n\t\t\t\t<ele>12.1</ele>\n\t\t\t\t<time>2012-03-12T16:46:38Z</time>\n\t\t\t\t<hdop>0.05999999865889549</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>12.600000381469727</speed>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t</trkseg>\n\t</trk>\n</gpx>\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/activity/ButtonsPresetsTest.java",
    "content": "package net.osmtracker.activity;\n\nimport android.content.SharedPreferences;\nimport android.view.View;\nimport android.widget.CheckBox;\nimport android.os.Environment;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.Robolectric;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\nimport org.robolectric.shadows.ShadowEnvironment;\n\nimport java.lang.reflect.Field;\nimport java.io.File;\nimport java.lang.reflect.Method;\nimport java.util.Hashtable;\n\nimport static org.junit.Assert.assertEquals;\n\nimport androidx.preference.PreferenceManager;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class ButtonsPresetsTest {\n\n    ButtonsPresets activity;\n\n\t@Before\n\tpublic void setUp() {\n\t\t// Build and start the activity lifecycle\n\t\tactivity = Robolectric.buildActivity(ButtonsPresets.class)\n\t\t\t\t.create()\n\t\t\t\t.start()\n\t\t\t\t.resume()\n\t\t\t\t.get();\n\t}\n\n\t@Test\n\tpublic void getIsoTest() throws Exception {\n\t\tint VALUE = 0, EXPECTED = 1;\n\t\tString[][] cases = {\n\t\t\t\t{\"test_es.xml\", \"es\"},\n\t\t\t\t{\"a_ge.xml\", \"ge\"},\n\t\t\t\t{\"en_fr.xml\", \"fr\"},\n\t\t\t\t{\"foo_en.xml\", \"en\"},\n\t\t\t\t{\"en.xml\", \"en\"},\n\t\t};\n\n\t\tMethod getIso = ButtonsPresets.class.getDeclaredMethod(\"getIso\", String.class);\n\t\tgetIso.setAccessible(true);\n\n\t\tfor (String[] option : cases) {\n\t\t\tString result = (String) getIso.invoke(activity, option[VALUE]);\n\t\t\tassertEquals(option[EXPECTED], result);\n\t\t}\n\t}\n\n\t@Test\n\tpublic void testSelectLayout_UpdatesUIAndPreferences() throws Exception {\n\t\t// 1. Setup: Create two CheckBoxes to simulate \"old\" and \"new\" selection\n\t\tCheckBox oldCheckBox = new CheckBox(activity);\n\t\toldCheckBox.setText(\"Default\");\n\t\toldCheckBox.setChecked(true);\n\n\t\tCheckBox newCheckBox = new CheckBox(activity);\n\t\tnewCheckBox.setText(\"Cycling\");\n\t\tnewCheckBox.setChecked(false);\n\n\t\t// 2. Setup: Populate the internal Hashtable and 'selected' field via reflection\n\t\tHashtable<String, String> mockLayouts = new Hashtable<>();\n\t\tmockLayouts.put(\"Default\", \"default.xml\");\n\t\tmockLayouts.put(\"Cycling\", \"cycling_en.xml\");\n\n\t\tsetInternalState(ButtonsPresets.class, \"layoutsFileNames\", mockLayouts);\n\t\tsetInternalState(activity, \"selected\", oldCheckBox);\n\n\t\t// 3. Execution: Invoke the private selectLayout method\n\t\tMethod selectLayoutMethod =\n\t\t\t\tButtonsPresets.class.getDeclaredMethod(\"selectLayout\", CheckBox.class);\n\t\tselectLayoutMethod.setAccessible(true);\n\t\tselectLayoutMethod.invoke(activity, newCheckBox);\n\n\t\t// 4. Assertions: Verify UI State\n\t\tAssert.assertFalse(\"Previous checkbox should be unchecked\", oldCheckBox.isChecked());\n\t\tAssert.assertTrue(\"New checkbox should be checked\", newCheckBox.isChecked());\n\n\t\t// 5. Assertions: Verify Internal State\n\t\tCheckBox currentSelected = (CheckBox) getInternalState(activity, \"selected\");\n\t\tAssert.assertEquals(\n\t\t\t\t\"Internal 'selected' field should be updated\",newCheckBox, currentSelected);\n\n\t\t// 6. Assertions: Verify Persistence in SharedPreferences\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);\n\t\tString savedLayout = prefs.getString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT, null);\n\t\tAssert.assertEquals(\"SharedPreferences should store the filename from the map\",\n\t\t\t\t\"cycling_en.xml\", savedLayout);\n\t}\n\n\t@Test\n\t@SuppressWarnings(\"unchecked\") // Suppress cast warning for the internal Hashtable\n\tpublic void testRefreshActivity_PopulatesUIFromFilesystem() throws Exception {\n\t\t// 1. Setup: Mock the SD Card being mounted\n\t\tShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);\n\n\t\t// 2. Setup: Create dummy layout files in the expected directory\n\t\t// The path logic in ButtonsPresets uses: getExternalFilesDir(null) + /osmtracker/layouts\n\t\tFile externalDir = activity.getExternalFilesDir(null);\n\t\tFile layoutsDir = new File(externalDir, \"osmtracker\" + File.separator + \"layouts\");\n\t\tif (!layoutsDir.exists()) {\n\t\t\tAssert.assertTrue(layoutsDir.mkdirs());\n\t\t}\n\n\t\t// Create two dummy layout files\n\t\tFile layout1 = new File(layoutsDir, \"hiking_en.xml\");\n\t\tFile layout2 = new File(layoutsDir, \"cycling_es.xml\");\n\t\tAssert.assertTrue(layout1.createNewFile());\n\t\tAssert.assertTrue(layout2.createNewFile());\n\n\t\t// 3. Execution: Trigger the refresh\n\t\tactivity.refreshActivity();\n\n\t\t// 4. Assertions: Check internal state (the Hashtable)\n\t\t// We use reflection to get the private static field 'layoutsFileNames'\n\t\tHashtable<String, String> layoutsMap = \t(Hashtable<String, String>) getInternalState(\n\t\t\t\tButtonsPresets.class, \"layoutsFileNames\");\n\n\t\tAssert.assertNotNull(\"Hashtable should be initialized\", layoutsMap);\n\t\t// Map should contain 'hiking', 'cycling', and 'Default' (from defaultCheckBox)\n\t\tAssert.assertTrue(\"Should contain 'hiking' layout\", layoutsMap.containsKey(\"hiking\"));\n\t\tAssert.assertTrue(\"Should contain 'cycling' layout\", layoutsMap.containsKey(\"cycling\"));\n\n\t\t// 5. Assertions: Check UI state (the LinearLayout)\n\t\tLinearLayout listLayouts = activity.findViewById(R.id.list_layouts);\n\n\t\t// Count how many CheckBoxes were added.\n\t\t// listLayouts should contain CheckBoxes for every file found.\n\t\tint checkBoxCount = 0;\n\t\tfor (int i = 0; i < listLayouts.getChildCount(); i++) {\n\t\t\tif (listLayouts.getChildAt(i) instanceof CheckBox) {\n\t\t\t\tcheckBoxCount++;\n\t\t\t}\n\t\t}\n\n\t\tassertEquals(\"Two checkboxes should have been added to the UI\", 2, checkBoxCount);\n\n\t\t// 6. Verification: Check 'Empty Message' visibility\n\t\tTextView emptyText = activity.findViewById(R.id.btnpre_empty);\n\t\tAssert.assertEquals(\"Empty message should be INVISIBLE because layouts exist\",\n\t\t\t\tView.INVISIBLE, emptyText.getVisibility());\n\t}\n\n\tprivate void setInternalState(Object target, String fieldName, Object value) throws Exception {\n\t\tField field;\n\t\tif (target instanceof Class) {\n\t\t\tfield = ((Class<?>) target).getDeclaredField(fieldName);\n\t\t} else {\n\t\t\tfield = target.getClass().getDeclaredField(fieldName);\n\t\t}\n\t\tfield.setAccessible(true);\n\t\tfield.set(target instanceof Class ? null : target, value);\n\t}\n\n\tprivate Object getInternalState(Object target, String fieldName) throws Exception {\n\t\tField field;\n\t\tif (target instanceof Class) {\n\t\t\tfield = ((Class<?>) target).getDeclaredField(fieldName);\n\t\t} else {\n\t\t\tfield = target.getClass().getDeclaredField(fieldName);\n\t\t}\n\t\tfield.setAccessible(true);\n\t\treturn field.get(target instanceof Class ? null : target);\n\t}\n\n}\n\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/activity/OpenStreetMapNotesUploadTest.java",
    "content": "package net.osmtracker.activity;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.robolectric.Shadows.shadowOf;\n\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.widget.TextView;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.Robolectric;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\nimport org.robolectric.shadows.ShadowActivity;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class OpenStreetMapNotesUploadTest {\n\n\tprivate Intent intent;\n\n\t@Before\n\tpublic void setUp() {\n\t\t// Prepare a valid intent with extras\n\t\tintent = new Intent(ApplicationProvider.getApplicationContext(),\n\t\t\t\tOpenStreetMapNotesUpload.class);\n\t\tintent.putExtra(\"noteId\", 123L);\n\t\tintent.putExtra(\"noteContent\", \"Test Note Content\");\n\t\tintent.putExtra(\"latitude\", 45.0);\n\t\tintent.putExtra(\"longitude\", 9.0);\n\t\tintent.putExtra(\"version\", \"3.0.1\");\n\t\tintent.putExtra(\"appName\", \"OSMTrackerTest\");\n\n\t\t// Reset preferences\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(\n\t\t\t\tApplicationProvider.getApplicationContext());\n\t\tprefs.edit().clear().apply();\n\t}\n\n\n\t/**\n\t * Verification of UI Binding and Intent Data Extraction\n\t */\n\t@Test\n\tpublic void onCreate_populatesViewsCorrectly() {\n\t\t// Launch Activity\n\t\tOpenStreetMapNotesUpload activity = Robolectric.buildActivity(\n\t\t\t\tOpenStreetMapNotesUpload.class, intent)\n\t\t\t\t.create()\n\t\t\t\t.start()\n\t\t\t\t.resume()\n\t\t\t\t.get();\n\n\t\tTextView noteContentView = activity.findViewById(R.id.wplist_item_name);\n\t\tTextView noteFooterView = activity.findViewById(R.id.osm_note_footer);\n\n\t\t// Verify content extracted from intent\n\t\tassertEquals(\"Test Note Content\", noteContentView.getText().toString());\n\n\t\t//check footer is correctly constructed according to strings.xml\n\t\t// Verify footer constructed with intent extras\n\t\tString expectedFooter = activity.getString(\n\t\t\t\tR.string.osm_note_footer,\"OSMTrackerTest\", \"3.0.1\");\n\t\tassertEquals(expectedFooter, noteFooterView.getText().toString());\n\t}\n\n\n\t/**\n\t * Flow Control - Existing token should skip Auth and trigger task directly\n\t */\n\t@Test\n\tpublic void startUpload_withExistingToken_skipsAuthFlow() {\n\t\t// Inject a fake token into SharedPreferences\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(\n\t\t\t\tApplicationProvider.getApplicationContext());\n\t\tprefs.edit().putString(OSMTracker.Preferences.KEY_OSM_OAUTH2_ACCESSTOKEN,\n\t\t\t\t\"fake_token\").commit();\n\n\t\tOpenStreetMapNotesUpload activity = Robolectric.buildActivity(\n\t\t\t\tOpenStreetMapNotesUpload.class, intent)\n\t\t\t\t.create()\n\t\t\t\t.start()\n\t\t\t\t.resume()\n\t\t\t\t.get();\n\n\t\t// Trigger OK button\n\t\tactivity.findViewById(R.id.osm_note_upload_button_ok).performClick();\n\n\t\t// Verify that NO new activity was started\n\t\t// because it bypassed auth and went to background task\n\t\tShadowActivity shadowActivity = shadowOf(activity);\n\t\tIntent startedIntent = shadowActivity.getNextStartedActivity();\n\n\t\tAssert.assertNull(\"Should not start Auth browser if token is already present\",\n\t\t\t\tstartedIntent);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/activity/TrackDetailEditorTest.java",
    "content": "package net.osmtracker.activity;\n\nimport static org.robolectric.Robolectric.buildActivity;\n\nimport android.os.Bundle;\nimport android.widget.ArrayAdapter;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.model.Track;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\n@RunWith(RobolectricTestRunner.class)\n//Min SDK of the App\n@Config(sdk = 25)\npublic class TrackDetailEditorTest {\n\tprivate TrackDetailEditor activity;\n\n\t/**\n\t * Concrete implementation of the abstract TrackDetailEditor for testing purposes.\n\t */\n\tpublic static class TrackDetailEditorActivity extends TrackDetailEditor {\n\t\t@Override\n\t\tprotected void onCreate(Bundle savedInstanceState) {\n\t\t\t// Pass a dummy layout and ID to satisfy the base class\n\t\t\tsuper.onCreate(savedInstanceState, R.layout.trackdetail, 1L);\n\t\t}\n\t}\n\t@Before\n\tpublic void setup() {\n\t\tactivity = buildActivity(TrackDetailEditorActivity.class).create().get();\n\n\t\t// Ensure Spinner is populated as it would be from XML\n\t\tArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(\n\t\t\t\tactivity,\n\t\t\t\tR.array.prefs_osm_visibility_keys,\n\t\t\t\tandroid.R.layout.simple_spinner_item);\n\t\tactivity.spVisibility.setAdapter(adapter);\n\t}\n\n\t@Test\n\tpublic void testBindTrackSetsCorrectSpinnerPosition() {\n\t\tTrack t = new Track();\n\t\tt.setVisibility(Track.OSMVisibility.Trackable);\n\n\t\tactivity.bindTrack(t);\n\n\t\t// Verify that position 2 - Trackable is selected in the UI\n\t\tAssert.assertEquals(Track.OSMVisibility.Trackable.position,\n\t\t\t\tactivity.spVisibility.getSelectedItemPosition());\n\t}\n\n\t@Test\n\tpublic void testSaveCapturesCorrectEnumValue() {\n\t\t// Simulate user selecting \"Public\" (Index 1)\n\t\tactivity.spVisibility.setSelection(Track.OSMVisibility.Public.position);\n\n\t\t// Verify that save logic correctly converts position to \"Public\"\n\t\tTrack.OSMVisibility result = Track.OSMVisibility.fromPosition(\n\t\t\t\tactivity.spVisibility.getSelectedItemPosition());\n\n\t\tAssert.assertEquals(Track.OSMVisibility.Public, result);\n\t\tAssert.assertEquals(Track.OSMVisibility.Public.name(), result.name());\n\t}\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/data/GPXMocks.java",
    "content": "package net.osmtracker.data;\n\npublic class GPXMocks {\n\n    //name = Nombre de la traza, keywords= OSMTracker and Bekuo\n    public static String MOCK_METADATA_XML_A =\n            \"\\t<metadata>\\n\"\n                    +\"\\t\\t<name>Nombre de la traza</name>\\n\"\n                    +\"\\t\\t<keywords>OSMTracker</keywords>\\n\"\n                    +\"\\t\\t<keywords>bekuo</keywords>\\n\"\n                    +\"\\t\\t<desc>Descripción de prueba</desc>\\n\"\n                    +\"\\t</metadata>\\n\";\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/data/MockDataHelper.java",
    "content": "package net.osmtracker.data;\n\nimport android.content.Context;\n\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.db.model.TrackPoint;\nimport net.osmtracker.db.model.WayPoint;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\npublic class MockDataHelper extends DataHelper {\n\n    public MockDataHelper(Context context) {\n        super(context);\n    }\n\n    public void setTrackExportDate(long trackId, long exportTime){\n        //ok\n    }\n\n\n    public Track getTrackByStartDate(Date startDate) {\n        return TrackMocks.getMockTrackForGPX();\n    }\n\n    public Track getTrackById(long trackId) {\n        return TrackMocks.getMockTrackForGPX();\n    }\n\n    public List<Integer> getWayPointIdsOfTrack(long trackId) {\n        List<Integer> out = new ArrayList<Integer>();\n        int i = 1;\n        for(; i <= WayPointMocks.GPX_WAYPOINTS_COUNT; i++) {\n            out.add(new Integer(i));\n        }\n        return out;\n    }\n\n    public WayPoint getWayPointById(Integer wayPointId) {\n        return WayPointMocks.getMockWayPointForGPX(wayPointId);\n    }\n\n    public List<Integer> getTrackPointIdsOfTrack(long trackId) {\n        List<Integer> out = new ArrayList<Integer>();\n        int i = 1;\n        for(; i <= TrackPointMocks.GPX_TRACKPOINTS_COUNT; i++) {\n            out.add(new Integer(i));\n        }\n        return out;\n    }\n\n    public TrackPoint getTrackPointById(Integer trackPointId) {\n        return TrackPointMocks.getMockTrackPointForGPX(trackPointId);\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/data/TrackMocks.java",
    "content": "package net.osmtracker.data;\n\nimport net.osmtracker.db.model.Track;\n\npublic class TrackMocks {\n\n    // TrackId for mock Track used in ExportTrackTest.testWriteGPXFile()\n    public static final long GPX_TRACKID = 7l;\n\n\n    /**\n     * Matches data of gpx-test.gpx used in ExportTrackTest.testWriteGPXFile()\n     *\n     * @return Track\n     */\n    public static Track getMockTrackForGPX() {\n        Track track = new Track();\n        track.setTrackId(GPX_TRACKID);\n        track.setName(\"2020-12-30_17-20-17\");\n        track.setDescription(null);\n        track.setTags(\"osmtracker\");\n        track.setVisibility(Track.OSMVisibility.valueOf(\"Private\"));\n        track.setStartDate(1609370417227l);\n        //TODO: check why TrackDate is used as startDate in Track.build)()\n        track.setTrackDate(1609370417227l);\n\n        track.setTpCount(TrackPointMocks.GPX_TRACKPOINTS_COUNT);\n        track.setWpCount(WayPointMocks.GPX_WAYPOINTS_COUNT);\n\n        return track;\n    }\n\n\n    /**\n     *\n     * @param trackName\n     * @param trackStartDate\n     * @return\n     */\n    public static Track createMockTrack(String trackName, long trackStartDate) {\n        Track track = new Track();\n        track.setName(trackName);\n        track.setTrackDate(trackStartDate);\n        return track;\n    }\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/data/TrackPointMocks.java",
    "content": "package net.osmtracker.data;\n\nimport net.osmtracker.db.model.TrackPoint;\n\npublic class TrackPointMocks {\n\n    // TrackPoints of gpx-test.gpx\n    static final int GPX_TRACKPOINTS_COUNT = 2;\n\n    //hdop = false, compass = none\n    public static String MOCK_TRACKPOINT_XML_A =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = false, compass = comment\n    public static String MOCK_TRACKPOINT_XML_B =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<cmt><![CDATA[compass: 204.690002441406\\n\"\n                    +\"\\t\\t\\t\\t\\tcompAccuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = false, compass = extension\n    public static String MOCK_TRACKPOINT_XML_C =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>204.690002441406</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = true, compass = none\n    public static String MOCK_TRACKPOINT_XML_D =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<hdop>10.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = true, compass = comment\n    public static String MOCK_TRACKPOINT_XML_E =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<hdop>10.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<cmt><![CDATA[compass: 204.690002441406\\n\"\n                    +\"\\t\\t\\t\\t\\tcompAccuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = true, compass = extension\n    public static String MOCK_TRACKPOINT_XML_F =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<hdop>10.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>204.690002441406</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n    //hdop = true, compass = none\n    //trkpt.Accuracy = null\n    public static String MOCK_TRACKPOINT_XML_G =\n            \"\\t\\t\\t<trkpt lat=\\\"10.037569043664794\\\" lon=\\\"-84.21228868248848\\\">\\n\"\n                    +\"\\t\\t\\t\\t<ele>1015.1315925326198</ele>\\n\"\n                    +\"\\t\\t\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<speed>0.3619388937950134</speed>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t\\t\\t</trkpt>\\n\";\n\n\n    public static TrackPoint getMockTrackPointForXML(){\n        TrackPoint trkpt = new TrackPoint();\n        trkpt.setId(3);\n        trkpt.setTrackId(7);\n        trkpt.setLatitude(10.037569043664794);\n        trkpt.setLongitude(-84.21228868248848);\n        trkpt.setSpeed(0.3619388937950134);\n        trkpt.setElevation(1015.1315925326198);\n        trkpt.setAccuracy(40.0);\n        trkpt.setPointTimestamp(990055228011l);\n        trkpt.setCompassHeading(204.690002441406);\n        trkpt.setCompassAccuracy(2.0d);\n        trkpt.setAtmosphericPressure(null);\n        return trkpt;\n    }\n\n    /**\n     * Matches data of gpx-test.gpx used in ExportTrackTest.testWriteGPXFile()\n     *\n     * @param trkptId\n     * @return\n     */\n    public static TrackPoint getMockTrackPointForGPX(Integer trkptId) {\n        TrackPoint trkpt = new TrackPoint();\n        trkpt.setId(trkptId);\n        trkpt.setTrackId(7);\n\n        if (trkptId == 1) {\n            trkpt.setLatitude(10.0375690436648);\n            trkpt.setLongitude(-84.2122886824885);\n            trkpt.setSpeed(0.361938893795013);\n            trkpt.setElevation(1015.13159253262);\n            trkpt.setAccuracy(35.635440826416);\n            trkpt.setPointTimestamp(990055225811l);\n            trkpt.setCompassHeading(204.690002441406);\n            trkpt.setCompassAccuracy(2d);\n        } else if (trkptId == 2) {\n            trkpt.setLatitude(10.0377106969496);\n            trkpt.setLongitude(-84.2123268390527);\n            trkpt.setSpeed(0.271533757448196);\n            trkpt.setElevation(1007.3209409276);\n            trkpt.setAccuracy(52.0706405639648);\n            trkpt.setPointTimestamp(990055226011l);\n            trkpt.setCompassHeading(204.360000610352);\n            trkpt.setCompassAccuracy(2d);\n        }\n        trkpt.setAtmosphericPressure(null);\n\n        return trkpt;\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/data/WayPointMocks.java",
    "content": "package net.osmtracker.data;\n\n\nimport net.osmtracker.db.model.WayPoint;\n\npublic class WayPointMocks {\n\n    // WayPoints of gpx-test.gpx\n    static final int GPX_WAYPOINTS_COUNT = 1;\n\n    //compass = none, accuracy = none. hdop = false\n    public static String MOCK_WAYPOINT_XML_A =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = none, accuracy = name. hdop = false\n    public static String MOCK_WAYPOINT_XML_B =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = none, accuracy = comment. hdop = false\n    public static String MOCK_WAYPOINT_XML_C =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = none. hdop = false\n    public static String MOCK_WAYPOINT_XML_D =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[compass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = name. hdop = false\n    public static String MOCK_WAYPOINT_XML_E =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[compass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = comment. hdop = false\n    public static String MOCK_WAYPOINT_XML_F =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m\\n\"\n                    +\"\\t\\t\\tcompass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = none. hdop = false\n    public static String MOCK_WAYPOINT_XML_G =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = name. hdop = false\n    public static String MOCK_WAYPOINT_XML_H =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = comment. hdop = false\n    public static String MOCK_WAYPOINT_XML_I =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = none, accuracy = none. hdop = true\n    public static String MOCK_WAYPOINT_XML_J =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = none, accuracy = name. hdop = true\n    public static String MOCK_WAYPOINT_XML_K =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = none, accuracy = comment. hdop = true\n    public static String MOCK_WAYPOINT_XML_L =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = none. hdop = true\n    public static String MOCK_WAYPOINT_XML_M =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[compass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = name. hdop = true\n    public static String MOCK_WAYPOINT_XML_N =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[compass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = comment, accuracy = comment. hdop = true\n    public static String MOCK_WAYPOINT_XML_O =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m\\n\"\n                    +\"\\t\\t\\tcompass heading: 271.4599914550781deg\\n\"\n                    +\"\\t\\t\\tcompass accuracy: 2.0]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = none.  hdop = true\n    public static String MOCK_WAYPOINT_XML_P =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = name. hdop = true\n    public static String MOCK_WAYPOINT_XML_Q =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto (24.0m)]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = comment. hdop = true\n    public static String MOCK_WAYPOINT_XML_R =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<cmt><![CDATA[Precisión: 24.0m]]></cmt>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t<hdop>6.0</hdop>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = comment. hdop = true\n    //wpt.accuracy == null and wpt.atmosphericPressure == 5.54321\n    public static String MOCK_WAYPOINT_XML_S =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass>271.4599914550781</compass>\\n\"\n                    +\"\\t\\t\\t\\t\\t<compass_accuracy>2.0</compass_accuracy>\\n\"\n                    +\"\\t\\t\\t\\t\\t<baro>5.5</baro>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    //compass = extension, accuracy = comment. hdop = true\n    //wpt.accuracy == null, wpt.atmosphericPressure == 5.54321, wpt.compassHeading == null\n    // (but wpt.compassAccuracy != null)\n    public static String MOCK_WAYPOINT_XML_T =\n            \"\\t<wpt lat=\\\"10.037578304829676\\\" lon=\\\"-84.21210085275517\\\">\\n\"\n                    +\"\\t\\t<ele>1073.3167528454214</ele>\\n\"\n                    +\"\\t\\t<time>2001-05-16T23:20:28Z</time>\\n\"\n                    +\"\\t\\t<name><![CDATA[Nota de texto]]></name>\\n\"\n                    +\"\\t\\t<sat>0</sat>\\n\"\n                    +\"\\t\\t\\t\\t<extensions>\\n\"\n                    +\"\\t\\t\\t\\t\\t<baro>5.5</baro>\\n\"\n                    +\"\\t\\t\\t\\t</extensions>\\n\"\n                    +\"\\t</wpt>\\n\";\n\n    public static WayPoint getMockWayPointForXML(){\n        WayPoint wpt = new WayPoint();\n        wpt.setLatitude(10.037578304829676);\n        wpt.setLongitude(-84.21210085275517);\n        wpt.setElevation(1073.3167528454214);\n        wpt.setPointTimestamp(990055228011l); //2001-05-16T23:20:28Z\n        wpt.setName(\"Nota de texto\");\n        wpt.setAccuracy(24.0);\n        wpt.setCompassHeading(271.4599914550781);\n        wpt.setCompassAccuracy(2.0);\n        wpt.setLink(null);\n        wpt.setNumberOfSatellites(0);\n        wpt.setAtmosphericPressure(null);\n        return wpt;\n    }\n\n    /**\n     * Matches data of gpx-test.gpx used in ExportTrackTest.testWriteGPXFile()\n     *\n     * @param wptId\n     * @return\n     */\n    public static WayPoint getMockWayPointForGPX(Integer wptId) {\n        WayPoint wpt = new WayPoint();\n\n        wpt.setId(wptId);\n        wpt.setTrackId(7);\n        wpt.setUuid(\"2681b418-d6c6-4f7a-baf2-7c24a2a274b7\");\n        wpt.setLatitude(10.0375634848231);\n        wpt.setLongitude(-84.2123549868801);\n        wpt.setElevation(1029.89940680377);\n        wpt.setAccuracy(24.0);\n        wpt.setPointTimestamp(990055228011l);\n        wpt.setName(\"Punto de prueba\");\n        wpt.setLink(null);\n        wpt.setNumberOfSatellites(0);\n        wpt.setCompassHeading(204.029998779297);\n        wpt.setCompassAccuracy(2d);\n        wpt.setAtmosphericPressure(null);\n\n        return wpt;\n    }\n\n}"
  },
  {
    "path": "app/src/test/java/net/osmtracker/db/DataHelperNoteTest.java",
    "content": "package net.osmtracker.db;\n\nimport android.database.Cursor;\nimport android.location.Location;\nimport android.os.Bundle;\n\nimport androidx.test.core.app.ApplicationProvider;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport java.util.UUID;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class DataHelperNoteTest {\n\n\tprivate DataHelper dataHelper;\n\n\t@Before\n\tpublic void setup() {\n\t\t// Initialize DataHelper with the Robolectric application context\n\t\tdataHelper = new DataHelper(ApplicationProvider.getApplicationContext());\n\t}\n\n\t@Test\n\tpublic void testDeleteNote_RemovesFromDatabase() {\n\t\tString noteUUID = UUID.randomUUID().toString();\n\t\tlong trackId = 1L;\n\n\t\t// 1. Insert a note\n\t\tLocation loc = new Location(\"gps\");\n\t\tloc.setLatitude(1.23);\n\t\tloc.setLongitude(4.56);\n\t\tloc.setTime(System.currentTimeMillis());\n\n\t\t// Initialize extras to avoid NullPointerException if logic accesses location extras\n\t\tloc.setExtras(new Bundle());\n\n\t\tdataHelper.trackNote(trackId, loc, \"Note to delete\", noteUUID);\n\n\t\t// 2. Verify it exists before deletion\n\t\tAssert.assertTrue(\"Note should exist after insertion\", noteExists(trackId));\n\n\t\t// 3. Delete note\n\t\tdataHelper.deleteNote(noteUUID);\n\n\t\t// 4. Verify it is gone\n\t\tAssert.assertFalse(\"Note should have been deleted from DB\", noteExists(trackId));\n\t}\n\n\tprivate boolean noteExists(long TrackId) {\n\t\t// Query using the content resolver provided by the Robolectric environment\n\t\tCursor c = ApplicationProvider.getApplicationContext().getContentResolver().query(\n\t\t\t\tTrackContentProvider.notesUri(TrackId),\n\t\t\t\tnull,null,null,null);\n\n\t\tboolean exists = (c != null && c.getCount() > 0);\n\t\tif (c != null) {\n\t\t\tc.close();\n\t\t}\n\t\treturn exists;\n\t}\n}"
  },
  {
    "path": "app/src/test/java/net/osmtracker/db/model/OSMVisibilityTest.java",
    "content": "package net.osmtracker.db.model;\n\nimport android.content.Context;\n\nimport androidx.test.core.app.ApplicationProvider;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport net.osmtracker.R;\nimport net.osmtracker.db.model.Track;\n\n@RunWith(RobolectricTestRunner.class)\n//Min SDK of the App\n@Config(sdk = 25)\npublic class OSMVisibilityTest {\n\n\tprivate Context context;\n\n\t@Before\n\tpublic void setUp() {\n\t\tcontext = ApplicationProvider.getApplicationContext();\n\t}\n\n\n\t@Test\n\tpublic void testEnumMappingToName() {\n\t\t// Database stores the .name() of the enum\n\t\tAssert.assertEquals(\"Private\" , Track.OSMVisibility.Private.name());\n\t\tAssert.assertEquals(\"Public\" , Track.OSMVisibility.Public.name());\n\t\tAssert.assertEquals(\"Trackable\" , Track.OSMVisibility.Trackable.name());\n\t\tAssert.assertEquals(\"Identifiable\", Track.OSMVisibility.Identifiable.name());\n\t}\n\n\t@Test\n\tpublic void testFromPosition() {\n\t\t// Verifies the Spinner index mapping (0 -> Private, 3 -> Identifiable)\n\t\tAssert.assertEquals(Track.OSMVisibility.Private, Track.OSMVisibility.fromPosition(0));\n\t\tAssert.assertEquals(Track.OSMVisibility.Public, Track.OSMVisibility.fromPosition(1));\n\t\tAssert.assertEquals(Track.OSMVisibility.Trackable, Track.OSMVisibility.fromPosition(2));\n\t\tAssert.assertEquals(Track.OSMVisibility.Identifiable, Track.OSMVisibility.fromPosition(3));\n\t}\n\n\t@Test\n\tpublic void testResourceIdsMapToCorrectStrings() {\n\t\tAssert.assertEquals(context.getString(R.string.osm_visibility_private),\n\t\t\t\tcontext.getString(Track.OSMVisibility.Private.resId));\n\t\tAssert.assertEquals(context.getString(R.string.osm_visibility_public),\n\t\t\t\tcontext.getString(Track.OSMVisibility.Public.resId));\n\t\tAssert.assertEquals(context.getString(R.string.osm_visibility_trackable),\n\t\t\t\tcontext.getString(Track.OSMVisibility.Trackable.resId));\n\t\tAssert.assertEquals(context.getString(R.string.osm_visibility_identifiable),\n\t\t\t\tcontext.getString(Track.OSMVisibility.Identifiable.resId));\n\t}\n\n\t@Test(expected = IllegalArgumentException.class)\n\tpublic void testFromPosition_Invalid() {\n\t\t// Verifies that an invalid index throws the expected exception\n\t\tTrack.OSMVisibility.fromPosition(99);\n\t}\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/db/model/TrackTest.java",
    "content": "package net.osmtracker.db.model;\n\nimport android.database.Cursor;\n\nimport net.osmtracker.db.TrackContentProvider;\nimport static net.osmtracker.db.TrackContentProvider.Schema.*;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport java.lang.reflect.Field;\nimport java.util.Arrays;\nimport java.util.List;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.mockito.Mockito.mock;\nimport static org.mockito.Mockito.when;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class TrackTest {\n\n    final long START_DATE = 123;\n    final String NAME = \"some name\";\n    final String DESCRIPTION = \"foo desc\";\n    final String TAGS = \"tag1,tag2,tag3\";\n    final List<String> TAGS_LIST = Arrays.asList(\"tag1\",\"tag2\",\"tag3\");\n    final String VISIBILITY = Track.OSMVisibility.Public.name();\n    final int TRACKPOINT_COUNT = 10;\n    final int WAYPOINT_COUNT = 20;\n\n    public Cursor initMockCursor(){\n        Cursor mockCursor = mock(Cursor.class);\n\n        // Columns mocks\n        when(mockCursor.getColumnIndex(COL_START_DATE)).thenReturn(1);\n        when(mockCursor.getLong(1)).thenReturn(START_DATE);\n\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_NAME)).thenReturn(2);\n        when(mockCursor.getString(2)).thenReturn(NAME);\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_DESCRIPTION)).thenReturn(3);\n        when(mockCursor.getString(3)).thenReturn(DESCRIPTION);\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_TAGS)).thenReturn(4);\n        when(mockCursor.getString(4)).thenReturn(TAGS);\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_OSM_VISIBILITY)).thenReturn(5);\n        when(mockCursor.getString(5)).thenReturn(VISIBILITY);\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_TRACKPOINT_COUNT)).thenReturn(6);\n        when(mockCursor.getInt(6)).thenReturn(TRACKPOINT_COUNT);\n\n        when(mockCursor.getColumnIndex(TrackContentProvider.Schema.COL_WAYPOINT_COUNT)).thenReturn(7);\n        when(mockCursor.getInt(7)).thenReturn(WAYPOINT_COUNT);\n\n        return mockCursor;\n    }\n\n    @Test\n    public void testBuild(){\n\n        Cursor mockCursor = initMockCursor();\n        boolean withExtraInfo = false;\n\n        Track t = Track.build(1, mockCursor, null, withExtraInfo);\n\n\n        try {\n            Field startDateField = t.getClass().getDeclaredField(\"trackDate\");\n            startDateField.setAccessible(true);\n\n            Field tagsField = t.getClass().getDeclaredField(\"tags\");\n            tagsField.setAccessible(true);\n\n\n            assertEquals(START_DATE, startDateField.get(t));\n            assertEquals(NAME, t.getName());\n            assertEquals(DESCRIPTION, t.getDescription());\n            assertEquals(TAGS_LIST, tagsField.get(t));\n            assertEquals(Track.OSMVisibility.valueOf(VISIBILITY), t.getVisibility());\n            assertEquals( TRACKPOINT_COUNT, (long) t.getTpCount() );\n            assertEquals( WAYPOINT_COUNT, (long) t.getWpCount() );\n\n\n        }catch (Exception e){\n\t\t\tthrow new RuntimeException(\"Reflection failed during Track fields verification\", e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/gpx/ExportToStorageTaskTest.java",
    "content": "package net.osmtracker.gpx;\n\nimport static junit.framework.TestCase.assertEquals;\nimport static net.osmtracker.db.TrackContentProvider.Schema;\nimport static org.junit.Assert.assertThrows;\nimport static org.junit.Assert.assertTrue;\nimport static org.mockito.ArgumentMatchers.any;\nimport static org.mockito.Mockito.mock;\nimport static org.mockito.Mockito.when;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.database.Cursor;\nimport android.os.Environment;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\nimport net.osmtracker.OSMTracker.Preferences;\nimport net.osmtracker.db.DataHelper;\nimport net.osmtracker.db.model.Track;\nimport net.osmtracker.exception.ExportTrackException;\n\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\nimport org.robolectric.shadows.ShadowEnvironment;\n\n\nimport java.io.File;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.TimeZone;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class ExportToStorageTaskTest {\n\n\tprivate Context context;\n\tprivate DataHelper mockDataHelper;\n\tprivate ExportToStorageTask task;\n\tprivate SharedPreferences prefs;\n\n\t// Standard test date: Jan 2nd, 2000, 03:04:05 UTC\n\tprivate static final String DATE_STRING = \"2000-01-02_03-04-05\";\n\tprivate static final String TRACK_NAME = \"MyTrack\";\n\n\t@Before\n\tpublic void setUp() {\n\t\tcontext = ApplicationProvider.getApplicationContext();\n\t\tmockDataHelper = mock(DataHelper.class);\n\t\tprefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\t// Reset preferences to prevent test-to-test leakage\n\t\tprefs.edit().clear().apply();\n\t\ttask = new ExportToStorageTask(context, mockDataHelper, 1L);\n    }\n\n\t// --- Filename Generation Tests ---\n\n\t@Test\n\tpublic void testBuildGPXFilename_OnlyTrackName() {\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_NAME);\n\t\tAssert.assertEquals(\"MyTrack.gpx\",\n\t\t\t\texecuteBuildFilename(TRACK_NAME, createDate()));\n\t}\n\n\t@Test\n\tpublic void testBuildGPXFilename_TrackNameAndDate() {\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_NAME_DATE);\n\t\tassertEquals(\"MyTrack_\" + DATE_STRING + \".gpx\",\n\t\t\t\texecuteBuildFilename(TRACK_NAME, createDate()));\n\t}\n\n\t@Test\n\tpublic void testBuildGPXFilename_DateAndTrackName() {\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_DATE_NAME);\n\t\tassertEquals(DATE_STRING + \"_MyTrack\" + \".gpx\",\n\t\t\t\texecuteBuildFilename(TRACK_NAME, createDate()));\n\t}\n\n\t@Test\n\tpublic void testBuildGPXFilename_OnlyDate() {\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_DATE);\n\t\tassertEquals(DATE_STRING + \".gpx\",\n\t\t\t\texecuteBuildFilename(TRACK_NAME, createDate()));\n\t}\n\n\t@Test\n\tpublic void testBuildGPXFilename_Sanitization() {\n\t\tString dirtyName = \":M/y*T@r~a\\\\c?k:\";\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_NAME);\n\t\tassertEquals(\";M_y_T_r_a_c_k;.gpx\",\n\t\t\t\texecuteBuildFilename(dirtyName, createDate()));\n\t}\n\n\t@Test\n\tpublic void testBuildGPXFilename_FallbackToDateWhenNameEmpty() {\n\t\tString emptyName = \"\";\n\t\tsetupFilenamePreference(Preferences.VAL_OUTPUT_FILENAME_NAME);\n\t\t// Should fallback to the timestamp if name is missing\n\t\tassertEquals(DATE_STRING + \".gpx\",\n\t\t\t\texecuteBuildFilename(emptyName, createDate()));\n\t}\n\n\t// --- Export Directory Tests ---\n\n\t@Test\n\tpublic void testGetExportDirectory_CreatesMissingFolders() throws Exception {\n\t\tShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);\n\t\tprefs.edit().putString(Preferences.KEY_STORAGE_DIR, \"NewAppFolder\").apply();\n\n\t\tFile result = task.getExportDirectory(new Date());\n\n\t\tassertTrue(\"Folder should be created\", result.exists());\n\t\tassertTrue(\"Path should contain custom dir name\", result.getAbsolutePath().contains(\"NewAppFolder\"));\n\t}\n\n\t@Test\n\tpublic void testGetExportDirectory_ThrowsWhenNotWritable() {\n\t\tShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED_READ_ONLY);\n\t\tassertThrows(ExportTrackException.class, () -> task.getBaseExportDirectory());\n\t}\n\n\t@Test\n\tpublic void testGetSanitizedTrackName_ReplacesSlashes() {\n\t\tTrack mockTrack = new Track();\n\t\tmockTrack.setName(\"Category/Sub/Track\");\n\t\twhen(mockDataHelper.getTrackByStartDate(any(Date.class))).thenReturn(mockTrack);\n\n\t\tString result = task.getSanitizedTrackNameByStartDate(new Date());\n\t\tassertEquals(\"Category_Sub_Track\", result);\n\t}\n\n\t// --- Internal Helpers ---\n\n\tprivate void setupFilenamePreference(String format) {\n\t\tprefs.edit()\n\t\t\t\t.putString(Preferences.KEY_OUTPUT_FILENAME, format)\n\t\t\t\t// Reset label for predictability\n\t\t\t\t.putString(Preferences.KEY_OUTPUT_FILENAME_LABEL, \"\")\n\t\t\t\t.apply();\n\t}\n\n\tprivate String executeBuildFilename(String name, Date date) {\n\t\treturn task.buildGPXFilename(createMockCursor(name, date.getTime()), context.getCacheDir());\n\t}\n\n\tprivate Cursor createMockCursor(String trackName, long trackStartDate) {\n\t\tCursor mockCursor = mock(Cursor.class);\n\t\twhen(mockCursor.getColumnIndex(Schema.COL_NAME)).thenReturn(1);\n\t\twhen(mockCursor.getString(1)).thenReturn(trackName);\n\t\twhen(mockCursor.getColumnIndex(Schema.COL_START_DATE)).thenReturn(2);\n\t\twhen(mockCursor.getLong(2)).thenReturn(trackStartDate);\n\t\treturn mockCursor;\n\t}\n\n\t/**\n\t * Creates a UTC Date representing 2000-01-02 03:04:05.\n\t */\n\tprivate static Date createDate() {\n\t\tCalendar cal = Calendar.getInstance(TimeZone.getDefault());\n\t\t// Calendar months are 0-based (January is 0), so we subtract 1 from the input\n\t\tcal.set(2000, Calendar.JANUARY, 2, 3, 4, 5);\n\t\tcal.set(Calendar.MILLISECOND, 0);\n\t\treturn cal.getTime();\n\n\t}\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/layout/DownloadCustomLayoutTaskTest.java",
    "content": "package net.osmtracker.layout;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.os.Environment;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.db.DataHelper;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\nimport org.robolectric.shadows.ShadowEnvironment;\n\nimport java.io.File;\n\nimport static org.junit.Assert.assertTrue;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class DownloadCustomLayoutTaskTest {\n\n    DownloadCustomLayoutTask downloadCustomLayoutTask;\n\tprivate Context context;\n\n    String layoutName = \"abc\";\n    String iso = \"en\";\n    String expectedLayoutFilename = \"abc_en.xml\";\n\n\n\t@Before\n\tpublic void setUp() {\n\t\tcontext = ApplicationProvider.getApplicationContext();\n\n\t\t// Setup real SharedPreferences logic\n\t\tSharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\tprefs.edit()\n\t\t\t\t.putString(OSMTracker.Preferences.KEY_GITHUB_USERNAME, \"labexp\")\n\t\t\t\t.putString(OSMTracker.Preferences.KEY_REPOSITORY_NAME, \"osmtracker-android-layouts\")\n\t\t\t\t.putString(OSMTracker.Preferences.KEY_BRANCH_NAME, \"for_tests\")\n\t\t\t\t.apply();\n\n\t\t// Setup Environment Shadow\n\t\tShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);\n\n\t\tdownloadCustomLayoutTask = new DownloadCustomLayoutTask(context);\n\t}\n\n\t@Test\n\tpublic void downloadLayoutWithoutIconsTest() {\n\t\tboolean result = downloadCustomLayoutTask.downloadLayout(layoutName, iso);\n\t\tassertTrue(\"Download should return true\", result);\n\n\t\t// Check if layout was downloaded at .../osmtracker/layouts/abc_en.xml\n\t\tFile layoutsDir = new File(context.getExternalFilesDir(null),\n\t\t\t\tOSMTracker.Preferences.VAL_STORAGE_DIR + File.separator + DataHelper.LAYOUTS_SUBDIR);\n\n\t\tFile layoutFile = new File(layoutsDir, expectedLayoutFilename);\n\n\t\tSystem.out.println(\"Expected path: \" + layoutFile.getAbsolutePath());\n\t\tassertTrue(\"Layout file should exist at path\", layoutFile.exists());\n\n\t\t// Add N icons to abc layout and check if the N icons are downloaded\n\t\t// at ... /osmtracker/layouts/abc_icons.\n\t}\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/layout/URLValidatorTaskTest.java",
    "content": "package net.osmtracker.layout;\n\nimport net.osmtracker.OSMTracker;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.assertEquals;\n\npublic class URLValidatorTaskTest {\n\n    URLValidatorTask urlValidatorTask = new URLValidatorTask();\n\n    @Test\n    public void customLayoutsRepoValidatorTest() {\n        String validUser = OSMTracker.Preferences.VAL_GITHUB_USERNAME;\n        String validRepository = OSMTracker.Preferences.VAL_REPOSITORY_NAME;\n        String validBranch = OSMTracker.Preferences.VAL_BRANCH_NAME;\n        String invalidBranch = \"NONE\";\n        Boolean result;\n\n        result = urlValidatorTask.customLayoutsRepoValidator(validUser, validRepository, validBranch);\n        assertEquals(true, result);\n\n        result = urlValidatorTask.customLayoutsRepoValidator(validUser, validRepository, invalidBranch);\n        assertEquals(false, result);\n    }\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/ArrayUtilsTest.java",
    "content": "package net.osmtracker.util;\n\nimport static org.junit.Assert.assertTrue;\n\nimport org.junit.Test;\n\npublic class ArrayUtilsTest {\n\n\tdouble[][] arrayAsc = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};\n\n\tdouble[][] arrayDesc = {{3, 3, 3}, {2, 2, 2}, {1, 1, 1}};\n\n\t@Test\n\tpublic void findMinAsc() {\n\t\tdouble min = ArrayUtils.findMin(arrayAsc, 0);\n\t\tassertTrue(min == 1);\n\t}\n\n\t@Test\n\tpublic void findMinDesc() {\n\t\tdouble min = ArrayUtils.findMin(arrayDesc, 2);\n\t\tassertTrue(min == 1);\n\t}\n\n\t@Test\n\tpublic void findMaxAsc() {\n\t\tdouble max = ArrayUtils.findMax(arrayAsc, 0);\n\t\tassertTrue(max == 3);\n\t}\n\n\t@Test\n\tpublic void findMaxDesc() {\n\t\tdouble max = ArrayUtils.findMax(arrayDesc, 2);\n\t\tassertTrue(max == 3);\n\t}\n}"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/CustomLayoutsUtilsTest.java",
    "content": "package net.osmtracker.util;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\n\nimport net.osmtracker.OSMTracker;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.charset.StandardCharsets;\n\nimport static org.junit.Assert.assertEquals;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class CustomLayoutsUtilsTest {\n\n\tprivate Context context;\n\tprivate SharedPreferences prefs;\n\n\t@Before\n\tpublic void setUp() {\n\t\tcontext = ApplicationProvider.getApplicationContext();\n\t\tprefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\t// Ensure a clean state for every test\n\t\tprefs.edit().clear().apply();\n\t}\n\n\t@Test\n\tpublic void convertFileName() {\n\t\tassertEquals(\"public transport\", CustomLayoutsUtils.convertFileName(\"public_transport.xml\"));\n\t\tassertEquals(\"simple\", CustomLayoutsUtils.convertFileName(\"simple.xml\"));\n\t}\n\n\t@Test\n\tpublic void unconvertFileName() {\n\t\tassertEquals(\"public_transport.xml\", CustomLayoutsUtils.unconvertFileName(\"public transport\"));\n\t}\n\n\t@Test\n\tpublic void createFileName() {\n\t\tassertEquals(\"public_transport_es.xml\", CustomLayoutsUtils.createFileName(\"public transport\", \"es\"));\n\t}\n\n\t@Test\n\tpublic void getStringFromStream() throws IOException {\n\t\tString content = \"GPX Test Content\" + System.lineSeparator() + \"Second Line\";\n\t\tInputStream inputStream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));\n\t\tString result = CustomLayoutsUtils.getStringFromStream(inputStream);\n\t\tassertEquals(content, result);\n\t}\n\n\t@Test\n\tpublic void getCurrentLayoutName() {\n\t\t// Set value in real Robolectric preferences\n\t\tprefs.edit().putString(OSMTracker.Preferences.KEY_UI_BUTTONS_LAYOUT, \"transporte publico\").apply();\n\t\tString result = CustomLayoutsUtils.getCurrentLayoutName(context);\n\t\tassertEquals(\"transporte publico\", result);\n\t}\n\n\t@Test\n\tpublic void getCurrentLayoutName_ReturnsDefaultWhenEmpty() {\n\t\t// Test fallback logic\n\t\tString result = CustomLayoutsUtils.getCurrentLayoutName(context);\n\t\tassertEquals(OSMTracker.Preferences.VAL_UI_BUTTONS_LAYOUT, result);\n\t}\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/FileSystemUtilsTest.java",
    "content": "package net.osmtracker.util;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.TemporaryFolder;\n\nimport java.io.File;\nimport java.io.IOException;\n\nimport static org.junit.Assert.*;\n\npublic class FileSystemUtilsTest {\n\n    @Rule\n    public TemporaryFolder temporaryFolder = new TemporaryFolder();\n\n    private File sourceFile;\n    private File destinationDirectory;\n    private File sourceDirectory;\n    private File targetFile;\n\n    @Before\n    public void setUp() throws IOException {\n        // Create a temporary source file\n        sourceFile = temporaryFolder.newFile(\"source.txt\");\n\n        // Create a temporary destination directory\n        destinationDirectory = temporaryFolder.newFolder(\"destinationDir\");\n\n        // Create a temporary source directory\n        sourceDirectory = temporaryFolder.newFolder(\"sourceDir\");\n\n        // Create a temporary target file\n        targetFile = new File(destinationDirectory, \"target.txt\");\n    }\n\n    @After\n    public void tearDown() {\n        // No cleanup needed for temporary files and directories\n    }\n\n    @Test\n    public void testCopyFileSuccess() {\n        assertTrue(FileSystemUtils.copyFile(destinationDirectory, sourceFile, \"target.txt\"));\n        assertTrue(targetFile.exists());\n    }\n\n    @Test\n    public void testCopyFileFailure() {\n        // Attempt to copy to a non-existent directory\n        File nonExistentDirectory = new File(temporaryFolder.getRoot(), \"nonExistentDir\");\n        assertFalse(FileSystemUtils.copyFile(nonExistentDirectory, sourceFile, \"target.txt\"));\n    }\n\n    @Test\n    public void testCopyDirectoryContentsSuccess() throws IOException {\n        // Create a file in the source directory\n        File fileInSourceDirectory = new File(sourceDirectory, \"fileInSource.txt\");\n        assertTrue(fileInSourceDirectory.createNewFile());\n\n        assertTrue(FileSystemUtils.copyDirectoryContents(destinationDirectory, sourceDirectory));\n        assertTrue(new File(destinationDirectory, \"fileInSource.txt\").exists());\n    }\n\n    @Test\n    public void testCopyDirectoryContentsFailure() {\n        // Attempt to copy from a non-existent directory\n        File nonExistentDirectory = new File(temporaryFolder.getRoot(), \"nonExistentDir\");\n        assertFalse(FileSystemUtils.copyDirectoryContents(destinationDirectory, nonExistentDirectory));\n    }\n\n    @Test\n    public void testCopyDirectoryContentsDestinationNull() {\n        // Attempt to copy with a null destination directory\n        assertFalse(FileSystemUtils.copyDirectoryContents(null, sourceDirectory));\n    }\n\n    @Test\n    public void testCopyDirectoryContentsSourceNull() {\n        // Attempt to copy with a null source directory\n        assertFalse(FileSystemUtils.copyDirectoryContents(destinationDirectory, null));\n    }\n\n    @Test\n    public void testDeleteFileSuccess() {\n        assertTrue(FileSystemUtils.delete(sourceFile, false));\n        assertFalse(sourceFile.exists());\n    }\n\n    @Test\n    public void testDeleteDirectorySuccess() {\n        assertTrue(FileSystemUtils.delete(sourceDirectory, true));\n        assertFalse(sourceDirectory.exists());\n    }\n\n    @Test\n    public void testDeleteDirectoryFailure() throws IOException {\n        // Create a nested directory structure\n        File nestedDirectory = new File(sourceDirectory, \"nestedDir\");\n        assertTrue(nestedDirectory.mkdir());\n        File nestedFile = new File(nestedDirectory, \"nestedFile.txt\");\n        assertTrue(nestedFile.createNewFile());\n\n        // Attempt to delete the directory with recursion depth greater than 1\n        assertFalse(FileSystemUtils.delete(sourceDirectory, true));\n    }\n\n    @Test\n    public void testGetUniqueChildNameFor() throws IOException {\n        String uniqueName = FileSystemUtils.getUniqueChildNameFor(destinationDirectory, \"test\", \".txt\");\n        assertEquals(\"test.txt\", uniqueName);\n\n        // Create a file with the same name to test the uniqueness\n        File existingFile = new File(destinationDirectory, \"test.txt\");\n        assertTrue(existingFile.createNewFile());\n\n        uniqueName = FileSystemUtils.getUniqueChildNameFor(destinationDirectory, \"test\", \".txt\");\n        assertEquals(\"test1.txt\", uniqueName);\n    }\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/MercatorProjectionTest.java",
    "content": "package net.osmtracker.util;\n\nimport static org.junit.Assert.*;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.Parameterized;\n\nimport java.util.Arrays;\nimport java.util.Collection;\n\n@RunWith(Parameterized.class)\npublic class MercatorProjectionTest {\n\n    @Parameterized.Parameter(0)\n    public double minLat;\n\n    @Parameterized.Parameter(1)\n    public double lat;\n\n    @Parameterized.Parameter(2)\n    public double maxLat;\n\n    @Parameterized.Parameter(3)\n    public double minLon;\n\n    @Parameterized.Parameter(4)\n    public double lon;\n\n    @Parameterized.Parameter(5)\n    public double maxLon;\n\n    @Parameterized.Parameter(6)\n    public int expectedX;\n\n    @Parameterized.Parameter(7)\n    public int expectedY;\n\n    @Parameterized.Parameter(8)\n    public double expectedScale;\n\n    @Parameterized.Parameter(9)\n    public Float degre;\n\n    @Parameterized.Parameter(10)\n    public boolean isLat;\n\n    @Parameterized.Parameter(11)\n    public String expectedDms;\n\n    @Parameterized.Parameters\n    public static Collection<Object[]> data() {\n        return Arrays.asList(new Object[][] {\n            { -89, -83.83, -80, /**/ -180, -171.171, -160, /**/ 323, 879, /**/ 0.0315, -83.83f,  true, \"83° 49' 48\\\" S\" },\n            { -45, -42.45, -40, /**/  170,  175.175,  180, /**/ 373, 630, /**/ 0.0138, -42.45f, false, \"42° 27' 0\\\" W\" },\n            {  45,  48.48,  50, /**/ -160, -151.151, -150, /**/ 637, 541, /**/ 0.0138,  48.48f,  true, \"48° 28' 47\\\" N\" },\n            {  80,  82.82,  85, /**/  110,  111.111,  120, /**/ 235, 668, /**/ 0.0311,  82.82f, false, \"82° 49' 11\\\" E\" },\n            {  89,  89.89,  90, /**/  111,  111.111,  112, /**/  80, 640, /**/ 0.0013,    null, true, \"\" }\n        });\n    }\n\n    @Test\n    public void testProject() {\n        MercatorProjection projection = new MercatorProjection(minLat, minLon, maxLat, maxLon, 720, 1280);\n        int[] point = projection.project(lon, lat);\n        assertNotNull(point);\n        assertEquals(expectedX, point[MercatorProjection.X]);\n        assertEquals(expectedY, point[MercatorProjection.Y]);\n        assertEquals(expectedScale, projection.getScale(), 0.0001);\n    }\n\n    @Test\n    public void testFormatDegreesAsDMS() {\n        String formattedDms = MercatorProjection.formatDegreesAsDMS(degre, isLat);\n        assertEquals(expectedDms, formattedDms);\n    }\n\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/ThemeValidatorTest.java",
    "content": "package net.osmtracker.util;\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.res.Resources;\n\nimport net.osmtracker.OSMTracker;\nimport net.osmtracker.R;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport static org.junit.Assert.*;\nimport static org.mockito.Mockito.mock;\nimport static org.mockito.Mockito.when;\n\nimport androidx.preference.PreferenceManager;\nimport androidx.test.core.app.ApplicationProvider;\n\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class ThemeValidatorTest {\n\n\tprivate SharedPreferences realPrefs;\n\tprivate Resources mockRes;\n\n\t@Before\n\tpublic void setUp() {\n\t\tContext context = ApplicationProvider.getApplicationContext();\n\t\trealPrefs = PreferenceManager.getDefaultSharedPreferences(context);\n\t\t// Ensure a clean state for every test\n\t\trealPrefs.edit().clear().commit();\n\n\t\tmockRes = mock(Resources.class);\n\t\tString[] themes = {\n\t\t\t\t\"net.osmtracker:style/DefaultTheme\",\n\t\t\t\t\"net.osmtracker:style/DarkTheme\",\n\t\t\t\t\"net.osmtracker:style/LightTheme\",\n\t\t\t\t\"net.osmtracker:style/HighContrast\"\n\t\t};\n\t\twhen(mockRes.getStringArray(R.array.prefs_theme_values)).thenReturn(themes);\n\t}\n\n\n    @Test\n    public void validateDefaultTheme(){\n\t\t// Set a valid theme in preferences\n\t\trealPrefs.edit().putString(\n\t\t\t\tOSMTracker.Preferences.KEY_UI_THEME,\n\t\t\t\t\"net.osmtracker:style/DefaultTheme\")\n\t\t\t\t.commit();\n\n        String result =ThemeValidator.getValidTheme(realPrefs, mockRes);\n        String expected = \"net.osmtracker:style/DefaultTheme\";\n\t\tassertEquals(expected, result);\n    }\n\n    /*Use a theme that is not included on the theme values array and also\n     *  verify methods of the mocked editor so that the preferences are saved.*/\n    @Test\n    public void validateWrongTheme(){\n\t\t// Set an invalid theme in preferences\n\t\trealPrefs.edit().putString(\n\t\t\t\tOSMTracker.Preferences.KEY_UI_THEME,\n\t\t\t\t\"net.osmtracker:style/YellowTheme\")\n\t\t\t\t.commit();\n\n\t\t// The validator should detect \"YellowTheme\" is missing from the Resources array\n\t\t// and reset it to the default.\n\t\tString result = ThemeValidator.getValidTheme(realPrefs, mockRes);\n\t\tString expected = \"net.osmtracker:style/DefaultTheme\";\n\n\t\tassertEquals(\"Should fallback to DefaultTheme\", expected, result);\n\n\t\t// Verify that the preference was actually updated/repaired in the storage\n\t\tassertEquals(\"Preference should be repaired in storage\",\n\t\t\t\texpected, realPrefs.getString(OSMTracker.Preferences.KEY_UI_THEME, null));\n\t}\n}\n"
  },
  {
    "path": "app/src/test/java/net/osmtracker/util/URLCreatorTest.java",
    "content": "package net.osmtracker.util;\n\nimport android.content.Context;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\nimport org.robolectric.annotation.Config;\n\nimport static org.junit.Assert.*;\n\nimport androidx.test.core.app.ApplicationProvider;\n\n@RunWith(RobolectricTestRunner.class)\n@Config(sdk = 25)\npublic class URLCreatorTest {\n\n\tprivate Context context;\n\n\t@Before\n\tpublic void setUp() {\n\t\tcontext = ApplicationProvider.getApplicationContext();\n\t}\n\n    @Test\n    public void createMetadataDirUrl() {\n\t\tString result = URLCreator.createMetadataDirUrl(context);\n\t\tString expected = \"https://api.github.com/repos/labexp/osmtracker-android-layouts/contents/layouts/metadata?ref=master\";\n\t\tassertEquals(expected, result);\n    }\n\n    @Test\n    public void createMetadataFileURL() {\n        String result = URLCreator.createMetadataFileURL(context, \"transporte_publico\");\n        String expected = \"https://raw.githubusercontent.com/labexp/osmtracker-android-layouts/master/layouts/metadata/transporte_publico.xml\";\n\t\tassertEquals(expected, result);\n    }\n\n    @Test\n    public void createLayoutFileURL() {\n        String result = URLCreator.createLayoutFileURL(context, \"hidrantes\",\"es\");\n        String expected = \"https://raw.githubusercontent.com/labexp/osmtracker-android-layouts/master/layouts/hidrantes/es.xml\";\n\t\tassertEquals(expected, result);\n\n    }\n\n    @Test\n    public void createIconsDirUrl() {\n        String result = URLCreator.createIconsDirUrl(context, \"hidrantes\");\n        String expected = \"https://api.github.com/repos/labexp/osmtracker-android-layouts/contents/layouts/hidrantes/hidrantes_icons?ref=master\";\n\t\tassertEquals(expected, result);\n    }\n\n    @Test\n    public void createTestURL() {\n        String result = URLCreator.createTestURL(\"labexp\", \"osmtracker-android-layouts\", \"master\");\n        String expected = \"https://api.github.com/repos/labexp/osmtracker-android-layouts/contents/layouts/metadata?ref=master\";\n\t\tassertEquals(expected, result);\n    }\n\n}\n"
  },
  {
    "path": "app/src/test/resources/gpx/gpx-test.gpx",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"OSMTracker for Android™ - https://github.com/labexp/osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">\n\t<metadata>\n\t\t<name>2020-12-30_17-20-17</name>\n\t\t<keywords>osmtracker</keywords>\n\t</metadata>\n\t<wpt lat=\"10.0375634848231\" lon=\"-84.2123549868801\">\n\t\t<ele>1029.89940680377</ele>\n\t\t<time>2001-05-16T23:20:28Z</time>\n\t\t<name><![CDATA[Punto de prueba]]></name>\n\t\t<sat>0</sat>\n\t\t<hdop>6.0</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<compass>204.029998779297</compass>\n\t\t\t\t\t<compass_accuracy>2.0</compass_accuracy>\n\t\t\t\t</extensions>\n\t</wpt>\n\t<trk>\n\t\t<name><![CDATA[Trazado con OSMTracker para Android™]]></name>\n\t\t<cmt><![CDATA[Advertencia: los valores HDOP no son los valores HDOP devueltos por el dispositivo GPS. Son valores aproximados de acuerdo a la precisión de la ubicación en metros.]]></cmt>\n\t\t<trkseg>\n\t\t\t<trkpt lat=\"10.0375690436648\" lon=\"-84.2122886824885\">\n\t\t\t\t<ele>1015.13159253262</ele>\n\t\t\t\t<time>2001-05-16T23:20:25Z</time>\n\t\t\t\t<hdop>8.908860206604</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>0.361938893795013</speed>\n\t\t\t\t\t<compass>204.690002441406</compass>\n\t\t\t\t\t<compass_accuracy>2.0</compass_accuracy>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t\t<trkpt lat=\"10.0377106969496\" lon=\"-84.2123268390527\">\n\t\t\t\t<ele>1007.3209409276</ele>\n\t\t\t\t<time>2001-05-16T23:20:26Z</time>\n\t\t\t\t<hdop>13.0176601409912</hdop>\n\t\t\t\t<extensions>\n\t\t\t\t\t<speed>0.271533757448196</speed>\n\t\t\t\t\t<compass>204.360000610352</compass>\n\t\t\t\t\t<compass_accuracy>2.0</compass_accuracy>\n\t\t\t\t</extensions>\n\t\t\t</trkpt>\n\t\t</trkseg>\n\t</trk>\n</gpx>"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    ext {\n        kotlin_version = '2.0.21'\n        jacocoVersion = '0.8.12'\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:8.7.3'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n    }\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n"
  },
  {
    "path": "fastlane/metadata/android/ca/short_description.txt",
    "content": "Enregistrador de seguiment GPS\n"
  },
  {
    "path": "fastlane/metadata/android/cs/short_description.txt",
    "content": "GPS záznamník trasy\n"
  },
  {
    "path": "fastlane/metadata/android/de/short_description.txt",
    "content": "GPS-Track-Rekorder\n"
  },
  {
    "path": "fastlane/metadata/android/en-US/changelogs/57.txt",
    "content": "Bug fixes:\n\n* Export track."
  },
  {
    "path": "fastlane/metadata/android/en-US/changelogs/62.txt",
    "content": "Features:\n\n* Switch to Oauth2\n* Multiple segments per track functionality.\n\nImprovements:\n\n* update translations (de, no, nl, el, da, ar, pt_PT, fa_IR, tr_TR, cs_CZ, zh_TW, fr_FR, tr, vi, zh_CN, ta, sv, sr, sr@latin, sk, pt_BR, ru, ko, nb, lt, ja, kn, hr, it, gl, hu, fr, es, ca, fi, fa), thanks translators!.\n\nBug fixes:\n\n* Export tracks and custom layouts in scoped storage in android 11+.\n\nKnown bugs:\n\n* Take photos in traces is not working\n\nFix the issues requested by Google Play to list OSMTracker again"
  },
  {
    "path": "fastlane/metadata/android/en-US/changelogs/65.txt",
    "content": "Bug fixes:\n\n* Export to Documents folder.\n* Correct update date of traces and OSM update date.\n* Export file names format.\n\nImprovements:\n\n* Optional label in export filename.\n* Share traces as zip with including the trace and associated multimedia files.\n* Preview, edit and delete waypoints.\n\nUI Enhancements:\n\n* Large text compatibility.\n* New map design.\n* Trace separator in the list.\n\nLanguage translation updates (thanks translators!)"
  },
  {
    "path": "fastlane/metadata/android/en-US/changelogs/66.txt",
    "content": "Bug fixes:\n \n* Warn user when no photo or audio app is installed (for waypoints preview).\n\nNew feature: \n* Upload tracks to GitHub. Auto-rename duplicates with (#)\n\nLanguage translation updates (thanks translators!)"
  },
  {
    "path": "fastlane/metadata/android/en-US/full_description.txt",
    "content": "<b>OSMTracker for Android</b> allows you to track your journey and mark significant waypoints. Waypoints can be marked\nusing a button with a tag, a quick voice recording, a text note, or by taking a picture. The various button pages and\nlayouts can be customized to suit your OpenStreetMap activities. You can view your current track on top of an\nOpenStreetMap background.\n\n<b>Features:</b>\n<ul>\n  <li><b>GPS Track Logging:</b> Record and store your journey as a GPX track.</li>\n  <li><b>Waypoint Marking:</b> Add points of interest with:\n    <ul>\n      <li>Customizable quick-access buttons</li>\n      <li>Voice recordings</li>\n      <li>Text notes</li>\n      <li>Photos</li>\n    </ul>\n  </li>\n  <li><b>OpenStreetMap Integration:</b> View your GPS track over an OpenStreetMap background.</li>\n  <li><b>Offline Usage:</b> Works without an internet connection, ideal for remote areas.</li>\n</ul>\n\nWhether you're mapping new territories, hiking, cycling, or exploring, <b>OSMTracker</b> is the perfect tool for\nOpenStreetMap contributors and outdoor adventurers.\n\n<strong>🚀 Start mapping with OSMTracker and contribute to OpenStreetMap today!</strong>"
  },
  {
    "path": "fastlane/metadata/android/en-US/short_description.txt",
    "content": "GPS Track Recorder"
  },
  {
    "path": "fastlane/metadata/android/en-US/title.txt",
    "content": "OSMTracker for Android™"
  },
  {
    "path": "fastlane/metadata/android/es/full_description.txt",
    "content": "<b>OSMTracker para Android™</b> te permite registrar tu recorrido y marcar puntos de interés importantes. Los puntos de\ninterés pueden marcarse usando un botón con una etiqueta, una grabación de voz rápida, una nota de texto o tomando una\nfoto. Las diferentes páginas de botones y diseños pueden personalizarse para adaptarse a tus actividades en\nOpenStreetMap. Puedes ver tu recorrido actual sobre un mapa de fondo de OpenStreetMap.\n\n<b>Características:</b>\n\n<ul>\n    <li><b>Registro de trazas GPS:</b> Graba y guarda tu recorrido como una traza GPX.</li>\n    <li><b>Marcado de Puntos de Interés:</b> Agrega puntos importantes mediante: \n        <ul>\n            <li>Botones de acceso rápido personalizables</li>\n            <li>Grabaciones de voz</li>\n            <li>Notas de texto</li>\n            <li>Fotografías</li>\n        </ul>\n    </li>\n    <li><b>Integración con OpenStreetMap:</b> Visualiza tu recorrido GPS sobre un mapa de fondo de OpenStreetMap.</li>\n    <li><b>Uso sin Conexión:</b> Funciona sin conexión a internet, ideal para zonas remotas.</li>\n</ul>\nYa sea que estés mapeando nuevos territorios, haciendo senderismo, ciclismo o explorando, <b>OSMTracker</b> es la\nherramienta perfecta para los colaboradores de OpenStreetMap y los aventureros al aire libre.\n\n<strong>🚀 ¡Empieza a mapear con OSMTracker y contribuye a OpenStreetMap hoy mismo!</strong>"
  },
  {
    "path": "fastlane/metadata/android/es/short_description.txt",
    "content": "Grabador de trazas GPS"
  },
  {
    "path": "fastlane/metadata/android/fr/short_description.txt",
    "content": "Enregistreur de trace GPS\n"
  },
  {
    "path": "fastlane/metadata/android/ga/short_description.txt",
    "content": "Taifeadán Amhrán GPS\n"
  },
  {
    "path": "fastlane/metadata/android/he/short_description.txt",
    "content": "מקליט מסלול GPS\n"
  },
  {
    "path": "fastlane/metadata/android/id/short_description.txt",
    "content": "Perekam Jalur GPS\n"
  },
  {
    "path": "fastlane/metadata/android/nn/short_description.txt",
    "content": "Loggfør GPS-spor\n"
  },
  {
    "path": "fastlane/metadata/android/pl/short_description.txt",
    "content": "Rejestrator śladów GPS\n"
  },
  {
    "path": "fastlane/metadata/android/pt/short_description.txt",
    "content": "Gravador de pistas GPS\n"
  },
  {
    "path": "fastlane/metadata/android/pt-BR/short_description.txt",
    "content": "Gravador GPS de trilha\n"
  },
  {
    "path": "fastlane/metadata/android/pt-PT/short_description.txt",
    "content": "Gravador de pistas GPS\n"
  },
  {
    "path": "fastlane/metadata/android/ro/short_description.txt",
    "content": "Înregistrator de urmărire GPS\n"
  },
  {
    "path": "fastlane/metadata/android/ru/short_description.txt",
    "content": "GPS-трекер\n"
  },
  {
    "path": "fastlane/metadata/android/sq/short_description.txt",
    "content": "Regjistrues Gjurme GPS\n"
  },
  {
    "path": "fastlane/metadata/android/sr/short_description.txt",
    "content": "Снимач GPS трака\n"
  },
  {
    "path": "fastlane/metadata/android/sw/short_description.txt",
    "content": "Rekoda ya GPS ya Kufuatilia Nyendo\n"
  },
  {
    "path": "fastlane/metadata/android/ta/short_description.txt",
    "content": "சி.பி.எச் டிராக் ரெக்கார்டர்\n"
  },
  {
    "path": "fastlane/metadata/android/tr/short_description.txt",
    "content": "GPS İz Kaydedicisi\n"
  },
  {
    "path": "fastlane/metadata/android/uk/short_description.txt",
    "content": "Записувач GPS-треків\n"
  },
  {
    "path": "fastlane/metadata/android/zh-CN/short_description.txt",
    "content": "GPS 足迹记录仪\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Oct 21 08:47:26 CST 2024\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.11.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "android.enableJetifier=true\nandroid.nonFinalResIds=false\nandroid.nonTransitiveRClass=false\nandroid.useAndroidX=true"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windows variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  },
  {
    "path": "transifex.yml",
    "content": "# Transifex config file\n\ngit:\n  filters:\n    - filter_type: dir\n      file_format: ANDROID\n      source_file_extension: xml\n      source_language: en\n      source_file_dir: app/src/main/res/values/\n      translation_files_expression: 'app/src/main/res/values-<lang>/'\n      ignore_files:\n        - app/src/main/res/values/colors.xml\n        - app/src/main/res/values/themes.xml\n        - app/src/main/res/values/theme_highcontrast.xml\n        - app/src/main/res/values/styles.xml\n        - app/src/main/res/values/values.xml\n        - app/src/main/res/values/values-preferences.xml\n\n  settings:\n    language_mapping:\n      bg_BG: bg-rBG\n      sr@Latin: b+sr+Latn\n      cs_CZ: cs-rCZ\n      fa_IR: fa-rIR\n      fr_FR: fr-rFR\n      pt_BR: pt-rBR\n      pt_PT: pt-rPT\n      tr_TR: tr-rTR\n      zh_CN: zh-rCN\n      zh_TW: zh-rTW\n"
  }
]