Compare commits

..

1 Commits

Author SHA1 Message Date
Michał Brzozowski
d700510c94 [routing] Remove passed intermediate points when assembling a modified route mid-navigation
Fixes OM #9592

Signed-off-by: Michał Brzozowski <www.haxor@gmail.com>
2025-05-24 08:14:34 +02:00
3524 changed files with 125016 additions and 113361 deletions

View File

@@ -1,59 +1,48 @@
# Configuration file for clang-format, based on docs/CPP_STYLE.md. # Configuration file for clang-format, based on docs/CPP_STYLE.md.
---
BasedOnStyle: Google BasedOnStyle: Google
AccessModifierOffset: -2 AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: Right
AlignConsecutiveMacros: AcrossEmptyLinesAndComments
AlignEscapedNewlines: LeftWithLastLine
AlignOperands: AlignAfterOperator AlignOperands: AlignAfterOperator
AllowShortBlocksOnASingleLine: Empty AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: Never AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false AllowShortLoopsOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
BraceWrapping: BraceWrapping:
AfterCaseLabel: true AfterCaseLabel: true
AfterClass: true AfterClass: true
AfterControlStatement: Always AfterControlStatement: Always
AfterEnum: true AfterEnum: true
AfterExternBlock: true
AfterFunction: true AfterFunction: true
AfterNamespace: true AfterNamespace: true
AfterObjCDeclaration: true AfterObjCDeclaration: true
AfterStruct: true AfterStruct: true
AfterUnion: true AfterUnion: true
AfterExternBlock: true
BeforeCatch: true BeforeCatch: true
BeforeElse: true BeforeElse: true
BeforeLambdaBody: true BeforeLambdaBody: true
BeforeWhile: true BeforeWhile: true
IndentBraces: false
SplitEmptyFunction: false SplitEmptyFunction: false
SplitEmptyNamespace: false
SplitEmptyRecord: false SplitEmptyRecord: false
BinPackArguments: true SplitEmptyNamespace: false
BinPackParameters: true
BreakAfterJavaFieldAnnotations: true
BreakBeforeBraces: Custom BreakBeforeBraces: Custom
BreakConstructorInitializers: BeforeComma BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma BreakInheritanceList: BeforeComma
ColumnLimit: 120 ColumnLimit: 120
ConstructorInitializerIndentWidth: 2 ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 4 ContinuationIndentWidth: 2
DerivePointerAlignment: false DerivePointerAlignment: false
IncludeBlocks: Preserve IncludeBlocks: Preserve
IndentAccessModifiers: false IndentCaseLabels: false
IndentExternBlock: NoIndent IndentExternBlock: NoIndent
InsertBraces: false
InsertNewlineAtEOF: true InsertNewlineAtEOF: true
LambdaBodyIndentation: OuterScope PackConstructorInitializers: Never
PackConstructorInitializers: CurrentLine
PointerAlignment: Middle PointerAlignment: Middle
RemoveBracesLLVM: true
QualifierAlignment: Right QualifierAlignment: Right
SpacesInContainerLiterals: false SpacesInContainerLiterals: false
Standard: Latest Standard: Latest
TabWidth: 2 TabWidth: 2
UseTab: Never
---
Language: Java
AllowShortFunctionsOnASingleLine: Empty

View File

@@ -1,5 +1,6 @@
name: 🐞 Bug Report name: 🐞 Bug Report
description: Report a problem you've encountered description: Report a problem you've encountered
title: "bug: "
labels: labels:
- bug - bug
body: body:
@@ -66,4 +67,4 @@ body:
label: Additional context label: Additional context
description: Add any other context or comments that may be useful. description: Add any other context or comments that may be useful.
validations: validations:
required: false required: false

View File

@@ -1,5 +1,6 @@
name: "💡 Feature Request" name: "💡 Feature Request"
description: "Suggest an idea or improvement for CoMaps" description: "Suggest an idea or improvement for CoMaps"
title: "feat: "
labels: labels:
- "enhancement" - "enhancement"
body: body:
@@ -43,4 +44,4 @@ body:
label: "Additional context" label: "Additional context"
description: "Any other context, comments, or screenshots to support your request." description: "Any other context, comments, or screenshots to support your request."
validations: validations:
required: false required: false

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
paths-ignore: paths-ignore:
- .gitignore - .gitignore
- .forgejo/** - .forgejo/**
@@ -32,6 +32,9 @@ on:
- track_generator/** - track_generator/**
- xcode/** - xcode/**
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs: jobs:
android-google-beta: android-google-beta:
name: Android Google Beta name: Android Google Beta
@@ -41,11 +44,11 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt-get update -y sudo apt-get update -y
apt-get install -y cmake ninja-build sudo apt-get install -y ninja-build
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
@@ -68,9 +71,11 @@ jobs:
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }} SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }} RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Compile - name: Compile
container:
image: runmymind/docker-android-sdk:latest
shell: bash shell: bash
working-directory: android working-directory: android
run: | run: |

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
sparse-checkout: | sparse-checkout: |

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
pull_request: pull_request:
paths-ignore: paths-ignore:
- .gitignore - .gitignore
@@ -34,21 +34,16 @@ on:
- track_generator/** - track_generator/**
- xcode/** - xcode/**
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs: jobs:
lint: lint:
name: Android Lint name: Android Lint
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: runmymind/docker-android-sdk:latest
steps: steps:
- name: Install Node.JS
shell: bash
run: |
apt-get update -y
apt-get install -y nodejs
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
@@ -56,6 +51,10 @@ jobs:
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Lint - name: Lint
shell: bash shell: bash
working-directory: android working-directory: android
@@ -64,8 +63,6 @@ jobs:
android-check: android-check:
name: Build Android Debug name: Build Android Debug
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: runmymind/docker-android-sdk:latest
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -84,11 +81,11 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt-get update -y sudo apt-get update -y
apt-get install -y cmake ninja-build nodejs sudo apt-get install -y ninja-build
- name: Checkout sources - name: Checkout sources
uses: httpa://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 200 # enough to get all commits for the current day fetch-depth: 200 # enough to get all commits for the current day
@@ -96,8 +93,12 @@ jobs:
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache - name: Configure ccache
uses: https://github.com/hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:
key: ${{ github.workflow }}-${{ matrix.flavor }} key: ${{ github.workflow }}-${{ matrix.flavor }}
@@ -116,5 +117,5 @@ jobs:
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: android-${{ matrix.flavor }} name: android-${{ matrix.flavor }}
path: android/app/build/outputs/apk/**/CoMaps-*.apk path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
if-no-files-found: error if-no-files-found: error

View File

@@ -4,13 +4,16 @@ on:
schedule: schedule:
- cron: '0 5 * * 0' # Once per week at 05:00 UTC - cron: '0 5 * * 0' # Once per week at 05:00 UTC
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs: jobs:
precondition: precondition:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Check preconditions name: Check preconditions
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1000 # fetch month or so fetch-depth: 1000 # fetch month or so
@@ -31,8 +34,6 @@ jobs:
android-google-beta: android-google-beta:
name: Android Google Beta name: Android Google Beta
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: runmymind/docker-android-sdk:latest
needs: precondition needs: precondition
if: ${{ needs.precondition.outputs.updated != '' }} if: ${{ needs.precondition.outputs.updated != '' }}
environment: beta environment: beta
@@ -40,14 +41,14 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt-get update -y sudo apt-get update -y
apt-get install -y ninja-build sudo apt-get install -y ninja-build
- name: Install Google SDK - name: Install Google SDK
uses: google-github-actions/setup-gcloud@v0 uses: google-github-actions/setup-gcloud@v0
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
@@ -72,6 +73,10 @@ jobs:
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }} SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }} RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Compile - name: Compile
shell: bash shell: bash
working-directory: android working-directory: android
@@ -84,7 +89,7 @@ jobs:
run: | run: |
gcloud auth activate-service-account --key-file android/app/firebase-test-lab.json gcloud auth activate-service-account --key-file android/app/firebase-test-lab.json
gcloud config set project omapsapp gcloud config set project omapsapp
gcloud firebase test android run --app ./android/app/build/outputs/apk/google/beta/CoMaps-*-google-beta.apk \ gcloud firebase test android run --app ./android/app/build/outputs/apk/google/beta/OrganicMaps-*-google-beta.apk \
--device model=husky,version=34 \ --device model=husky,version=34 \
--device model=tangorpro,version=33,orientation=landscape \ --device model=tangorpro,version=33,orientation=landscape \
--device model=bluejay,version=32 \ --device model=bluejay,version=32 \

View File

@@ -2,21 +2,29 @@ name: Android Release Metadata
on: on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs: jobs:
android-release-metadata: android-release-metadata:
name: Upload Google Play metadata name: Upload Google Play metadata
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: runmymind/docker-android-sdk:latest
environment: production environment: production
steps: steps:
- name: Checkout sources - name: Checkout sources
# TODO: use shallow (and sparse?) checkout uses: actions/checkout@v4
uses: https://github.com/actions/checkout@v4
# - name: Parallel submodules checkout - name: Parallel submodules checkout
# shell: bash shell: bash
# run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Checkout screenshots
uses: actions/checkout@v4
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: main
path: screenshots
- name: Restore release keys - name: Restore release keys
shell: bash shell: bash
@@ -29,6 +37,6 @@ jobs:
- name: Upload - name: Upload
shell: bash shell: bash
run: ./gradlew publishGoogleReleaseListing run: ./gradlew prepareGoogleReleaseListing publishGoogleReleaseListing
working-directory: android working-directory: android
timeout-minutes: 5 timeout-minutes: 5

View File

@@ -5,6 +5,7 @@ on:
env: env:
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
FDROID_VERSION: android/app/src/fdroid/play/version.yaml FDROID_VERSION: android/app/src/fdroid/play/version.yaml
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs: jobs:
tag: tag:
@@ -13,7 +14,7 @@ jobs:
environment: production environment: production
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # Enough to get all commits for the last day. fetch-depth: 100 # Enough to get all commits for the last day.
ssh-key: ${{ secrets.RELEASE_SSH_KEY }} ssh-key: ${{ secrets.RELEASE_SSH_KEY }}
@@ -71,11 +72,11 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt-get update -y sudo apt-get update -y
apt-get install -y cmake ninja-build sudo apt-get install -y ninja-build
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
ref: 'refs/tags/${{ needs.tag.outputs.tag }}' ref: 'refs/tags/${{ needs.tag.outputs.tag }}'
@@ -92,7 +93,7 @@ jobs:
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Checkout screenshots - name: Checkout screenshots
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
repository: ${{ secrets.SCREENSHOTS_REPO }} repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }} ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
@@ -116,13 +117,15 @@ jobs:
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }} SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }} RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Set up SDK - name: Set up SDK
shell: bash shell: bash
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
- name: Compile and upload to Google Play - name: Compile and upload to Google Play
container:
image: runmymind/docker-android-sdk:latest
shell: bash shell: bash
working-directory: android working-directory: android
run: | run: |
@@ -130,8 +133,6 @@ jobs:
if: ${{ matrix.flavor == 'google' }} if: ${{ matrix.flavor == 'google' }}
- name: Compile and upload to Huawei AppGallery - name: Compile and upload to Huawei AppGallery
container:
image: runmymind/docker-android-sdk:latest
shell: bash shell: bash
working-directory: android working-directory: android
run: | run: |
@@ -140,8 +141,6 @@ jobs:
if: ${{ matrix.flavor == 'huawei' }} if: ${{ matrix.flavor == 'huawei' }}
- name: Compile universal APK - name: Compile universal APK
container:
image: runmymind/docker-android-sdk:latest
shell: bash shell: bash
working-directory: android working-directory: android
run: | run: |
@@ -152,16 +151,16 @@ jobs:
if: ${{ matrix.flavor == 'web' }} if: ${{ matrix.flavor == 'web' }}
shell: bash shell: bash
run: | run: |
(cd ./android/app/build/outputs/apk/web/release/ && sha256sum CoMaps-${{ needs.tag.outputs.code }}-web-release.apk > CoMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum) (cd ./android/app/build/outputs/apk/web/release/ && sha256sum OrganicMaps-${{ needs.tag.outputs.code }}-web-release.apk > OrganicMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum)
{ {
cat ${{ env.RELEASE_NOTES }} cat ${{ env.RELEASE_NOTES }}
echo "" echo ""
echo "See [a detailed announce](https://comaps.app/news/) on our website when app updates are published in all stores." echo "See [a detailed announce](https://organicmaps.app/news/) on our website when app updates are published in all stores."
echo "You can get automatic app updates from Codeberg [using Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps)." echo "You can get automatic app updates from Codeberg [using Obtainium](https://codeberg.org/comaps/comaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
echo "" echo ""
echo "sha256sum:" echo "sha256sum:"
echo -e '\n```' echo -e '\n```'
tr -d '\n' < ./android/app/build/outputs/apk/web/release/CoMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum tr -d '\n' < ./android/app/build/outputs/apk/web/release/OrganicMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum
echo -e '\n```' echo -e '\n```'
} > ${{ runner.temp }}/release-notes.txt } > ${{ runner.temp }}/release-notes.txt
@@ -176,6 +175,6 @@ jobs:
discussion_category_name: 'Announcements' discussion_category_name: 'Announcements'
prerelease: true prerelease: true
files: | files: |
./android/app/build/outputs/apk/web/release/CoMaps-${{ needs.tag.outputs.code }}-web-release.apk ./android/app/build/outputs/apk/web/release/OrganicMaps-${{ needs.tag.outputs.code }}-web-release.apk
./android/app/build/outputs/apk/web/release/CoMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum ./android/app/build/outputs/apk/web/release/OrganicMaps-${{ needs.tag.outputs.code }}-web-release.apk.sha256sum
fail_on_unmatched_files: true fail_on_unmatched_files: true

View File

@@ -3,34 +3,38 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
pull_request: pull_request:
paths: paths:
- packaging/app.comaps.desktop.metainfo.xml - packaging/app.organicmaps.desktop.metainfo.xml
- .forgejo/workflows/appstream-check.yaml # Run check on self change - .forgejo/workflows/appstream-check.yaml # Run check on self change
jobs: jobs:
validate-appstream: validate-appstream:
name: Validate appstream metadata xml name: Validate appstream metadata xml
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
sparse-checkout: | sparse-checkout: |
packaging/app.comaps.desktop.metainfo.xml packaging/app.organicmaps.desktop.metainfo.xml
- name: Install appstream validator and flatpak Builder - name: Install appstream validator and flatpak Builder
shell: bash shell: bash
run: | run: |
apt update -y sudo apt update -y
apt install -y \ sudo apt install -y \
flatpak flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install -y org.flatpak.Builder sudo flatpak install -y org.freedesktop.appstream-glib org.flatpak.Builder
- name: Validate appstream data
shell: bash
run: flatpak run org.freedesktop.appstream-glib validate --nonet packaging/app.organicmaps.desktop.metainfo.xml
- name: Lint appstream data with flatpak Builder - name: Lint appstream data with flatpak Builder
shell: bash shell: bash
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.comaps.desktop.metainfo.xml run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.organicmaps.desktop.metainfo.xml
- name: Run appstreamcli in pedantic mode - name: Run appstreamcli in pedantic mode
shell: bash shell: bash
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.comaps.desktop.metainfo.xml run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.organicmaps.desktop.metainfo.xml

View File

@@ -33,7 +33,7 @@ concurrency:
jobs: jobs:
should-run-check: should-run-check:
name: Should run coverage name: Should run coverage
runs-on: ubuntu-latest runs-on: ubuntu-24.04
outputs: outputs:
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }} run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }} manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
@@ -59,11 +59,16 @@ jobs:
coverage: coverage:
needs: should-run-check needs: should-run-check
name: Generate coverage report name: Generate coverage report
runs-on: ubuntu-latest runs-on: ubuntu-24.04
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}} if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
steps: steps:
- name: Free disk space by removing .NET, Android and Haskell
shell: bash
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
@@ -74,8 +79,8 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt update -y sudo apt update -y
apt install -y \ sudo apt install -y \
ninja-build \ ninja-build \
libgl1-mesa-dev \ libgl1-mesa-dev \
libglvnd-dev \ libglvnd-dev \
@@ -89,8 +94,12 @@ jobs:
llvm \ llvm \
gcovr gcovr
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache - name: Configure ccache
uses: https://github.com/hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:
key: ${{ github.workflow }}-coverage key: ${{ github.workflow }}-coverage
@@ -124,15 +133,15 @@ jobs:
# world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215 # world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215
CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests" CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
run: | run: |
locale-gen en_US sudo locale-gen en_US
locale-gen en_US.UTF-8 sudo locale-gen en_US.UTF-8
locale-gen es_ES sudo locale-gen es_ES
locale-gen es_ES.UTF-8 sudo locale-gen es_ES.UTF-8
locale-gen fr_FR sudo locale-gen fr_FR
locale-gen fr_FR.UTF-8 sudo locale-gen fr_FR.UTF-8
locale-gen ru_RU sudo locale-gen ru_RU
locale-gen ru_RU.UTF-8 sudo locale-gen ru_RU.UTF-8
update-locale sudo update-locale
ctest -L "omim-test" -E "$CTEST_EXCLUDE_REGEX" --output-on-failure ctest -L "omim-test" -E "$CTEST_EXCLUDE_REGEX" --output-on-failure
- name: Run coverage report generation - name: Run coverage report generation

View File

@@ -1,8 +0,0 @@
name: dco
on: [pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: https://github.com/KineticCafe/actions-dco@v1

View File

@@ -3,28 +3,28 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
pull_request: pull_request:
paths: paths:
- qt/res/app.comaps.desktop.desktop - qt/res/app.organicmaps.desktop.desktop
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change - .forgejo/workflows/desktop-file-check.yaml # Run check on self change
jobs: jobs:
validate-desktop-file: validate-desktop-file:
name: Validate .desktop file name: Validate .desktop file
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
sparse-checkout: | sparse-checkout: |
qt/res/app.comaps.desktop.desktop qt/res/app.organicmaps.desktop.desktop
- name: Install desktop-file-validate tool - name: Install desktop-file-validate tool
shell: bash shell: bash
run: | run: |
apt update -y sudo apt update -y
apt install -y \ sudo apt install -y \
desktop-file-utils desktop-file-utils
- name: Validate desktop file - name: Validate desktop file
shell: bash shell: bash
run: desktop-file-validate qt/res/app.comaps.desktop.desktop && echo "Successfully validated .desktop file" run: desktop-file-validate qt/res/app.organicmaps.desktop.desktop && echo "Successfully validated .desktop file"

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
paths-ignore: paths-ignore:
- .gitignore - .gitignore
- .forgejo/** - .forgejo/**
@@ -45,7 +45,7 @@ jobs:
shell: bash shell: bash
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
@@ -66,6 +66,10 @@ jobs:
CERTIFICATES_DEV_P12: ${{ secrets.CERTIFICATES_DEV_P12 }} CERTIFICATES_DEV_P12: ${{ secrets.CERTIFICATES_DEV_P12 }}
CERTIFICATES_DISTR_P12: ${{ secrets.CERTIFICATES_DISTR_P12 }} CERTIFICATES_DISTR_P12: ${{ secrets.CERTIFICATES_DISTR_P12 }}
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Compile and upload to TestFlight - name: Compile and upload to TestFlight
run: | run: |
echo "IOS_VERSION=$(../tools/unix/version.sh ios_version)-$(../tools/unix/version.sh ios_build)" >> "$GITHUB_ENV" echo "IOS_VERSION=$(../tools/unix/version.sh ios_version)-$(../tools/unix/version.sh ios_build)" >> "$GITHUB_ENV"

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 1 fetch-depth: 1
sparse-checkout: | sparse-checkout: |

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
pull_request: pull_request:
paths-ignore: paths-ignore:
- .gitignore - .gitignore
@@ -41,7 +41,7 @@ jobs:
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII. LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
LANGUAGE: en_US.UTF-8 LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8 LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results TEST_RESULTS_BUNDLE_NAME: OMaps-Test-Results
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -53,12 +53,16 @@ jobs:
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
- name: Parallel submodules checkout - name: Parallel submodules checkout
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure XCode cache - name: Configure XCode cache
uses: irgaly/xcode-cache@v1 uses: irgaly/xcode-cache@v1
with: with:
@@ -70,8 +74,8 @@ jobs:
shell: bash shell: bash
run: | run: |
xcodebuild test \ xcodebuild test \
-workspace xcode/CoMaps.xcworkspace \ -workspace xcode/omim.xcworkspace \
-scheme CoMaps \ -scheme OMaps \
-configuration Debug \ -configuration Debug \
-sdk iphonesimulator \ -sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
@@ -93,10 +97,10 @@ jobs:
shell: bash shell: bash
run: | run: |
xcodebuild build \ xcodebuild build \
-workspace xcode/CoMaps.xcworkspace \ -workspace xcode/omim.xcworkspace \
-scheme CoMaps \ -scheme OMaps \
-configuration Release \ -configuration Release \
-destination 'generic/platform=iOS' \ -destination 'generic/platform=iOS' \
-quiet \ -quiet \
CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO CODE_SIGNING_ALLOWED=NO

View File

@@ -14,7 +14,7 @@ jobs:
environment: production environment: production
steps: steps:
- name: Checkout - name: Checkout
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
- name: Restore release keys - name: Restore release keys
shell: bash shell: bash
@@ -25,7 +25,7 @@ jobs:
APPSTORE_JSON: ${{ secrets.APPSTORE_JSON }} APPSTORE_JSON: ${{ secrets.APPSTORE_JSON }}
- name: Checkout screenshots - name: Checkout screenshots
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
repository: ${{ secrets.SCREENSHOTS_REPO }} repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }} ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
@@ -33,7 +33,7 @@ jobs:
path: screenshots path: screenshots
- name: Checkout keywords - name: Checkout keywords
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
repository: ${{ secrets.KEYWORDS_REPO }} repository: ${{ secrets.KEYWORDS_REPO }}
ssh-key: ${{ secrets.KEYWORDS_SSH_KEY }} ssh-key: ${{ secrets.KEYWORDS_SSH_KEY }}

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
pull_request: pull_request:
paths-ignore: paths-ignore:
- .gitignore - .gitignore
@@ -31,15 +31,20 @@ on:
jobs: jobs:
linux-no-unity: linux-no-unity:
name: Linux no unity build name: Linux no unity build
runs-on: ubuntu-latest runs-on: ubuntu-24.04
# Cancels previous jobs if the same branch or PR was updated again. # Cancels previous jobs if the same branch or PR was updated again.
concurrency: concurrency:
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Free disk space by removing .NET, Android and Haskell
shell: bash
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 100 # enough to get all commits for the current day fetch-depth: 100 # enough to get all commits for the current day
@@ -50,10 +55,9 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt update -y sudo apt update -y
apt install -y \ sudo apt install -y \
ninja-build \ ninja-build \
cmake \
libgl1-mesa-dev \ libgl1-mesa-dev \
libglvnd-dev \ libglvnd-dev \
libharfbuzz-dev \ libharfbuzz-dev \
@@ -67,8 +71,12 @@ jobs:
libqt6positioning6-plugins \ libqt6positioning6-plugins \
libqt6positioning6 libqt6positioning6
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache - name: Configure ccache
uses: https://github.com/hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:
key: ${{ github.workflow }}-no-unity key: ${{ github.workflow }}-no-unity
@@ -82,7 +90,7 @@ jobs:
# -g1 should slightly reduce build time. # -g1 should slightly reduce build time.
run: | run: |
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug \ cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS=-g1 -DCMAKE_UNITY_BUILD=OFF -DCMAKE_CXX_FLAGS=-g1 -DUNITY_DISABLE=ON
- name: Compile - name: Compile
shell: bash shell: bash
@@ -91,7 +99,7 @@ jobs:
linux-matrix: linux-matrix:
name: Linux builds and tests name: Linux builds and tests
runs-on: ubuntu-latest runs-on: ubuntu-24.04
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -103,8 +111,13 @@ jobs:
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Free disk space by removing .NET, Android and Haskell
shell: bash
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
- name: Parallel submodules checkout - name: Parallel submodules checkout
shell: bash shell: bash
@@ -113,8 +126,8 @@ jobs:
- name: Install build tools and dependencies - name: Install build tools and dependencies
shell: bash shell: bash
run: | run: |
apt update -y sudo apt update -y
apt install -y \ sudo apt install -y \
ninja-build \ ninja-build \
libgl1-mesa-dev \ libgl1-mesa-dev \
libglvnd-dev \ libglvnd-dev \
@@ -129,8 +142,12 @@ jobs:
libqt6positioning6-plugins \ libqt6positioning6-plugins \
libqt6positioning6 libqt6positioning6
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache - name: Configure ccache
uses: https://github.com/hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }} key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
@@ -165,13 +182,13 @@ jobs:
# world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215 # world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215
CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests" CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
run: | run: |
locale-gen en_US sudo locale-gen en_US
locale-gen en_US.UTF-8 sudo locale-gen en_US.UTF-8
locale-gen es_ES sudo locale-gen es_ES
locale-gen es_ES.UTF-8 sudo locale-gen es_ES.UTF-8
locale-gen fr_FR sudo locale-gen fr_FR
locale-gen fr_FR.UTF-8 sudo locale-gen fr_FR.UTF-8
locale-gen ru_RU sudo locale-gen ru_RU
locale-gen ru_RU.UTF-8 sudo locale-gen ru_RU.UTF-8
update-locale sudo update-locale
ctest -L "omim-test" -E "$CTEST_EXCLUDE_REGEX" --output-on-failure ctest -L "omim-test" -E "$CTEST_EXCLUDE_REGEX" --output-on-failure

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
push: push:
branches: branches:
- fix-ci - main
pull_request: pull_request:
paths-ignore: paths-ignore:
- .gitignore - .gitignore
@@ -46,7 +46,7 @@ jobs:
steps: steps:
- name: Checkout sources - name: Checkout sources
uses: https://github.com/actions/checkout@v4 uses: actions/checkout@v4
- name: Parallel submodules checkout - name: Parallel submodules checkout
shell: bash shell: bash
@@ -57,6 +57,10 @@ jobs:
run: | run: |
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Configure ccache - name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:

View File

@@ -7,7 +7,6 @@ on:
env: env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
SKIP_MAP_DOWNLOAD: true
jobs: jobs:
lint: lint:
@@ -23,6 +22,10 @@ jobs:
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Lint - name: Lint
shell: bash shell: bash
working-directory: android working-directory: android
@@ -73,6 +76,14 @@ jobs:
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Generate symbols
shell: bash
run: ./tools/unix/generate_symbols.sh
- name: Configure ccache - name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:

View File

@@ -1,43 +0,0 @@
name: clang-format
on:
push:
branches: [ master ]
paths:
- 'android/app/src/**.java'
- '.clang-format'
- '.github/workflows/clang-format.yml'
pull_request:
branches: [ master ]
paths:
- 'android/app/src/**.java'
- '.clang-format'
- '.github/workflows/clang-format.yml'
jobs:
check-formatting:
runs-on: ubuntu-latest
continue-on-error: true # TODO(AB): Remove this line when ready to enforce formatting.
steps:
- uses: actions/checkout@v4
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get install -y clang-format-19
clang-format-19 --version
- name: Check Java formatting
run: |
JAVA_FILES=($(find android/app/src -name '*.java'))
FORMATTING_ISSUES=$(clang-format-19 --dry-run --Werror $JAVA_FILES 2>&1 || true)
if [ -n "$FORMATTING_ISSUES" ]; then
echo "$FORMATTING_ISSUES"
echo ""
echo "To fix formatting, please run:"
echo " clang-format -i <file>"
exit 1
fi

View File

@@ -15,7 +15,6 @@ jobs:
LANGUAGE: en_US.UTF-8 LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8 LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
SIMULATOR_DEVICE: 'iPhone 16 Pro Max'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -29,6 +28,8 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
brew install qt \ brew install qt \
freetype \
harfbuzz \
optipng optipng
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -37,6 +38,20 @@ jobs:
shell: bash shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20)) run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
- name: Configure repository
shell: bash
run: ./configure.sh
- name: Download MWM files
shell: bash
run: |
wget https://cdn.comaps.app/maps/latest/World.mwm -P ./data/
wget https://cdn.comaps.app/maps/latest/WorldCoasts.mwm -P ./data/
- name: Generate symbols
shell: bash
run: ./tools/unix/generate_symbols.sh
- name: Configure XCode cache - name: Configure XCode cache
uses: irgaly/xcode-cache@v1 uses: irgaly/xcode-cache@v1
with: with:
@@ -47,15 +62,12 @@ jobs:
if: matrix.buildType == 'Debug' if: matrix.buildType == 'Debug'
shell: bash shell: bash
run: | run: |
# Start sim before the build to make sure it's booted when tests start.
xcrun simctl boot "${{ env.SIMULATOR_DEVICE }}" || true
xcrun simctl bootstatus "${{ env.SIMULATOR_DEVICE }}" -b
xcodebuild test \ xcodebuild test \
-workspace xcode/CoMaps.xcworkspace \ -workspace xcode/omim.xcworkspace \
-scheme CoMaps \ -scheme OMaps \
-configuration Debug \ -configuration Debug \
-sdk iphonesimulator \ -sdk iphonesimulator \
-destination "platform=iOS Simulator,name=${{ env.SIMULATOR_DEVICE }},OS=latest" \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
-quiet \ -quiet \
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \ -resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_REQUIRED=NO \
@@ -74,8 +86,8 @@ jobs:
shell: bash shell: bash
run: | run: |
xcodebuild build \ xcodebuild build \
-workspace xcode/CoMaps.xcworkspace \ -workspace xcode/omim.xcworkspace \
-scheme CoMaps \ -scheme OMaps \
-configuration Release \ -configuration Release \
-destination 'generic/platform=iOS' \ -destination 'generic/platform=iOS' \
-quiet \ -quiet \

10
.gitignore vendored
View File

@@ -26,8 +26,6 @@ data/bookmarks
data/edits.xml data/edits.xml
data/World.mwm data/World.mwm
data/WorldCoasts.mwm data/WorldCoasts.mwm
data/world_mwm/*
data/*_hash
# Compiled Python # Compiled Python
*.pyc *.pyc
@@ -64,7 +62,7 @@ iphone/*/build/*
tools/emacsmode/build tools/emacsmode/build
**/DerivedData/* **/DerivedData/*
**/xcshareddata/* **/xcshareddata/*
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/CoMaps.xcscheme !iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme
**/xcuserdata **/xcuserdata
**/xcschemes **/xcschemes
iphone/**/*.moved-aside iphone/**/*.moved-aside
@@ -189,3 +187,9 @@ tools/unix/maps/settings.sh
# VS Code # VS Code
.vscode .vscode
.cache .cache
# AppStore metadata
screenshots/
android/src/google/play/listings/
keywords/
iphone/metadata/**/keywords.txt

8
.gitmodules vendored
View File

@@ -1,12 +1,12 @@
[submodule "tools/osmctools"] [submodule "tools/osmctools"]
path = tools/osmctools path = tools/osmctools
url = https://github.com/organicmaps/osmctools.git url = https://git.omaps.dev/organicmaps/osmctools.git
[submodule "tools/kothic"] [submodule "tools/kothic"]
path = tools/kothic path = tools/kothic
url = https://codeberg.org/comaps/kothic.git url = https://git.omaps.dev/organicmaps/kothic.git
[submodule "3party/protobuf/protobuf"] [submodule "3party/protobuf/protobuf"]
path = 3party/protobuf/protobuf path = 3party/protobuf/protobuf
url = https://codeberg.org/comaps/protobuf.git url = https://git.omaps.dev/organicmaps/protobuf.git
[submodule "3party/Vulkan-Headers"] [submodule "3party/Vulkan-Headers"]
path = 3party/Vulkan-Headers path = 3party/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git url = https://github.com/KhronosGroup/Vulkan-Headers.git
@@ -17,7 +17,7 @@
ignore = dirty ignore = dirty
[submodule "3party/just_gtfs"] [submodule "3party/just_gtfs"]
path = 3party/just_gtfs path = 3party/just_gtfs
url = https://github.com/organicmaps/just_gtfs.git url = https://git.omaps.dev/organicmaps/just_gtfs.git
branch = for-usage-as-submodule branch = for-usage-as-submodule
[submodule "3party/expat"] [submodule "3party/expat"]
path = 3party/expat path = 3party/expat

View File

@@ -31,10 +31,9 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
set(JANSSON_WITHOUT_TESTS ON) set(JANSSON_WITHOUT_TESTS ON)
add_subdirectory(jansson/jansson/) add_subdirectory(jansson/jansson/)
target_include_directories(jansson INTERFACE "${PROJECT_BINARY_DIR}/3party/jansson/jansson/include") target_include_directories(jansson INTERFACE "${PROJECT_BINARY_DIR}/3party/jansson/jansson/include")
add_library(jansson::jansson ALIAS jansson)
# Add gflags library. # Add gflags library.
set(GFLAGS_BUILD_TESTING OFF)
set(GFLAGS_BUILD_PACKAGING OFF)
add_subdirectory(gflags) add_subdirectory(gflags)
target_compile_options(gflags_nothreads_static PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-subobject-linkage>) target_compile_options(gflags_nothreads_static PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-subobject-linkage>)

View File

@@ -11,28 +11,11 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
# Disable build-id generation to make builds reproducible.
if (NOT APPLE)
add_link_options("LINKER:--build-id=none")
endif()
# Fixes warning ld: warning: ignoring duplicate libraries on Mac and Windows. # Fixes warning ld: warning: ignoring duplicate libraries on Mac and Windows.
if (POLICY CMP0156) if (POLICY CMP0156)
cmake_policy(SET CMP0156 NEW) cmake_policy(SET CMP0156 NEW)
endif() endif()
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
include(OmimPlatform)
include(OmimOptions)
include(OmimConfig)
include(OmimHelpers)
include(OmimTesting)
if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android)) if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
# OBJC/OBJCXX are needed to skip m/mm files in Unity builds. # OBJC/OBJCXX are needed to skip m/mm files in Unity builds.
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963 # https://gitlab.kitware.com/cmake/cmake/-/issues/21963
@@ -48,18 +31,26 @@ if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden) set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
endif() endif()
execute_process(COMMAND "./configure.sh" WORKING_DIRECTORY ${OMIM_ROOT})
message(STATUS "Using compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") message(STATUS "Using compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
if (CMAKE_UNITY_BUILD) option(COVERAGE_REPORT "Configure for coverage report" OFF)
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, use -DCMAKE_UNITY_BUILD=OFF to disable it.")
option(UNITY_DISABLE "Disable unity build" OFF)
if (NOT UNITY_DISABLE AND NOT DEFINED ENV{UNITY_DISABLE})
set(CMAKE_UNITY_BUILD ON)
if (DEFINED ENV{UNITY_BUILD_BATCH_SIZE})
set(CMAKE_UNITY_BUILD_BATCH_SIZE $ENV{UNITY_BUILD_BATCH_SIZE})
else()
set(CMAKE_UNITY_BUILD_BATCH_SIZE 50)
endif()
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, export UNITY_DISABLE=1 or use -DUNITY_DISABLE=ON to disable it.")
endif() endif()
if (USE_CCACHE) option(CCACHE_DISABLE "Disable ccache" OFF)
if (NOT CCACHE_DISABLE AND NOT DEFINED ENV{CCACHE_DISABLE})
find_program(CCACHE_PROGRAM ccache HINTS /usr/local/bin/) find_program(CCACHE_PROGRAM ccache HINTS /usr/local/bin/)
if (CCACHE_PROGRAM) if (CCACHE_PROGRAM)
message(STATUS "Using ccache, use -DUSE_CCACHE=OFF to disable it.") message(STATUS "Using ccache, export CCACHE_DISABLE=1 or use -DCCACHE_DISABLE=ON to disable it.")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}") set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
@@ -67,13 +58,44 @@ if (USE_CCACHE)
endif() endif()
endif() endif()
option(COLORS_DISABLE "Disable colored compiler output" OFF)
if (NOT DEFINED ENV{COLORS_DISABLE} AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
message(STATUS "export COLORS_DISABLE=1 or use -DCOLORS_DISABLE=ON to disable colored compiler output.")
add_compile_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
add_link_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
endif()
option(WITH_SYSTEM_PROVIDED_3PARTY "Enable compilation with system provided dependencies" OFF)
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
include(OmimHelpers)
include(OmimTesting)
set(PLATFORM_DESKTOP TRUE)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(PLATFORM_LINUX TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(PLATFORM_MAC TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(PLATFORM_WIN TRUE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Android")
set(PLATFORM_ANDROID TRUE)
set(PLATFORM_DESKTOP FALSE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(PLATFORM_IPHONE TRUE)
set(PLATFORM_DESKTOP FALSE)
else()
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
endif()
if(${PLATFORM_MAC}) if(${PLATFORM_MAC})
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
# Metal language support # Metal language support
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake) list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
include(CheckLanguage) include(CheckLanguage)
include(CMakeMetalInformation)
include(MetalShaderSupport) include(MetalShaderSupport)
check_language(Metal) check_language(Metal)
if(CMAKE_Metal_COMPILER) if(CMAKE_Metal_COMPILER)
@@ -81,6 +103,23 @@ if(${PLATFORM_MAC})
endif() endif()
endif() endif()
# Sanitizer
if (PLATFORM_DESKTOP)
# https://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
set(BUILD_WITH_SANITIZER None CACHE STRING "Set to 'address' or others to enable sanitizer")
if (NOT ${BUILD_WITH_SANITIZER} MATCHES "None")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
message(STATUS "Enable sanitizer: ${BUILD_WITH_SANITIZER}")
endif()
endif()
# Set build type:
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
# Global compile options for all configurations. # Global compile options for all configurations.
if (MSVC) if (MSVC)
add_compile_options(/utf-8) add_compile_options(/utf-8)
@@ -105,30 +144,105 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel") elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
add_definitions(-DRELEASE) add_definitions(-DRELEASE)
if (NOT MSVC) if (NOT MSVC)
add_compile_options(-Ofast $<$<CXX_COMPILER_ID:GNU>:-flto=auto>) # Also enables -ffast-math add_compile_options(-Ofast) # Also enables -ffast-math
endif() endif()
else() else()
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE}) message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
endif() endif()
if (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
add_compile_options(-fno-omit-frame-pointer)
endif()
# Linux GCC LTO plugin fix.
if (PLATFORM_LINUX AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_BUILD_TYPE MATCHES "^Rel"))
# To force errors if LTO was not enabled.
add_compile_options(-fno-fat-lto-objects)
# To fix ar and ranlib "plugin needed to handle lto object".
string(REGEX MATCH "[0-9]+" GCC_MAJOR_VERSION ${CMAKE_CXX_COMPILER_VERSION})
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}/liblto_plugin.so)
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
endif()
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
# End of setting build type
# Options
# Call `make package` after cmake to build design tool.
option(BUILD_DESIGNER "Build application as design tool" OFF)
if (BUILD_DESIGNER)
message(STATUS "Designer tool building is enabled")
add_definitions(-DBUILD_DESIGNER)
endif()
option(BUILD_STANDALONE "Build standalone application" OFF)
if (BUILD_STANDALONE)
message(STATUS "Standalone building is enabled")
add_definitions(-DBUILD_STANDALONE)
endif()
option(USE_ASAN "Enable Address Sanitizer" OFF)
option(USE_TSAN "Enable Thread Sanitizer" OFF)
option(USE_LIBFUZZER "Enable LibFuzzer" OFF)
option(PYBINDINGS "Create makefiles for building python bindings" OFF)
option(SKIP_QT_GUI "Skip building of Qt GUI" OFF)
option(USE_PCH "Use precompiled headers" OFF)
option(NJOBS "Number of parallel processes" OFF)
option(ENABLE_VULKAN_DIAGNOSTICS "Enable Vulkan diagnostics" OFF)
option(ENABLE_TRACE "Enable Tracing" OFF)
if (NJOBS)
message(STATUS "Number of parallel processes: ${NJOBS}")
set(CMAKE_JOB_POOLS custom=${NJOBS})
set(CMAKE_JOB_POOL_COMPILE custom)
set(CMAKE_JOB_POOL_LINK custom)
set(CMAKE_JOB_POOL_PRECOMPILE_HEADER custom)
endif()
# GCC 10.0 is required to support <charconv> header inclusion in base/string_utils.hpp
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
message(FATAL_ERROR "Minimum supported g++ version is 10.0, yours is ${CMAKE_CXX_COMPILER_VERSION}")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(PCH_EXTENSION "pch")
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(PCH_EXTENSION "gch")
endif()
if (PLATFORM_LINUX)
option(USE_PPROF "Enable Google Profiler" OFF)
endif()
if (USE_ASAN)
message(STATUS "Address Sanitizer is enabled")
endif()
if (USE_TSAN)
message(STATUS "Thread Sanitizer is enabled")
endif()
if (USE_ASAN AND USE_TSAN)
message(FATAL_ERROR "Can't use two different sanitizers together")
endif()
if (USE_LIBFUZZER)
message(STATUS "LibFuzzer is enabled")
endif()
if (USE_PPROF)
message(STATUS "Google Profiler is enabled")
add_definitions(-DUSE_PPROF)
endif()
if (USE_HEAPPROF)
message(STATUS "Heap Profiler is enabled")
endif()
if (ENABLE_VULKAN_DIAGNOSTICS)
message(WARNING "Vulkan diagnostics are enabled. Be aware of performance impact!")
add_definitions(-DENABLE_VULKAN_DIAGNOSTICS)
endif()
if (ENABLE_TRACE)
message(STATUS "Tracing is enabled")
add_definitions(-DENABLE_TRACE)
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Set environment variables
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
if (PLATFORM_LINUX OR PLATFORM_ANDROID) if (PLATFORM_LINUX OR PLATFORM_ANDROID)
find_program(LLD_FOUND ld.lld) find_program(LLD_FOUND ld.lld)
@@ -186,6 +300,28 @@ endif()
# To allow #include "base/file_name.hpp" in all sources. # To allow #include "base/file_name.hpp" in all sources.
include_directories(${CMAKE_HOME_DIRECTORY}) include_directories(${CMAKE_HOME_DIRECTORY})
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (USE_ASAN)
add_compile_options(
"-fsanitize=address"
"-fno-omit-frame-pointer"
)
endif()
if (USE_TSAN)
add_compile_options(
"-fsanitize=thread"
"-fno-omit-frame-pointer"
)
endif()
if (USE_LIBFUZZER)
add_compile_options(
"-fsanitize=fuzzer"
)
endif()
if (USE_PCH) if (USE_PCH)
message(STATUS "Precompiled headers are ON") message(STATUS "Precompiled headers are ON")
set(OMIM_PCH_TARGET_NAME "omim_pch") set(OMIM_PCH_TARGET_NAME "omim_pch")
@@ -261,15 +397,11 @@ if (PLATFORM_DESKTOP)
add_subdirectory(qt) add_subdirectory(qt)
omim_add_tool_subdirectory(skin_generator) omim_add_tool_subdirectory(skin_generator)
endif() endif()
if (GENERATOR_TOOL)
add_compile_options(-march=native -mtune=native)
message(STATUS "target CPU optimizations enabled, produced binaries will NOT work on a different CPU")
endif()
add_subdirectory(dev_sandbox) add_subdirectory(dev_sandbox)
endif() endif()
omim_add_test_subdirectory(qt_tstfrm) omim_add_test_subdirectory(qt_tstfrm)
if (PLATFORM_ANDROID) if (PLATFORM_ANDROID)
add_subdirectory(android/sdk/src/main/cpp) add_subdirectory(android/app/src/main/cpp)
endif() endif()

View File

@@ -7,12 +7,6 @@ CoMaps contributors:
(in alphabetic order) (in alphabetic order)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Bastian Greshake Tzovaras
clover sage
Harry Bond <me@hbond.xyz>
vikiawv
Yannik Bloscheck
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Organic Maps (formerly OMaps) contributors: Organic Maps (formerly OMaps) contributors:
(in alphabetic order) (in alphabetic order)

189
README.md
View File

@@ -1,91 +1,65 @@
<!-- Navigation Bar --> <!--<div align="center">
<p align="center"> <img src="qt/res/logo.png" height="100"/>
<a href="https://codeberg.org/comaps#comaps">Project Intro</a> | </div>-->
<a href="https://codeberg.org/comaps/Governance#comaps-project-governance-docs">Governance</a> |
<a href="https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md">FAQ</a> | <!-- a nav bar -->
<a href="#contributing">Contribute</a> | [Project Intro](https://codeberg.org/comaps#comaps)
<a href="https://www.comaps.app/donate">Donate</a> | | [Governance](https://codeberg.org/comaps/Governance#comaps-project-governance-docs)
<a href="https://codeberg.org/comaps#keep-connected">Keep Connected</a> | [FAQ](https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md)
| [Contribute](#contributing)
| [Donate](https://www.comaps.app/donate)
| [Keep Connected](https://codeberg.org/comaps#keep-connected)
# [CoMaps](https://comaps.app) Hike, Bike, Drive Offline Easy Map Navigation with Privacy
[
![GitHub Actions Workflow Android Status](https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github%2Fworkflows%2Fandroid-check.yaml?style=flat&label=Android%20Build)
](https://github.com/comaps/comaps/actions/workflows/android-check.yaml)
[
![GitHub Actions Workflow iOS Status](https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github%2Fworkflows%2Fios-check.yaml?style=flat&label=iOS%20Build)
](https://github.com/comaps/comaps/actions/workflows/ios-check.yaml)
[
![Donate via OpenCollective](https://img.shields.io/opencollective/all/comaps?color=blue&label=Open%20Collective%20Donors)
](https://opencollective.com/comaps)
[
![Donate via Liberapay](https://img.shields.io/liberapay/patrons/CoMaps.svg?logo=liberapay&label=Liberapay%20Patrons)
](https://liberapay.com/CoMaps)
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org) data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
There are apps for Android and iOS (and ARM macOS).
An alpha linux / macOS Qt desktop version, which is also suitable for linux phones.
**We're working on getting first app releases out soon, please stay tuned!**
<!--
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/comaps/id1567437057)
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps)
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps/)
-->
<p float="left">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.jpg" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.jpg" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.jpg" width="180" />
</p> </p>
<div align="center" > **Offline-focused**: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
<img src="docs/badges/logo.svg" width="150">
</div>
**Respecting Privacy**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
<div align="center"> **Simple and Polished**: essential easy to use features that just work.
<h1><a href="https://comaps.app/">CoMaps</a></h1>
<h2>Hike, Bike, Drive Offline - Easy Map Navigation with Privacy</h2>
</div>
<div align="center">
<p align="center">
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License" style="width: 90%; max-width: 150px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge&color=588157" alt="Android Build Status" style="width: 90%; max-width: 170px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge&color=588157" alt="iOS Build Status" style="width: 90%; max-width: 145px;"/>
</a>
<a href="https://opencollective.com/comaps">
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors" style="width: 90%; max-width: 191px;"/>
</a>
<a href="https://liberapay.com/CoMaps">
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons" style="width: 90%; max-width: 160px;"/>
</a>
</p>
</div>
--- **Saves Your Battery and Space**: Doesnt drain your battery like other navigation apps. Compact maps save precious space on your phone.
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME. **Free and Built by the Community**: People like you helped build the app by adding places to [OpenStreetMap](https://www.openstreetmap.org), testing and giving feedback on features and contributing their development skills and money.
**Available for:** Android, iOS, ARM macOS, and alpha Linux/macOS desktop builds (also usable on Linux phones). **Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.**
<p align="center"> ### Main Features
<a href="https://apps.apple.com/app/comaps/id6747180809">
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
</a>
<a href="https://play.google.com/store/apps/details?id=app.comaps.google">
<img src="docs/badges/google-play.png" alt="Google Play" width="160"/>
</a>
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
</a>
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps">
<img src="docs/badges/obtainium.png" alt="Obtainium" width="160"/>
</a>
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
</a>
</p>
<!-- Screenshots -->
<p align="center">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/5.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/6.png" width="180" />
</p>
---
## ⚡️ Highlights
- **Offline-first**: Navigate without a connection
- **Privacy-respecting**: No tracking, Ads or data collection
- **Lightweight**: Battery- and space-efficient
- **Simple**: Polished, user-focused interface
- **Community-built**: Free, open source, and collaborative
- **Transparent**: Open finances and governance
---
## 🚀 Main Features
- Downloadable detailed maps with places which are not available with Google Maps - Downloadable detailed maps with places which are not available with Google Maps
@@ -115,52 +89,37 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
- Android Auto and CarPlay support - Android Auto and CarPlay support
***Freedom Is Here Navigate the world with privacy and community at the forefront.*** *Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!*
--- ## Contributing
## 🤝 Contributing
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help. You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md) If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can help in many ways, the ability to code is not necessary.
> [!NOTE]
> Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
There is a dedicated Zulip chat for active contributors: [Zulip](https://comaps.zulipchat.com) Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
--- There is a dedicated Zulip chat for active contributors: [comaps.zulipchat.com](https://comaps.zulipchat.com)
## 💬 Feedback ### Feedback
- Rate us on [App Store](https://apps.apple.com/app/comaps/id6747180809) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google) <!-- uncomment when linked resources are ready
- Star our repos on Codeberg - **Rate us on the [App Store](https://apps.apple.com/app/comaps/id1567437057)
- Report bugs or request features on the [issue tracker](https://codeberg.org/comaps/comaps/issues) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps)**. -->
- Star our repos on Codeberg
- Report bugs and discuss features at [the issue tracker](https://codeberg.org/comaps/comaps/issues)
--- ## How is development funded?
## 💸 Funding The app is free for everyone, so we rely on donations. Please [donate](https://opencollective.com/comaps/donate) to support the CoMaps community and see this open project thrive!
CoMaps is free. To stay that way, it relies on your support.
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps). The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
--- ## License and Copyright
## 🔒 Privacy Licensed under the Apache License, Version 2.0. See
[LICENSE](LICENSE),
The Android app has been reviewed by [Exodus Privacy](https://reports.exodus-privacy.eu.org/en/reports/app.comaps.google/latest/). [NOTICE](NOTICE)
and [data/copyright.html](data/copyright.html)
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints: for more information.
```
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
```
---
## ⚖️ License
Licensed under the Apache License 2.0.
See [LICENSE](LICENSE), [NOTICE](NOTICE), and [data/copyright.html](data/copyright.html).

12
android/.idea/icon.svg generated
View File

@@ -1,4 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64pt" height="64pt" viewBox="0 0 835 835"> <?xml version="1.0" encoding="UTF-8"?>
<path d="M698.5 141.1a20 20 0 0 1 30.8-1.3A416 416 0 0 1 835 417.4a416 416 0 0 1-93.3 263 20 20 0 0 1-31.3-.6l-43-56.6a20 20 0 0 1-.2-24 307 307 0 0 0 59.3-181.8c0-74.2-26.2-142.3-69.9-195.6a20 20 0 0 1-.5-24.8zM260.7 456.4a20 20 0 0 1-7.7-36.7l282-177.4a20 20 0 0 1 29.9 22.7l-97 318.9a20 20 0 0 1-37.5 2.2l-49.2-111.5z" style="fill:#ccdfca"/> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<path d="M626.3 753a20 20 0 0 1-6.2 29.6A416 416 0 0 1 417.5 835 417.7 417.7 0 0 1 0 417.4 417.7 417.7 0 0 1 603.3 43.5a20 20 0 0 1 7 30l-42.4 55.8a20 20 0 0 1-24.2 6.1 307 307 0 0 0-126.2-27 309 309 0 0 0-309 309c0 170.6 138.5 309 309 309a307 307 0 0 0 141.6-34.3 20 20 0 0 1 25.1 5.6z" style="fill:#fefdf6"/> <svg version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
</svg> <g inkscape:groupmode="layer" inkscape:label="Layer 1">
<rect fill="#006c35" fill-opacity="1.0" x="0" y="0" width="1024" height="1024"/>
<path fill="#ffffff" d="m861.3562052 256.9139426c18.220574 48.4374573-79.2585233 166.2022835-172.1806378 196.4226995-168.0803471-58.2153969-173.5457836 39.5504743-311.1096159 132.4296677 162.6149552 112.4329497 332.9737882 24.8856325 329.7844002-85.7673036-127.9956457 73.3254376-208.1650824 81.3238121-254.1719349 79.1032962 154.8710218-30.6636026 322.0404219-125.7633124 357.0667834-165.7616685 0.032202 1.7749817 0.049863 3.5523114 0.049863 5.33456 0 191.0905993-295.1650572 474.6148576-295.1650572 474.6148576s-154.5086464-147.95159-239.9499331-302.4701423c-11.943516-0.1614425-83.8230022 25.9633002-110.3310391-9.051445-29.6082623-39.1049397 80.1693081-170.2028122 175.3699196-209.3102117 170.3563508 77.3261904 263.7351577-123.0971499 317.0292402-134.2068293-158.9688193-94.2135154-316.1183714-55.5493358-333.8847017 84.4353407 88.3675802-50.2172465 196.7775505-78.65765 246.8822227-76.4346744-140.7606999 28.7623957-301.9981102 132.8752019-350.2809443 172.4255642 0-159.041983 132.1505407-287.9677052 295.1650569-287.9677052 96.4018995 0 182.0095151 45.0859887 235.8744518 114.8252613 0.00335 0 96.1884344-31.2834041 109.851981 11.3787329zm-33.7059144 14.218972c-12.6607646-17.2289278-56.7341326 2.8936807-56.7341326 2.8936807 6.1678152 10.3446685 11.7002555 21.0960758 16.5352245 32.2084942 4.8995467 11.2622344 9.0867303 22.8954305 12.5044868 34.8382086 0 0 45.0041042-46.3863227 27.6944213-69.9403835zm-629.5734431 294.3797539c13.6858848 18.6189721 61.3258973-3.1309266 61.3258973-3.1309266-6.6716772-11.1802827-12.6484216-22.8033047-17.8755617-34.8139472-5.2966478-12.1727565-9.8213865-24.7454316-13.5171072-37.6545218 0 0-48.6427553 50.1397674-29.9332284 75.5993956z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 753 B

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -18,4 +18,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
libxi-dev \ libxi-dev \
optipng optipng
WORKDIR /root/comaps WORKDIR /root/comaps
RUN ./configure.sh
RUN ./tools/unix/generate_symbols.sh
CMD ./gradlew -Parm64 assembleFdroidDebug CMD ./gradlew -Parm64 assembleFdroidDebug

View File

@@ -1,8 +1,8 @@
To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug' To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug'
Or to compile a redistributable Fdroid Test apk for testing: './gradlew assembleFdroidBeta' Or to compile a redistributable Fdroid Beta apk for testing: './gradlew assembleFdroidBeta'
Or to build test apks for all flavors: './gradlew assembleBeta' Or to build beta apks for all flavors: './gradlew assembleBeta'
To see all available build targets './gradlew tasks' To see all available build targets './gradlew tasks'

View File

@@ -2,14 +2,14 @@
/nativeOutputs /nativeOutputs
# ignore private keys # ignore private keys
/secure.properties.test /secure.properties
/secure.properties.release /release.keystore
/comaps-test.keystore /secure.properties
/comaps-release.keystore
/libnotify.properties /libnotify.properties
/google-play.json /google-play.json
/huawei-appgallery.json /huawei-appgallery.json
/agconnect-services.json /agconnect-services.json
/src/main/res/xml/network_security_config.xml
# ignore flags symlinks # ignore flags symlinks
/src/main/res/drawable-xhdpi/??.png /src/main/res/drawable-xhdpi/??.png
@@ -24,3 +24,6 @@
/src/main/res/drawable-mdpi/uk_northern_ireland.png /src/main/res/drawable-mdpi/uk_northern_ireland.png
/src/main/res/drawable-mdpi/uk_scotland.png /src/main/res/drawable-mdpi/uk_scotland.png
/src/main/res/drawable-mdpi/uk_wales.png /src/main/res/drawable-mdpi/uk_wales.png
# ignore autogenerated metadata (see prepareGoogleReleaseListing in build.gradle)
/src/google/play/listings

View File

@@ -7,6 +7,7 @@ buildscript {
// Detect flavors from the task name. // Detect flavors from the task name.
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
def isFdroid = taskName.contains('fdroid') def isFdroid = taskName.contains('fdroid')
def isBeta = taskName.contains('beta')
dependencies { dependencies {
classpath libs.android.tools classpath libs.android.tools
@@ -15,17 +16,43 @@ buildscript {
} }
} }
repositories {
google()
mavenCentral()
maven { url 'https://www.jitpack.io' } // MPAndroidChart
}
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'com.github.triplet.play' apply plugin: 'com.github.triplet.play'
apply plugin: 'ru.cian.huawei-publish-gradle-plugin' apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
def run(cmd) {
def stdout = new ByteArrayOutputStream()
exec {
commandLine = cmd
standardOutput = stdout
}
return stdout.toString()
}
import com.github.triplet.gradle.androidpublisher.ReleaseStatus import com.github.triplet.gradle.androidpublisher.ReleaseStatus
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
def getVersion() {
def isWindows = DefaultNativePlatform.getCurrentOperatingSystem().isWindows()
def bash = isWindows ? 'C:\\Program Files\\Git\\bin\\bash.exe' : 'bash'
def versionCode = Integer.parseInt(run([bash, '../../tools/unix/version.sh', 'android_code']).trim())
def versionName = run([bash, '../../tools/unix/version.sh', 'android_name']).trim()
return new Tuple2(versionCode, versionName)
}
def getCommitMessage() { def getCommitMessage() {
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim() return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
} }
def osName = System.properties['os.name'].toLowerCase()
project.ext.appId = 'app.comaps' project.ext.appId = 'app.comaps'
project.ext.appName = 'CoMaps' project.ext.appName = 'CoMaps'
@@ -37,48 +64,87 @@ project.ext.appName = 'CoMaps'
//} //}
android { android {
namespace = 'app.organicmaps' namespace 'app.organicmaps'
// TODO: it should not be here, but in sdk/build.gradle. But for some reason it should be specified here as well.
ndkVersion = '28.2.13676358'
dependenciesInfo {
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
includeInApk = false
// Disables dependency metadata when building Android App Bundles (for Google Play)
includeInBundle = false
}
buildFeatures { buildFeatures {
dataBinding = true dataBinding = true
buildConfig = true buildConfig = true
} }
// Users are complaining that the app should be re-downloaded from the Play Store after changing the language.
bundle {
language {
enableSplit = false
}
}
// All properties are read from gradle.properties file // All properties are read from gradle.properties file
compileSdk = propCompileSdkVersion.toInteger() compileSdk propCompileSdkVersion.toInteger()
ndkVersion '27.2.12479018'
defaultConfig { defaultConfig {
versionCode = rootProject.ext.versionCode // Default package name is taken from the manifest and should be app.comaps
versionName = rootProject.ext.versionName def ver = getVersion()
versionCode = ver.V1
versionName = ver.V2
println('Version: ' + versionName) println('Version: ' + versionName)
println('VersionCode: ' + versionCode) println('VersionCode: ' + versionCode)
minSdk = propMinSdkVersion.toInteger() minSdk propMinSdkVersion.toInteger()
targetSdk = propTargetSdkVersion.toInteger() targetSdk propTargetSdkVersion.toInteger()
applicationId project.ext.appId applicationId project.ext.appId
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"' buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
// Should be customized in flavors. // Should be customized in flavors.
buildConfigField 'String', 'REVIEW_URL', '""' buildConfigField 'String', 'REVIEW_URL', '""'
resourceConfigurations += [project.ext.supportedLocalizations]
base.archivesName = appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode externalNativeBuild {
def pchFlag = 'OFF'
if (project.hasProperty('pch')) pchFlag = 'ON'
ndk.debugSymbolLevel = 'full' def njobs = ''
if (project.hasProperty('njobs')) njobs = project.getProperty('njobs')
def enableVulkanDiagnostics = 'OFF'
if (project.hasProperty('enableVulkanDiagnostics')) {
enableVulkanDiagnostics = project.getProperty('enableVulkanDiagnostics')
}
def enableTrace = 'OFF'
if (project.hasProperty('enableTrace')) {
enableTrace = project.getProperty('enableTrace')
}
cmake {
cppFlags '-fexceptions', '-frtti'
// There is no sense to enable sections without gcc's --gc-sections flag.
cFlags '-fno-function-sections', '-fno-data-sections',
'-Wno-extern-c-compat'
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static',
"-DOS=$osName", '-DSKIP_TESTS=ON', '-DSKIP_TOOLS=ON', "-DUSE_PCH=$pchFlag",
"-DNJOBS=$njobs", "-DENABLE_VULKAN_DIAGNOSTICS=$enableVulkanDiagnostics",
"-DENABLE_TRACE=$enableTrace"
targets 'organicmaps'
}
}
// Use, for example, -Parm32 gradle parameter to build only for armeabi-v7a.
ndk {
abiFilters = new HashSet<>()
if (project.hasProperty('arm32') || project.hasProperty('armeabi-v7a')) {
abiFilters.add('armeabi-v7a')
}
if (project.hasProperty('arm64') || project.hasProperty('arm64-v8a')) {
abiFilters.add('arm64-v8a')
}
if (project.hasProperty('x86')) {
abiFilters.add('x86')
}
if (project.hasProperty('x86_64') || project.hasProperty('x64')) {
abiFilters.add('x86_64')
}
if (abiFilters.isEmpty()) {
abiFilters.add('armeabi-v7a')
abiFilters.add('arm64-v8a')
// For the emulator, chromebooks and some Intel Atom devices.
abiFilters.add('x86_64')
}
println('Building for ' + abiFilters + ' archs.')
}
setProperty('archivesBaseName', appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode)
} }
flavorDimensions += 'default' flavorDimensions += 'default'
@@ -128,10 +194,10 @@ android {
splits.abi { splits.abi {
boolean enabled = project.hasProperty('splitApk') boolean enabled = project.hasProperty('splitApk')
println ('Create separate apks: ' + enabled) println ('Create separate apks: ' + enabled)
enable = enabled enable enabled
reset() reset()
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64' include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
universalApk = true universalApk true
} }
lint { lint {
@@ -144,174 +210,102 @@ android {
disable 'CustomSplashScreen' disable 'CustomSplashScreen'
// https://github.com/organicmaps/organicmaps/issues/3610 // https://github.com/organicmaps/organicmaps/issues/3610
disable 'InsecureBaseConfiguration' disable 'InsecureBaseConfiguration'
abortOnError = true abortOnError true
} }
gradle.projectsEvaluated { gradle.projectsEvaluated {
android.applicationVariants.all { variant -> android.applicationVariants.all { variant ->
def task = variant.name.capitalize() def task = variant.name.capitalize()
project.task(type: Exec, "run${task}", dependsOn: "install${task}") { project.task(type: Exec, "run${task}", dependsOn: "install${task}") {
commandLine android.getAdbExe(), 'shell', 'am', 'start', '-n', "$applicationId/app.organicmaps.DownloadResourcesActivity", '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER' commandLine android.getAdbExe(), 'shell', 'am', 'start', '-n', "$applicationId/app.comaps.DownloadResourcesActivity", '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER'
} }
} }
} }
def secureReleasePropertiesFileExists = file('secure.properties.release').exists() def securityPropertiesFileExists = file('secure.properties').exists()
if (secureReleasePropertiesFileExists) { if (securityPropertiesFileExists) {
apply from: 'secure.properties.release' apply from: 'secure.properties'
}
def secureTestPropertiesFileExists = file('secure.properties.test').exists()
if (secureTestPropertiesFileExists) {
apply from: 'secure.properties.test'
} }
signingConfigs { signingConfigs {
debug { debug {
storeFile file('comaps-debug.keystore') storeFile file('debug.keystore')
storePassword '12345678' storePassword '12345678'
keyAlias 'CoMaps Debug' keyAlias 'debug'
keyPassword '12345678' keyPassword '12345678'
} }
test {
if (secureTestPropertiesFileExists) {
storeFile file(secretTestStoreFile)
storePassword secretTestStorePassword
keyAlias secretTestKeyAlias
keyPassword secretTestKeyPassword
} else {
println('secure.properties.test doesn\'t exist')
}
}
release { release {
if (secureReleasePropertiesFileExists) { if (securityPropertiesFileExists) {
storeFile file(secretReleaseStoreFile) println('The release signing keys are available')
storePassword secretReleaseStorePassword storeFile file(spropStoreFile)
keyAlias secretReleaseKeyAlias storePassword spropStorePassword
keyPassword secretReleaseKeyPassword keyAlias spropKeyAlias
keyPassword spropKeyPassword
} else { } else {
println('secure.properties.release doesn\'t exist') println('The release signing keys are unavailable')
} }
} }
} }
buildTypes { buildTypes {
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
debug { debug {
applicationIdSuffix '.debug' // Allows to install debug and release builds together applicationIdSuffix '.debug' // Allows to install debug and release builds together
versionNameSuffix '-debug' versionNameSuffix '-debug'
jniDebuggable true // Enable jni debug build
zipAlignEnabled true zipAlignEnabled true
signingConfig = signingConfigs.debug signingConfig signingConfigs.debug
resValue 'string', 'app_name', 'CoMaps Debug' resValue 'string', 'app_name', 'CoMaps Debug'
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
ndk.debugSymbolLevel = 'none'
} }
release { release {
if (taskName.contains('release')) { signingConfig signingConfigs.release
if (secureReleasePropertiesFileExists) {
println('Using RELEASE signing keys from secure.properties.release')
signingConfig = signingConfigs.release
} else {
println('NO RELEASE signing keys found')
println('Using DEBUG signing keys')
signingConfig = signingConfigs.debug
}
}
minifyEnabled true minifyEnabled true
shrinkResources = true shrinkResources true
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin. // Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
// To learn more, go to the documentation section about R8 configuration files. // To learn more, go to the documentation section about R8 configuration files.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
resValue 'string', 'app_name', project.ext.appName resValue 'string', 'app_name', project.ext.appName
// Full size symbols are too big for Google, 217mb aab vs 95mb.
ndk.debugSymbolLevel = 'symbol_table'
} }
// TODO(@pastk): rename to "test" everywhere in code
beta { beta {
applicationIdSuffix '.test' applicationIdSuffix '.test'
versionNameSuffix '-test' versionNameSuffix '-test'
if (taskName.contains('beta')) { signingConfig signingConfigs.release
if (secureTestPropertiesFileExists) {
println('Using TEST signing keys from secure.properties.test')
signingConfig = signingConfigs.test
} else {
println('NO TEST signing keys found')
println('Using DEBUG signing keys')
signingConfig = signingConfigs.debug
}
}
minifyEnabled true minifyEnabled true
shrinkResources = true shrinkResources true
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin. // Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
// To learn more, go to the documentation section about R8 configuration files. // To learn more, go to the documentation section about R8 configuration files.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
matchingFallbacks = ['release'] // use dependencies of "release" build type matchingFallbacks = ['release'] // use dependencies of "release" build type
resValue 'string', 'app_name', 'CoMaps Test' resValue 'string', 'app_name', 'CoMaps Test'
// Full size symbols are too big for Google, 217mb aab vs 95mb.
ndk.debugSymbolLevel = 'symbol_table'
}
}
externalNativeBuild {
cmake {
version '3.22.1+'
buildStagingDirectory './nativeOutputs'
path '../../CMakeLists.txt'
} }
} }
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk. // We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers. // TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
androidResources { androidResources {
ignoreAssetsPattern = '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~' ignoreAssetsPattern '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj'] noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
localeFilters += [
"af",
"ar",
"az",
"be",
"bg",
"ca",
"cs",
"da",
"de",
"el",
"en",
"en-rGB",
"es",
"es-rMX",
"et",
"eu",
"fa",
"fi",
"fr",
"fr-rCA",
"iw",
"hi",
"hu",
"in",
"it",
"ja",
"ko",
"lt",
"lv",
"mr",
"mt",
"nb",
"nl",
"pl",
"pt",
"pt-rBR",
"ro",
"ru",
"sk",
"sr",
"sv",
"sw",
"th",
"tr",
"uk",
"vi",
"zh",
"zh-rHK",
"zh-rMO",
"zh-rTW"
]
} }
compileOptions { compileOptions {
coreLibraryDesugaringEnabled = true coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17
@@ -319,8 +313,6 @@ android {
} }
dependencies { dependencies {
implementation project(':sdk')
coreLibraryDesugaring libs.android.tools.desugar coreLibraryDesugaring libs.android.tools.desugar
// Google Play Location Services // Google Play Location Services
@@ -364,6 +356,11 @@ dependencies {
androidTestImplementation libs.androidx.test.junit androidTestImplementation libs.androidx.test.junit
testImplementation libs.junit testImplementation libs.junit
testImplementation libs.mockito.core testImplementation libs.mockito.core
testImplementation libs.mockito.inline
}
tasks.withType(JavaCompile) {
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
} }
android.applicationVariants.all { variant -> android.applicationVariants.all { variant ->
@@ -375,6 +372,32 @@ android.applicationVariants.all { variant ->
variant.resValue 'string', 'app_id', variant.applicationId variant.resValue 'string', 'app_id', variant.applicationId
} }
task prepareGoogleReleaseListing {
// Prepares Google Play metainfo from F-Droid metainfo.
final sourceFlavor = 'fdroid'
final targetFlavor = 'google'
doLast {
final sourceDir = new File("${projectDir}/src/$sourceFlavor/play/listings")
final targetDir = new File("${projectDir}/src/$targetFlavor/play/listings")
final sourceFiles = fileTree(dir: sourceDir,
include: '**/*.txt', exclude: "**/*-${targetFlavor}.txt")
sourceFiles.each { File sourceFile ->
final locale = sourceFile.parentFile.getName()
final targetLocaleDir = new File(targetDir, locale)
if (!targetLocaleDir.isDirectory())
targetLocaleDir.mkdirs()
final targetFile = new File(targetLocaleDir, sourceFile.getName())
// Override Google-specific values by using ${name}-google.txt files.
final overrideFile = new File(sourceFile.getPath().replace('.txt', "-${targetFlavor}.txt"))
targetFile.text = overrideFile.exists() ? overrideFile.text : sourceFile.text
}
copy {
from "${projectDir}/../../screenshots/android"
into targetDir
}
}
}
play { play {
enabled.set(false) enabled.set(false)
track.set('production') track.set('production')
@@ -413,7 +436,3 @@ huaweiPublish {
} }
} }
} }
tasks.withType(JavaCompile).configureEach {
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
}

Binary file not shown.

BIN
android/app/debug.keystore Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -0,0 +1 @@
../../../../google/java/app/organicmaps/location

View File

@@ -1 +0,0 @@
../../../../../google/java/app/organicmaps/sdk/location

View File

@@ -1 +0,0 @@
সহজ মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত

View File

@@ -1 +0,0 @@
কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং এবং ড্রাইভিং করুন গোপনীয়তা সহ

View File

@@ -1 +0,0 @@
Navegació intuïtiva - Descobreix el teu camí - El poder de la comunitat

View File

@@ -1,32 +0,0 @@
Komunitou vedená bezplatná a otevřená mapová aplikace založená na datech z projektu OpenStreetMap a posílená závazkem k transparentnosti, soukromí a neziskovosti. Aplikace CoMaps je fork/odnož aplikace Organic Maps, která je zase forkem aplikace Maps.ME.
Důvody vzniku projektu a jeho směr si můžete přečíst na adrese <b><i>codeberg.org/comaps</i></b>.
Můžete se zde také připojit ke komunitě pomáhat s vytvářením nejlepší mapové aplikace
• Používejte aplikaci a sdílejte ji se známými
• Poskytujte zpětnou vazbu a nahlašujte problémy
• Aktualizujte mapová data v aplikaci nebo na webu OpenStreetMap
‣ <b>Zaměřené na offline použití</b>: Plánujte a navigujte své cesty do zahraničí bez nutnosti mobilních dat, hledejte body na vzdálených túrách apod. Všechny funkce aplikace jsou navrženy tak, aby fungovaly offline.
‣ <b>S ohledem na soukromí</b>: Aplikace je navržená s důrazem na soukromí neidentifikuje lidi, nesleduje vás a nesbírá osobní údaje. Bez reklam.
‣ <b>Jednoduché a vyladěné</b>: Základní, snadno použitelné funkce, které prostě fungují.
‣ <b>Šetří vaši baterii a místo</b>: Nevybíjí vaší baterii, jako ostatní navigační aplikace. Kompaktní mapy šetří cenné místo ve vašem telefonu.
‣ <b>Bezplatné a vytvořené komunitou</b>: S vytvářením aplikace pomáhají lidé, jako jste vy, přidáváním míst do projektu OpenStreetMap, testováním a poskytováním zpětné vazby k funkcím a přispíváním svými vývojářskými schopnostmi a penězi.
‣ <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
<b>Hlavní funkce</b>:
• Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google
• Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.
• Pěší trasy a cyklostezky
• Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího
• Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu
• Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení
• Uložení oblíbených míst jedním klepnutím
• Offline články z Wikipedie
• Vrstva metra a navigace v něm
• Záznam tras
• Export a import záložek a tras ve formátech KML, KMZ a GPX
• Tmavý režim k použití během noci
• Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru
<b>Svoboda je tady</b>
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!

View File

@@ -1 +0,0 @@
Jednoduchá navigace v mapě Objevte více na své cestě Vyvíjeno komunitou

View File

@@ -1 +0,0 @@
CoMaps pěšky, na kole a autem offline a soukromě

View File

@@ -1 +0,0 @@
Nem kortnavigation - Oplev mere af din rejse - Drevet af fællesskabet

View File

@@ -1 +0,0 @@
CoMaps - vandr, cykl og kør offline med privatliv

View File

@@ -1,32 +0,0 @@
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
• Nutze die App und erzähle anderen davon
• Gib Feedback und melde Probleme
• Aktualisiere Kartendaten in der App oder auf der OpenStreetMap-Webseite
‣ <b>Einfach und ausgereift</b>: Essenzielle, leicht zu bedienende Funktionen, die einfach funktionieren.
‣ <b>Offline-orientiert</b>: Plane und navigiere im Ausland ohne Mobilfunkverbindung, finde Wegpunkte auf abgelegenen Wanderungen usw. Alle Funktionen sind für den Offline-Einsatz konzipiert.
‣ <b>Datenschutzfreundlich</b>: Die App wurde mit Fokus auf Privatsphäre entwickelt keine Personenidentifikation, kein Tracking, keine Erfassung persönlicher Daten, keine Werbung.
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf deinem Gerät.
‣ <b>Kostenlos und von der Community entwickelt</b>: Menschen wie du haben geholfen, diese App zu entwickeln durch das Hinzufügen von Orten zu OpenStreetMap, Testen von neuen Funktionen, Softwareentwicklung oder Spenden.
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
<b>Hauptfunktionen</b>:
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
• Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
• Geh- und Radwege
• Orte wie Restaurants, Tankstellen, Hotels, Geschäfte, Sehenswürdigkeiten und viele mehr
• Suche nach Namen, Adressen oder Kategorien
• Sprachausgabe bei der Navigation zu Fuß, Rad oder Auto
• Lesezeichen mit einem einzigen Tippen speichern
• Offline verfügbare Wikipedia-Artikel
• U- und S-Bahn-Netze
• Aufzeichnen von GPS-Tracks
• Import und Export von Favoriten und Routen im KML-, KMZ- oder GPX-Format
• Dunkler Modus für die Nutzung bei Nacht
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
<b>Entdecke die Unabhängigkeit</b>
Entdecke deine Reise navigiere in der Welt mit Datenschutz!

View File

@@ -1,9 +0,0 @@
Wir stellen vor: Das neue CoMaps-Logo!
• Verbesserte Höhenlinien in vielen Regionen (Stufen von 20/50 m)
• Links zu Panoramax-Bildern für ausgewählte POIs
• OpenStreetMap-Daten vom 13. Juli
• Neue Farben für viele Objekte und Farben werden früher angezeigt
• Öffnungszeiten werden beim Antippen eines POI angezeigt
• Verschiedene Arten von Feuchtgebieten
• Neue Farben für Vegetation und andere Features; einige neue Icons
• Wandern: bessere Darstellung der Höhenlinien

View File

@@ -1 +0,0 @@
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt

View File

@@ -1 +0,0 @@
CoMaps Offline navigieren mit Datenschutz

View File

@@ -1,11 +1,5 @@
A community-led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME. A community-led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
Read on about reasons for the project and its direction at <b><i>codeberg.org/comaps</i></b>.
Join the community there and help make the best maps app
• Use the app and spread the word about it
• Give feedback and report issues
• Update map data in the app or on the OpenStreetMap website
‣ <b>Offline-focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline. ‣ <b>Offline-focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free. ‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
‣ <b>Simple and Polished</b>: essential easy to use features that just work. ‣ <b>Simple and Polished</b>: essential easy to use features that just work.
@@ -14,19 +8,21 @@ Join the community there and help make the best maps app
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b> ‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
<b>Main Features</b>: <b>Main Features</b>:
• Downloadable detailed maps with places which are not available with Google Maps <ul>
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc <li>Downloadable detailed maps with places which are not available with Google Maps</li>
• Walking paths and cycleways <li>Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc</li>
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more <li>Walking paths and cycleways</li>
• Search by name or an address or by point of interest category <li>Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more</li>
• Navigation with voice announcements for walking, cycling, or driving <li>Search by name or an address or by point of interest category</li>
• Bookmark your favorite places with a single tap <li>Navigation with voice announcements for walking, cycling, or driving</li>
• Offline Wikipedia articles <li>Bookmark your favorite places with a single tap</li>
• Subway transit layer and directions <li>Offline Wikipedia articles</li>
• Track recording <li>Subway transit layer and directions</li>
• Export and import bookmarks and tracks in KML, KMZ, GPX formats <li>Track recording</li>
• A dark mode to use during the night <li>Export and import bookmarks and tracks in KML, KMZ, GPX formats</li>
• Improve map data for everyone using a basic built-in editor <li>A dark mode to use during the night</li>
<li>Improve map data for everyone using a basic built-in editor</li>
<li>Android Auto and CarPlay support</li>
</ul>
<b>Freedom Is Here</b> <i>Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!</i>
Discover your journey, navigate the world with privacy and community at the forefront!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

View File

@@ -1,10 +1,8 @@
Introducing CoMaps logo! • New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
• Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
• Added a Track Recording indicator on the main screen
• upgrade altitude contour lines for many regions to 20 or 50 meters step …more details at omaps.org/news
• add Panoramax Picture links to selected POIs
• OpenStreetMap data as of July 13
• add color fills to many features and display fills earlier for existing features
• display opening hours state when selecting a POI
• split all wetlands into several distinct types
• update vegetation and other map colors, update some map icons
• outdoors: bolder altitude contour lines

View File

@@ -1,65 +0,0 @@
Una aplicación de mapas gratuita y de código abierto liderada por la comunidad, basada en los datos de OpenStreetMap y reforzada con un compromiso con la transparencia, la privacidad y la ausencia de fines de lucro. CoMaps es un fork o derivado de Organic Maps, que a su vez es un fork de Maps.ME.
<br><br>
Lee más sobre los motivos del proyecto y su dirección en <b><i>codeberg.org/comaps</i></b>.
<br><br>
Únete allí a la comunidad y ayuda a crear la mejor app de mapas
• Usa la aplicación y corre la voz sobre ella
• Envía comentarios y reporta problemas
• Actualiza los datos del mapa en la app o en el sitio web de OpenStreetMap
<br><br>
‣ <b>Enfocada en el uso sin conexión</b>: Planifica y navega tus viajes sin necesidad de conexión móvil, busca puntos de paso en rutas remotas, etc. Todas las funciones están diseñadas para funcionar sin conexión.
‣ <b>Respeta tu Privacidad</b>: La app está diseñada pensando en tu privacidad: no identifica personas, no rastrea y no recoge datos personales. Sin publicidad.
‣ <b>Sencilla y Pulida</b>: funciones esenciales fáciles de usar que simplemente funcionan.
‣ <b>Ahorra Batería y Espacio</b>: No consume la batería como otras apps de navegación. Los mapas compactos ahorran espacio valioso en tu teléfono.
‣ <b>Gratuita y Creada por la Comunidad</b>: Personas como tú ayudaron a construir la app añadiendo lugares a OpenStreetMap, probando funciones, dando opiniones y contribuyendo con desarrollo o financiación.
‣ <b>Toma de decisiones y finanzas abiertas y transparentes, sin ánimo de lucro y completamente de código abierto.</b>
<br><br>
<b>Funciones Principales</b>:
• Mapas detallados descargables con lugares que no aparecen en Google Maps
• Modo exterior con rutas de senderismo destacadas, campings, fuentes de agua, picos, curvas de nivel, etc.
• Caminos peatonales y carriles bici
• Puntos de interés como restaurantes, gasolineras, hoteles, tiendas, lugares turísticos y muchos más
• Búsqueda por nombre, dirección o categoría de punto de interés
• Navegación con indicaciones por voz para caminar, ir en bici o conducir
• Guarda tus lugares favoritos con un solo toque
• Artículos de Wikipedia sin conexión
• Capa de transporte subterráneo y rutas
• Grabación de rutas
• Exporta e importa favoritos y rutas en formatos KML, KMZ y GPX
• Modo oscuro para usar de noche
• Mejora los datos del mapa para todos usando un editor básico integrado
<br><br>
<b>La Libertad Está Aquí</b>
Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad.

View File

@@ -1,9 +0,0 @@
¡Presentamos el logo de CoMaps!
• mejora de isolíneas con más detalle para muchas regiones
• añade enlaces de imágenes de Panoramax a POIs seleccionados
• datos de OpenStreetMap a 13 de julio
• añadidos rellenos de color a muchas características
• se muestra el estado de horarios de apertura al seleccionar un POI
• se dividen los humedales en tipos distintos
• se actualiza la vegetación y otros colores del mapa, así como otros iconos
• exteriores: líneas de contorno de altitud más gruesas

View File

@@ -1 +0,0 @@
Navegación de mapa fácil - Descubre más en tu camino - Creado por la comunidad

View File

@@ -1 +0,0 @@
CoMaps - Senderismo, ciclismo y conducción offline

View File

@@ -1,32 +0,0 @@
Kogukonna juhitud vaba, avatud ja tasuta kaardirakendus, mis kasutab OpenStreetMapi kaardiandmeid ja on kantud meie kohustusest toimida läbipaistvalt, privaatselt ja kasumit mittetaotlevana. CoMaps on loodud Organic Mapsi põhjal, mis omakorda on loodud Maps.ME põhjal.
Selgitust selle projektiga alustamisele ning teavet meie edaspidiste plaanide kohta leiad <b><i>codeberg.org/comaps</i></b> lehelt.
Liitu kogukonnaga ja aita luua parimat kaardirakendust:
• Kasuta rakendust ja räägi sellest teistelegi
• Jaga tagasisidet ja teata vigadest
• Uuenda kaardiandmeid otse rakendusest või OpenStreetMapi veebisaidist
‣ <b>Ei vaja võrguühendust</b>: kavanda oma teekonda ja lase teed juhatada ilma andmesideühendust kasutamata ning otsi liikvel olles huvipunkte. Kaardirakenduse kogu funktsionaalsus on mõeldud toimima ilma võrguühenduseta.
‣ <b>Austab sinu privaatsust</b>: rakendus on loodud privaatsuskesksena - ta ei tuvasta sind, ei jälgi sinu tegevust ega kogu sinu kohta andmeid. Loomulikult pole ka reklaame.
‣ <b>Lihtne ja viimistletud</b>: kergeltkasutatav funktsionaalsus, mis lihtsalt toimib.
‣ <b>Säästab akut ja andmeruumi</b>: erinevalt teistest kaardirakendustest ei koorma ta akut. Kompaktsed kaardid säästavad nutiseadmes nii vajaliku andmeruumi.
‣ <b>Vaba ja loodud kogukonna poolt</b>: tavalised inimesed, nii nagu sinagi, on aitanud kaardirakenduse loomisel, kaartide koostamisel, testimisel ja tagasiside jagamisel ning kõike seda tehes panustanud oma oskuste ja rahaga.
‣ <b>Organisatsioon on avatud ja kasutab läbipaistvat otsustusprotsessi ning rahastamist ega taotle kasumit. Rakendus on avatud lähtekoodiga.</b>
<b>Põhifunktsionaalsused</b>:
• Allalaaditavad detailsed kaardid, mille sisu tihtipeale ei leia Google Mapsist
• Kaardivaade välitingimuste jaoks, kus matkarajad, laagriplatsid, allikad, mäetipud, kontuurjooned ja palju muud vajalikku on esile tõstetud
• Jalgrajad, rattateed ning maanteed
• Huvipunktid, nagu restoranid, tanklad, hotellid, poed, vaatamisväärsused ja palju muud
• Otsida saad nime, aadressi või huvipunkti kategooria alusel
• Tee juhatamine hääljuhiste abil toimib nii kõndimisel, rattasõidul kui auto juhtimisel
• Ühe puudutusega saad oma lemmikkohad märkida järjehoidjana
• Vikipeedia artiklid, mida saad lugeda ilma võrguühenduseta
• Metroode plaanid ja suunajuhised
• Raja või teekonna salvestamise võimalus
• Järjehoidjate ja radade eksport ning import KML, KMZ ja GPX vormingutes
• Tume kaardivaade kasutamiseks öösel
• Kasutades lihtsat muutmisliidest saad kaarti kõikide huvides täiendada
<b>Vabadus on siin</b>
Uuri maailma ja avasta uusi teid - tee seda privaatselt ja kogukonnaga arvestades!

View File

@@ -1 +0,0 @@
Lihtne tee juhatamine - Avasta reisides enamat - Kõik see toimeka kogukonna toel

View File

@@ -1 +0,0 @@
CoMaps - sinu privaatne kaart

View File

@@ -1,32 +0,0 @@
Komunitateko doako eta iturburu irekiko aplikazioa OpenStreetMap datuetan oinarrituta eta gardentasuna, pribatutasuna eta irabazi asmorik gabeko konpromisoarekin indartua. Comaps Organic Maps-en fork edo aldaera bat da, eta hori, aldi berean, maps.me-ren forka da.
Irakurri proiektuaren zergatia eta haren norabidea <b> <i> codeberg.org/comaps </ i> </ b>.
Sartu komunitatean eta lagundu maparik onena aplikatzen
• Erabili aplikazioa eta horren berri eman
• Eman feedbacka eta txostenetako gaiak
• Eguneratu maparen datuak aplikazioan edo OpenStreetMap webgunean
‣ <b> Konexiorik gabe fokatuta </ b> Planifikatu eta nabigatu atzerrira bidaiatzea, telefono zerbitzu beharrik gabe, bilaketa-biderapenak urruneko ibilaldian eta abar. Aplikazio funtzio guztiak lineaz kanpo lan egiteko diseinatuta daude.
‣ <b> Pribatutasuna errespetatzea </ b> errespetatzea: aplikazioa pribatutasunarekin diseinatuta dago, ez du pertsonak identifikatzen, ez du jarraipena egiten, eta ez du informazio pertsonala biltzen. Iragarkirik ez.
‣ <b> Sinplea eta leundua </ b>: Ezinbestekoa da funtzionatzen duten ezaugarriak erabiltzeko.
‣ <b> Zure bateria eta espazioa gordetzen ditu </ b>: ez du bateria xahutzen beste nabigazio aplikazioak bezala. Mapa trinkoak. Gorde espazio preziatua zure telefonoan.
‣ <b> Librea eta komunitateak eraikitakoa: Jendeak aplikazioa eraikitzen lagundu zuen aplikazioa eraikitzen lagunduz OpenStreetMap, probatu eta funtzioei buruzko iritzia emanez eta garapen trebetasunak eta dirua lagunduz.
‣ <b> Erabakiak eta finantza irekiak eta gardena, irabazi asmorik gabeko eta guztiz irekitako iturria. </ B>
<b> Ezaugarri nagusiak </ b>:
• Deskargatu mapa zehatzak Google Maps-ekin eskuragarri ez dauden lekuekin
• Mendiko modua nabarmendutako mendi ibilbideak, kanpinak, ur iturriak, gailurrak, sestra-lerroak, etab
• Bideak eta bidegorriak
• Jatetxe, gas geltokiak, hotelak, dendak, bisitak eta bestelako interesguneak
• Bilatu izenaren edo helbide baten arabera edo interes-kategoriaren arabera
• Oinez, txirrinduaz edo gidatzeko ahots-oharrekin nabigazioa
• Markatu zure gogoko lekuak sakatze bakarrarekin
• Lineaz kanpoko Wikipedia artikuluak
• Metroaren garraio geruza eta jarraibideak
• Arrastoen grabazioa
• Laster-markak eta ibilbideak esportatu eta inportatu KML, KMZ, GPX formatuetan
• Gauean erabiltzeko modu iluna
• Hobetu mapako datuak guztiontzat oinarrizko editore integratua erabiliz
<b> Askatasuna hemen </ b> da
Ezagutu zure bidaia, nabigatu munduan pribatutasunarekin eta komunitatez abangoardian!

View File

@@ -1 +0,0 @@
Mapa nabigazio erraza - Ezagutu gehiago zure bidaiaz - Komunitatean egina

View File

@@ -1 +0,0 @@
CoMaps- Mendia, bizikleta, autoa, dena offline

View File

@@ -1,32 +0,0 @@
Yhteisövetoinen, ilmainen ja avoimeen lähdekoodiin perustuva karttasovellus, jonka pohjalla käytetään OpenStreetMapin avointa karttadataa. Sovelluksen kehityksessä on sitouduttu läpinäkyvyyteen, yksityisyyteen ja voittoa tavoittelemattomuuteen. CoMapsin projekti on haarautunut Organic Mapsista, joka taas on haarautunut aiemmin Maps.ME:stä
Lue lisää projektin tavotteista ja suunnasta osoitteesta <b><i>codeberg.org/comaps</i></b>.
Liity yhteisöön ja auta kehittämään paras saatavilla oleva karttasovellus
• Käytä sovellusta ja kerro siitä myös muille
• Anna palautetta ja raportoi ongelmia
• Päivitä karttoja, joko sovelluksessa tai OpenStreetMapin verkkosivuilla
‣ <b>Offline-painotteinen</b>: Suunnittele ja navigoi ulkomailla ilman mobiiliverkkoja. Kaikki sovelluksen toiminnot on suunniteltu käytettäväksi ilman verkkoyhteyttä.
‣ <b>Kunnioittaa yksityisyyttä</b>: Sovellus on suunniteltu yksilön yksityisyys silmälläpitäen. Sovellus ei tunnista tai kerää tietoja sinusta. Mainosvapaa.
‣ <b>Yksinkertainen ja viimeistelty</b>: Olennaiset ominaisuudet, joita on helppo käyttää.
‣ <b>Säästä akkua ja tallennustilaa</b>: Ei kuluta akkua, kuten muut navigointisovellukset. Kompaktit kartat säästävät arvokasta tallennustilaa puhelimessasi.
‣ <b>Ilmainen ja yhteisön luoma</b>: Vapaaehtoiset, kuten sinä olette auttaneet sovelluksen kehityksessä lisäämällä paikkoja OpenStreetMap:iin, testaamalla sovellusta ja antamalla palautetta. Voit myös auttaa kehittämällä ominaisuuksia ja lahjoittamalla sovelluskehitykseen
‣ <b>Avoin ja läpinäkyvä päätöksenteko sekä rahoitus. Voittoa tavoittelematon ja täysin avoimeen lähdekoodiin perustuva.</b>
<b>Tärkeimmät ominaisuudet</b>:
• Ladattavat yksityiskohtaiset kartat paikoista, joita ei löydy edes Google Maps:sta
• Ulkoilutila, josta löytyy korostettuna reitit, leirintäpaikat, vesipisteet, huiput ja korkeuserot yms.
• Kävely- ja pyörätiet
• Kiinnostavat paikat, kuten ravintolat, huoltoasemat, hotellit, kaupat, nähtävyydet ja monta muuta
• Etsi nimellä, osoitteella tai kiinnostavan paikan kategorialla
• Navigointi ääni-ilmoituksilla kävellessä, pyöräillessä tai ajaessa
• Tallenna suosikkipaikkasi yhdellä napautuksella
• Offline Wikipedia-artikkelit
• Maanalaisen liikenteen tasot ja ohjeet
• Reittien tallennus
• Tuo ja vie kirjanmerkkejä ja reittejä KML-, KMZ- ja GPX-formaateissa
• Tumma tila iltaa ja yötä varten
• Paranna karttadataa kaikille sisäänrakennetulla editorilla
<b>Vapaus on täällä</b>
Löydä matkasi ja navigoi maailmalla yksityisyyden ja yhteisön tukemana!

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