Compare commits

..

3 Commits

Author SHA1 Message Date
Viktor Govako
6368ba477f Assign external URI for Kayak hotels.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-05-08 21:13:33 +07:00
Viktor Govako
e7c04c5459 Kayak flow.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-05-08 21:13:33 +07:00
Viktor Govako
556a474fda Restore booking flow.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-05-08 21:13:33 +07:00
1600 changed files with 25955 additions and 33445 deletions

View File

@@ -2,47 +2,447 @@
---
BasedOnStyle: Google
AccessModifierOffset: -2
AlignOperands: AlignAfterOperator
AllowShortBlocksOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
BeforeLambdaBody: true
BeforeWhile: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBraces: Custom
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma
IndentWidth: 2
BreakBeforeBraces: Allman
ColumnLimit: 120
---
Language: Cpp
AccessModifierOffset: -2
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
BreakConstructorInitializersBeforeComma: true
ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 2
DerivePointerAlignment: false
IncludeBlocks: Preserve
IndentCaseLabels: false
IndentExternBlock: NoIndent
InsertNewlineAtEOF: true
PackConstructorInitializers: Never
NamespaceIndentation: None
PointerAlignment: Middle
QualifierAlignment: Right
SortIncludes: true
Standard: c++20
IncludeBlocks: Regroup
IncludeCategories:
# Tests --------------------------------------------------------------------------------------------
- Regex: '^"track_analyzing/track_analyzing_tests/'
Priority: 4730
- Regex: '^"poly_borders/poly_borders_tests/'
Priority: 4740
- Regex: '^"generator/generator_integration_tests/'
Priority: 4750
- Regex: '^"generator/generator_tests/'
Priority: 4751
- Regex: '^"generator/mwm_diff_tests/'
Priority: 4752
- Regex: '^"map/style_tests/'
Priority: 4760
- Regex: '^"map/mwm_tests/'
Priority: 4761
- Regex: '^"map/map_tests/'
Priority: 4762
- Regex: '^"map/map_integration_tests/'
Priority: 4763
- Regex: '^"ge0/ge0_tests/'
Priority: 4765
- Regex: '^"openlr/openlr_tests/'
Priority: 4770
- Regex: '^"descriptions/descriptions_tests/'
Priority: 4790
- Regex: '^"ugc/ugc_tests'
Priority: 4810
- Regex: '^"search/search_integration_tests/'
Priority: 4820
- Regex: '^"search/search_tests/'
Priority: 4821
- Regex: '^"search/search_quality/search_quality_tests/'
Priority: 4822
- Regex: '^"drape_frontend/drape_frontend_tests/'
Priority: 4830
- Regex: '^"routing/routing_tests/'
Priority: 4840
- Regex: '^"routing/routing_integration_tests/'
Priority: 4841
- Regex: '^"routing/routing_quality/routing_quality_tests/'
Priority: 4842
- Regex: '^"routing/routing_consistency_tests/'
Priority: 4843
- Regex: '^"routing/routing_benchmarks/'
Priority: 4844
- Regex: '^"kml/kml_tests'
Priority: 4850
- Regex: '^"tracking/tracking_tests/'
Priority: 4860
- Regex: '^"partners_api/partners_api_tests/'
Priority: 4870
- Regex: '^"traffic/traffic_tests/'
Priority: 4880
- Regex: '^"storage/storage_tests/'
Priority: 4890
- Regex: '^"storage/storage_integration_tests/'
Priority: 4891
- Regex: '^"editor/editor_tests/'
Priority: 4900
- Regex: '^"editor/osm_auth_tests/'
Priority: 4910
- Regex: '^"drape/drape_tests/'
Priority: 4920
- Regex: '^"transit/transit_tests'
Priority: 4930
- Regex: '^"routing_common/routing_common_tests/'
Priority: 4940
- Regex: '^"indexer/indexer_tests/'
Priority: 4950
- Regex: '^"platform/platform_tests/'
Priority: 4960
- Regex: '^"coding/coding_tests/'
Priority: 4970
- Regex: '^"geometry/geometry_tests/'
Priority: 4980
- Regex: '^"base/base_tests/'
Priority: 4990
- Regex: '^"testing/'
Priority: 5000
# Binaries (tools) ---------------------------------------------------------------------------------
- Regex: '^"openlr/openlr_match_quality/openlr_assessment_tool/'
Priority: 18908
- Regex: '^"search/search_quality/assessment_tool/'
Priority: 18909
- Regex: '^"qt/'
Priority: 18910
- Regex: '^"track_analyzing/track_analyzer/'
Priority: 19000
- Regex: '^"feature_list/'
Priority: 19100
- Regex: '^"generator/booking_quality_check/'
Priority: 19206
- Regex: '^"generator/complex_generator/'
Priority: 19207
- Regex: '^"generator/feature_segments_checker/'
Priority: 19208
- Regex: '^"generator/srtm_coverage_checker/'
Priority: 19209
- Regex: '^"generator/generator_tool/'
Priority: 19210
- Regex: '^"map/extrapolation_benchmark/'
Priority: 19309
- Regex: '^"map/benchmark_tool/'
Priority: 19310
- Regex: '^"openlr/openlr_stat/'
Priority: 19400
- Regex: '^"search/search_quality/booking_dataset_generator/'
Priority: 19707
- Regex: '^"search/search_quality/features_collector_tool/'
Priority: 19708
- Regex: '^"search/search_quality/samples_generation_tool/'
Priority: 19709
- Regex: '^"search/search_quality/search_quality_tool/'
Priority: 19710
- Regex: '^"track_generator/'
Priority: 19800
- Regex: '^"routing/routing_quality/routing_quality_tool/'
Priority: 19909
- Regex: '^"routing/routes_builder/routes_builder_tool/'
Priority: 19910
- Regex: '^"skin_generator/'
Priority: 20000
# Libraries ----------------------------------------------------------------------------------------
- Regex: '^"poly_borders/'
Priority: 46700
- Regex: '^"track_analyzing/'
Priority: 46800
- Regex: '^"generator/mwm_diff/pymwm_diff/'
Priority: 46907
- Regex: '^"generator/mwm_diff/'
Priority: 46908
- Regex: '^"generator/generator_tests_support/'
Priority: 46909
- Regex: '^"generator/'
Priority: 46910
- Regex: '^"map/'
Priority: 47000
- Regex: '^"ge0/'
Priority: 47050
- Regex: '^"openlr/'
Priority: 47100
- Regex: '^"descriptions/'
Priority: 47300
- Regex: '^"search/search_quality/'
Priority: 47407
- Regex: '^"search/search_tests_support/'
Priority: 47408
- Regex: '^"search/pysearch/'
Priority: 47409
- Regex: '^"search/'
Priority: 47410
- Regex: '^"ugc/'
Priority: 47500
- Regex: '^"track_generator/pytrack_generator/'
Priority: 47600
- Regex: '^"routing/routing_quality/api/'
Priority: 47707
- Regex: '^"routing/routing_quality/'
Priority: 47708
- Regex: '^"routing/routes_builder/'
Priority: 47709
- Regex: '^"routing/'
Priority: 47710
- Regex: '^"tracking/pytracking/'
Priority: 47809
- Regex: '^"tracking/'
Priority: 47810
- Regex: '^"partners_api/'
Priority: 47900
- Regex: '^"traffic/pytraffic/'
Priority: 48109
- Regex: '^"traffic/'
Priority: 48110
- Regex: '^"storage/'
Priority: 48200
- Regex: '^"editor/editor_tests_support/'
Priority: 48309
- Regex: '^"editor/'
Priority: 48310
- Regex: '^"drape_frontend/'
Priority: 48500
- Regex: '^"shaders/'
Priority: 48600
- Regex: '^"drape/'
Priority: 48700
- Regex: '^"qt_tstfrm/'
Priority: 48800
- Regex: '^"kml/pykmlib/'
Priority: 48909
- Regex: '^"kml/'
Priority: 48910
- Regex: '^"transit/'
Priority: 49000
- Regex: '^"routing_common/'
Priority: 49100
- Regex: '^"indexer/'
Priority: 49200
- Regex: '^"platform/platform_tests_support/'
Priority: 49409
- Regex: '^"platform/'
Priority: 49410
- Regex: '^"coding/'
Priority: 49500
- Regex: '^"geometry/'
Priority: 49600
- Regex: '^"base/'
Priority: 49700
- Regex: '^"pyhelpers/'
Priority: 49800
- Regex: '^"app/organicmaps/util/'
Priority: 49840
- Regex: '^"app/organicmaps/maps/'
Priority: 49850
- Regex: '^"app/organicmaps/platform/'
Priority: 49860
- Regex: '^"app/organicmaps/opengl/'
Priority: 49870
- Regex: '^"app/organicmaps/vulkan/'
Priority: 49880
- Regex: '^"app/organicmaps/core/'
Priority: 49890
- Regex: '^"private\.h"$'
Priority: 49900
- Regex: '^"std/'
Priority: 50000
- Regex: '^"defines\.hpp"$'
Priority: 50100
- Regex: '^<Qt.*>$'
Priority: 50140
- Regex: '^<jni.h>$'
Priority: 50180
- Regex: '^<.*>$'
Priority: 50200
- Regex: '^"(3party/boost|boost)/'
Priority: 50300
- Regex: '^<boost'
Priority: 50300
- Regex: '^"3party/.*'
Priority: 50400
- Regex: '^"build_version\.hpp"$'
Priority: 99999
---
Language: Java
BreakAfterJavaFieldAnnotations: true
---
Language: ObjC
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: AfterColon
BreakBeforeTernaryOperators: true
BreakStringLiterals: true
ColumnLimit: 120
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 2
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: false
Standard: Latest
TabWidth: 2
UseTab: Never
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 8
UseTab: Never

View File

@@ -1,70 +0,0 @@
name: 🐞 Bug Report
description: Report a problem you've encountered
title: "bug: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
⚠ **Have you searched for similar, already existing issues?**
Please do that before submitting a new one.
- type: textarea
id: issue-description
attributes:
label: Describe the issue
description: Please write a clear and concise description of the issue here.
placeholder: Describe what is not working as expected...
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to reproduce
description: Describe the steps needed to reproduce the issue.
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See the error
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behaviour
description: A clear and concise description of what you expected to happen.
placeholder: I expected that...
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: Screenshots
description: If applicable, add screenshots or screen recordings to help explain your problem.
validations:
required: false
- type: textarea
id: system-info
attributes:
label: System information
description: Provide information about the system where the issue occurred.
placeholder: |
- OS: e.g. Ubuntu 22, iOS 12
- CoMaps version: e.g. 1.2.3
- Device model: e.g. iPhone 6, Samsung S22
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Add any other context or comments that may be useful.
validations:
required: false

View File

@@ -0,0 +1,38 @@
---
name: Bug Report
about: Describe your issue in detail to help us improve CoMaps
title: ''
labels: ''
assignees: ''
---
⚠ Have you searched for similar, already existing issues?
**Describe the issue**
Please write a clear and concise description of the issue here.
**Steps to reproduce**
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behaviour**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots or screen recordings to help explain your problem.
**System information:**
- Operating system and its version: [iOS 12, Android 10, Ubuntu 22, MacOS Big Sur, etc.]
- CoMaps version: [you can find it by tapping the button with the CoMaps logo]
- Device Model: [e.g. iPhone 6, Samsung S22]
**Additional context**
Please add any other context or comments here that may be useful.

View File

@@ -1,7 +1,7 @@
blank_issues_enabled: true
contact_links:
- name: Translations
url: https://codeberg.org/comaps/comaps/src/branch/main/docs/TRANSLATIONS.md
url: https://codeberg.org/comaps/comaps/blob/master/docs/TRANSLATIONS.md
about: Translate CoMaps into your language
- name: News
url: https://comaps.app/news/

View File

@@ -1,47 +0,0 @@
name: "💡 Feature Request"
description: "Suggest an idea or improvement for CoMaps"
title: "feat: "
labels:
- "enhancement"
body:
- type: markdown
attributes:
value: |
⚠ **Have you searched for similar, already existing issues?**
Please make sure your idea hasn't been suggested before.
- type: textarea
id: related-problem
attributes:
label: "What problem would this feature help solve?"
description: "Share how this feature could make the experience better, smoother, or more enjoyable."
placeholder: "It would be great if..."
validations:
required: true
- type: textarea
id: ideal-solution
attributes:
label: "Describe the ideal solution"
description: "What would you like to see in CoMaps?"
placeholder: "I would like CoMaps to..."
validations:
required: false
- type: textarea
id: alternatives
attributes:
label: "Describe alternatives you have considered"
description: |
How do you solve this issue now with CoMaps or other apps?
You can also share screenshots or examples from other apps.
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: "Additional context"
description: "Any other context, comments, or screenshots to support your request."
validations:
required: false

View File

@@ -0,0 +1,27 @@
---
name: Feature Request
about: Suggest an idea for CoMaps
title: ''
labels: []
assignees: ''
---
⚠ Have you searched for similar, already existing issues?
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. For example:
I'm always frustrated when [...]
**Describe the ideal solution**
A clear and concise description of what you want to see in CoMaps.
**Describe alternatives you have considered**
- How do you solve this issue now with CoMaps or other apps?
- Attach any examples, screenshots, or screen recordings from other apps that help us to better understand the idea.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
paths-ignore:
- .gitignore
- .forgejo/**

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
pull_request:
paths-ignore:
- .gitignore

View File

@@ -12,12 +12,19 @@ jobs:
environment: production
steps:
- name: Checkout sources
# TODO: use shallow (and sparse?) checkout
uses: actions/checkout@v4
# - name: Parallel submodules checkout
# shell: bash
# run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Parallel submodules checkout
shell: bash
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: master
path: screenshots
- name: Restore release keys
shell: bash
@@ -30,6 +37,6 @@ jobs:
- name: Upload
shell: bash
run: ./gradlew publishGoogleReleaseListing
run: ./gradlew prepareGoogleReleaseListing publishGoogleReleaseListing
working-directory: android
timeout-minutes: 5

View File

@@ -97,7 +97,7 @@ jobs:
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: main
ref: master
path: screenshots
- name: Restore release keys
@@ -156,7 +156,7 @@ jobs:
cat ${{ env.RELEASE_NOTES }}
echo ""
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://codeberg.org/comaps/comaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
echo "You can get automatic app updates from Codeberg [using Obtainium](https://codeberg.com/comaps/comaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
echo ""
echo "sha256sum:"
echo -e '\n```'

View File

@@ -25,7 +25,11 @@ jobs:
sudo apt install -y \
flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
sudo 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
shell: bash

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
paths-ignore:
- .gitignore
- .forgejo/**

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
pull_request:
paths-ignore:
- .gitignore

View File

@@ -29,7 +29,7 @@ jobs:
with:
repository: ${{ secrets.SCREENSHOTS_REPO }}
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
ref: main
ref: master
path: screenshots
- name: Checkout keywords
@@ -37,7 +37,7 @@ jobs:
with:
repository: ${{ secrets.KEYWORDS_REPO }}
ssh-key: ${{ secrets.KEYWORDS_SSH_KEY }}
ref: main
ref: master
path: keywords
- name: Update metadata

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
pull_request:
paths-ignore:
- .gitignore
@@ -90,7 +90,7 @@ jobs:
# -g1 should slightly reduce build time.
run: |
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
shell: bash

View File

@@ -3,7 +3,7 @@ on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
- master
pull_request:
paths-ignore:
- .gitignore

View File

@@ -1,104 +0,0 @@
name: Android Check
on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
env:
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
jobs:
lint:
name: Android Lint
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Init boost, generate textures
shell: bash
run: ./configure.sh --skip-map-download
- name: Lint
shell: bash
working-directory: android
run: ./gradlew -Pandroidauto=true lint
android-check:
name: Build Android apps
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
flavor: [WebBeta, FdroidDebug]
include:
- flavor: WebBeta
arch: arm64
- flavor: FdroidDebug
arch: arm32
# Cancels previous jobs if the same branch or PR was updated again.
concurrency:
group: ${{ github.workflow }}-${{ matrix.flavor }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install build tools and dependencies
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build \
qt6-base-dev \
qt6-declarative-dev \
qt6-positioning-dev \
libqt6svg6-dev \
optipng \
libfreetype-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 200 # enough to get all commits for the current day
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Init boost, generate textures
shell: bash
run: ./configure.sh --skip-map-download
- name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ github.workflow }}-${{ matrix.flavor }}
- name: Compile ${{ matrix.flavor }}
shell: bash
working-directory: android
env:
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
run: |
cmake --version
ninja --version
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
- name: Upload ${{ matrix.flavor }} apk
uses: actions/upload-artifact@v4
with:
name: android-${{ matrix.flavor }}
path: android/app/build/outputs/apk/**/CoMaps-*.apk
if-no-files-found: error

View File

@@ -1,83 +0,0 @@
name: iOS Check
on:
workflow_dispatch: # Manual trigger
push:
branches:
- main
jobs:
ios-check:
name: Build iOS
runs-on: macos-15
env:
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
strategy:
fail-fast: false
matrix:
buildType: [Debug, Release]
# Cancels previous jobs if the same branch or PR was updated again.
concurrency:
group: ${{ github.workflow }}-${{ matrix.buildType }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
run: |
brew install qt \
optipng
- name: Checkout sources
uses: actions/checkout@v4
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
- name: Init boost, download World map, generate textures
shell: bash
run: ./configure.sh
- name: Configure XCode cache
uses: irgaly/xcode-cache@v1
with:
key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }}
restore-keys: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}
- name: Build and Run Tests (Debug)
if: matrix.buildType == 'Debug'
shell: bash
run: |
xcodebuild test \
-workspace xcode/omim.xcworkspace \
-scheme OMaps \
-configuration Debug \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
-quiet \
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
- name: Upload Test Results On Failure (Debug)
if: ${{ matrix.buildType == 'Debug' && failure() }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.TEST_RESULTS_BUNDLE_NAME }}-${{ github.run_number }}.xcresult
path: ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult
if-no-files-found: error
- name: Build (Release)
if: matrix.buildType == 'Release'
shell: bash
run: |
xcodebuild build \
-workspace xcode/omim.xcworkspace \
-scheme OMaps \
-configuration Release \
-destination 'generic/platform=iOS' \
-quiet \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO

11
.gitignore vendored
View File

@@ -9,7 +9,6 @@ Makefile.Release
object_script.*.Debug
object_script.*.Release
compile_commands.json
*.local.*
stxxl.errlog
stxxl.log
@@ -140,7 +139,10 @@ private.h
android/release.keystore
android/secure.properties
android/libnotify.properties
android/google-services.json
android/google-play.json
android/firebase-app-distribution.json
android/firebase-test-lab.json
android/huawei-appgallery.json
android/res/xml/network_security_config.xml
./server/
@@ -176,7 +178,6 @@ tools/python/*/venv/
# Configs
tools/python/maps_generator/var/etc/map_generator.ini
tools/python/routing/etc/*.ini
tools/unix/maps/settings.sh
# Helpers
/node_modules/
@@ -188,3 +189,9 @@ tools/unix/maps/settings.sh
# VS Code
.vscode
.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"]
path = tools/osmctools
url = https://github.com/organicmaps/osmctools.git
url = https://git.omaps.dev/organicmaps/osmctools.git
[submodule "tools/kothic"]
path = tools/kothic
url = https://codeberg.org/comaps/kothic.git
url = https://git.omaps.dev/organicmaps/kothic.git
[submodule "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"]
path = 3party/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git
@@ -17,7 +17,7 @@
ignore = dirty
[submodule "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
[submodule "3party/expat"]
path = 3party/expat

View File

@@ -34,8 +34,6 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
add_library(jansson::jansson ALIAS jansson)
# Add gflags library.
set(GFLAGS_BUILD_TESTING OFF)
set(GFLAGS_BUILD_PACKAGING OFF)
add_subdirectory(gflags)
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_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.
if (POLICY CMP0156)
cmake_policy(SET CMP0156 NEW)
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))
# OBJC/OBJCXX are needed to skip m/mm files in Unity builds.
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
@@ -50,14 +33,24 @@ endif()
message(STATUS "Using compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
if (CMAKE_UNITY_BUILD)
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, use -DCMAKE_UNITY_BUILD=OFF to disable it.")
option(COVERAGE_REPORT "Configure for coverage report" OFF)
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()
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/)
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_LINK "${CCACHE_PROGRAM}")
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
@@ -65,13 +58,44 @@ if (USE_CCACHE)
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})
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
# Metal language support
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
include(CheckLanguage)
include(CMakeMetalInformation)
include(MetalShaderSupport)
check_language(Metal)
if(CMAKE_Metal_COMPILER)
@@ -79,6 +103,23 @@ if(${PLATFORM_MAC})
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.
if (MSVC)
add_compile_options(/utf-8)
@@ -94,11 +135,6 @@ if (PLATFORM_WIN)
)
endif()
# Try fast native arch.
if (PLATFORM_LINUX)
add_compile_options(-march=native)
endif()
# Built-in CMake configurations: Debug, Release, RelWithDebInfo, MinSizeRel
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
add_definitions(-DDEBUG)
@@ -108,35 +144,110 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
add_definitions(-DRELEASE)
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()
else()
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
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})
# 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)
find_program(LLD_FOUND ld.lld)
if (LLD_FOUND)
message(STATUS "Using ld.lld linker")
message(STATUS "Using ld.ldd linker")
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld")
else()
find_program(GOLD_FOUND ld.gold)
@@ -189,6 +300,28 @@ endif()
# To allow #include "base/file_name.hpp" in all sources.
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)
message(STATUS "Precompiled headers are ON")
set(OMIM_PCH_TARGET_NAME "omim_pch")

180
README.md
View File

@@ -1,45 +1,50 @@
<!--<div align="center">
<img src="qt/res/logo.png" height="100"/>
</div>-->
<!-- a nav bar -->
[Project Intro](https://codeberg.org/comaps#comaps)
| [Governance](https://codeberg.org/comaps/Governance#comaps-project-governance-docs)
| [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)
<h1 align="center"">CoMaps - Discover more of your journey, powered by the community</h1>
CoMaps is a new community-driven maps app project born out of the desire to create a truly open, transparent, and community-focused navigation app. Our mission is to provide easy, offline navigation for travellers, drivers, hikers, and cyclists, with a strong emphasis on open-source principles and respecting data privacy. We are committed to building a world where the top choice for navigation software is free and developed through open collaboration.
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.
### Community Action
There are apps for Android and iOS (and ARM macOS).
An alpha linux / macOS Qt desktop version, which is also suitable for linux phones.
The CoMaps project was initiated in response to the growing concerns and dissatisfaction within the Organic Maps community. The original Organic Maps project, while initially promoted as an open community effort, faced significant issues related to governance, transparency, and the potential for shareholder profit at the expense of the community. These concerns were detailed in an open letter to Organic Maps shareholders, which can be found [here](https://openletter.earth/open-letter-to-organic-maps-shareholders-a0bf770c). Despite some positive steps, the lack of a substantive resolution has led to the decision to start a new independent project.
The first app release is available as an APK download now! We are still working on publishing on F-Droid, Google Play Store and iOS App Store as well, please stay tuned!
### New Path Forward
At CoMaps, we are dedicated to ensuring that all project-related efforts are conducted in public, providing full transparency in decision-making, priorities, goals, financials, and operations. We believe in community decision-making, where those impacted by decisions have a voice and are empowered to participate. Our project operates as a not-for-profit entity, focusing on creating value for the community rather than generating profit. We are committed to maintaining the complete codebase and associated resources under Free and Open Source Software licenses, ensuring that development is open and transparent.
Privacy is an important part of the project. The app does not track users or collect personal data behind the scenes; if there is potential of data collection, for example sharing app logs with tech support, it is fully disclosed and requires opt-in consent. Funding for CoMaps primarily comes from community donations, and possibility of grants and B2B products, as long as they align with the principles and are approved by the community. All assets created or acquired are owned by the community and used for its benefit.
We are building a navigation app that is not only easy to use and fast, but also reflects the values of openness, transparency, and community collaboration. Join us in creating a navigation solution that truly serves the public good.
Read on about project's principles and governance structure in the [dedicated repo](https://codeberg.org/comaps/governance#core-principles-work-in-progress).
<br>
## [CoMaps](https://comaps.app) Hike, Bike, Drive Offline Easy Map Navigation with Privacy
A community-led maps app based on an open source foundation and reinforced with commitment to transparency, privacy and being not-for-profit.
Join the community 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](https://www.openstreetmap.org) website
Your [donations](https://opencollective.com/comaps/donate) and positive reviews motivate and inspire us, thanks ❤️!
**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/)
-->
[<img src="docs/badges/codeberg.png" alt="Codeberg" width="160">](https://codeberg.org/comaps/comaps/releases)
<p float="left">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="180" />
@@ -50,77 +55,116 @@ The first app release is available as an APK download now! We are still working
**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.
**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.
**No Data Collection**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect any information.
**Simple and Polished**: essential easy to use features that just work.
**Save Your Battery**: Efficiently uses the battery during your travels, doesnt drain your battery like other navigation apps.
**Saves Your Battery and Space**: Doesnt drain your battery like other navigation apps. Compact maps save precious space on your phone.
**Free and Built by the Community**: People like you helped build the app by adding locations to OpenStreetMap, giving feedback on features, and contributing code on Codeberg in the open-source community.
**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.
### Principles
1. Transparency
2. Community Decision-making
3. Not-for-profit
4. Open source
5. Privacy-focused
6. Clear Funding
7. Assets for Public Interest
**Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.**
### Main Features
### Respecting Privacy
• No tracking
• No data collection
• No ads
- Downloadable detailed maps with places which are not available with Google Maps
- Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
## Features
- Walking paths and cycleways
• Search by name or an address or by point of interest category
- Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
• Navigation with voice announcements for walking, cycling, or driving
- Search by name or an address or by point of interest category
• Track recording
- Navigation with voice announcements for walking, cycling, or driving
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
- Bookmark your favorite places with a single tap
- Offline Wikipedia articles
### Maps
- Subway transit layer and directions
• Downloadable detailed maps from OpenStreetMap with places which are not available with Google Maps
- Track recording
• Hiking trails, walking paths and cycleways
- Export and import bookmarks and tracks in KML, KMZ, GPX formats
• Contour lines, elevation profiles and peaks
- A dark mode to use during the night
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
- Improve map data for everyone using a basic built-in editor
- Android Auto and CarPlay support
*Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!*
Please report app issues, suggest ideas and join our community at comaps.app website.
Freedom Is Here Discover your journey, navigate the world with privacy and community at the forefront.
<a name="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.
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can help in many ways, the ability to code is not necessary.
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
<!-- uncomment when linked resources are ready
- **Rate us on the [App Store](https://apps.apple.com/app/comaps/id1567437057)
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?
### Who is paying for development?
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!
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
## License and Copyright
### How can I help with CoMaps?
You can help by donating, by helping build the product, or by telling others about it. To build a great product 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.
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can [help in many ways](https://comaps.app/support-us/), the ability to code is not necessary.
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!
<!-- uncomment when linked resources are ready
### Feedback
- **Rate us on the [App Store](https://apps.apple.com/app/comaps/id1567437057)
and [Google Play](https://play.google.com/store/apps/details?id=app.comaps)**.
- **Star us on Codeberg**.
- Report bugs or issues to [the issue tracker](https://codeberg.org/comaps/comaps/issues).
-->
### Connect with us
[Bluesky](https://bsky.app/profile/comaps.app)
| [Facebook](https://www.facebook.com/CoMapsCommunity/)
| [Instagram](https://www.instagram.com/comapscommunity/)
| [Lemmy](https://sopuli.xyz/c/CoMaps)
| [LinkedIn](https://www.linkedin.com/company/comaps-community/)
| [Mastodon](https://floss.social/@CoMaps)
| [Matrix](https://matrix.to/#/#comaps:matrix.org)
| [Open Collective](https://opencollective.com/comaps)
| [Reddit](https://www.reddit.com/r/CoMaps/)
| [Telegram](https://t.me/CoMapsApp) [EN Chat](https://t.me/CoMaps_EN) [RU Chat](https://t.me/CoMaps_RU)
| [Threads](https://www.threads.com/@comapscommunity)
| [TikTok](https://www.tiktok.com/@comapscommunity)
## What's the difference to Organic Maps?
CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork/spin-off of Maps.me. The CoMaps project emerged in response to the growing concerns and dissatisfaction with the Organic Maps leadership. The original Organic Maps project, while initially promoted as an open community effort, faced significant issues related to governance, transparency, and the potential of shareholder profit at the expense of the community. These concerns were detailed in an open letter to Organic Maps shareholders, which can be found [here](https://openletter.earth/open-letter-to-organic-maps-shareholders-a0bf770c). Despite some positive steps, the lack of a substantial resolution has led former Organic Maps contributors to the decision to start a new independent project.
With CoMaps, we want to overcome these issues by moving to a nonprofit structure (not finished yet), greater inclusivity in decision-making, and financial transparency.
## Governance
See the [Principles](https://codeberg.org/comaps/governance).
The CoMaps community abides by the CNCF [code of conduct](docs/CODE_OF_CONDUCT.md).
### Copyrights
Licensed under the Apache License, Version 2.0. See
[LICENSE](LICENSE),
[NOTICE](NOTICE)
and [data/copyright.html](data/copyright.html)
for more information.

8
android/.idea/icon.svg generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
<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>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,22 +0,0 @@
FROM ubuntu:latest
ENV TZ=Etc/UTC
ENV QT_QPA_PLATFORM=offscreen
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
qt6-base-dev \
qt6-svg-dev \
qt6-positioning-dev \
libicu-dev \
libfreetype-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
optipng
WORKDIR /root/comaps
RUN ./configure.sh
CMD ./gradlew -Parm64 assembleFdroidDebug

View File

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

View File

@@ -3,16 +3,38 @@ buildscript {
google()
mavenCentral()
}
//
// The magic below is needed to disable Google Firebase Services during the build time.
// Unfortunately, the only way to disable Gradle plugins is to add these hardcore switches to buildscript().
//
// Detect flavors from the task name.
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
def isFdroid = taskName.contains('fdroid')
def isBeta = taskName.contains('beta')
// Firebase Crashlytics compile-time feature flag: -Pfirebase=true|false
def googleFirebaseServicesFlag = findProperty('firebase')
// Enable Firebase for all beta flavors except fdroid only if google-services.json exists.
def googleFirebaseServicesDefault = isBeta && !isFdroid && file("$projectDir/google-services.json").exists()
ext.googleFirebaseServicesEnabled = googleFirebaseServicesFlag != null ?
googleFirebaseServicesFlag == '' || googleFirebaseServicesFlag.toBoolean() :
googleFirebaseServicesDefault
dependencies {
classpath libs.android.tools
classpath(libs.triplet.play.publisher)
classpath(libs.huawei.publish)
classpath 'com.android.tools.build:gradle:8.7.3'
if (googleFirebaseServicesEnabled) {
println('Building with Google Firebase Services')
classpath 'com.google.gms:google-services:4.4.2'
classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
classpath 'com.google.firebase:firebase-appdistribution-gradle:5.0.0'
} else {
println('Building without Google Firebase Services')
}
classpath('com.github.triplet.gradle:play-publisher:3.10.1')
classpath('ru.cian:huawei-publish-gradle-plugin:1.4.2')
}
}
@@ -23,6 +45,11 @@ repositories {
}
apply plugin: 'com.android.application'
if (googleFirebaseServicesEnabled) {
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.firebase.appdistribution'
}
apply plugin: 'com.github.triplet.play'
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
@@ -88,6 +115,7 @@ android {
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
// Should be customized in flavors.
buildConfigField 'String', 'REVIEW_URL', '""'
resourceConfigurations += [project.ext.supportedLocalizations]
externalNativeBuild {
def pchFlag = 'OFF'
@@ -154,16 +182,15 @@ android {
google {
dimension 'default'
applicationIdSuffix '.google'
versionName = android.defaultConfig.versionName + '-Google'
buildConfigField 'String', 'SUPPORT_MAIL', '"gplay@comaps.app"'
buildConfigField 'String', 'REVIEW_URL', '"market://details?id=app.comaps.google"'
buildConfigField 'String', 'REVIEW_URL', '"market://details?id=app.comaps"'
}
// Distributed directly by the project, e.g. in repo releases, chats, etc.
web {
dimension 'default'
versionName = android.defaultConfig.versionName
applicationIdSuffix '.web'
versionName = android.defaultConfig.versionName + '-Web'
buildConfigField 'String', 'SUPPORT_MAIL', '"apk@comaps.app"'
}
@@ -175,7 +202,6 @@ android {
huawei {
dimension 'default'
applicationIdSuffix '.huawei'
versionName = android.defaultConfig.versionName + '-Huawei'
versionCode = HUAWEI_VERSION_CODE_BASE + android.defaultConfig.versionCode
buildConfigField 'String', 'SUPPORT_MAIL', '"huawei@comaps.app"'
@@ -215,77 +241,59 @@ android {
android.applicationVariants.all { variant ->
def task = variant.name.capitalize()
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()
if (secureReleasePropertiesFileExists) {
apply from: 'secure.properties.release'
}
def secureTestPropertiesFileExists = file('secure.properties.test').exists()
if (secureTestPropertiesFileExists) {
apply from: 'secure.properties.test'
def securityPropertiesFileExists = file('secure.properties').exists()
if (securityPropertiesFileExists) {
apply from: 'secure.properties'
}
signingConfigs {
debug {
storeFile file('comaps-debug.keystore')
storeFile file('debug.keystore')
storePassword '12345678'
keyAlias 'CoMaps Debug'
keyAlias 'debug'
keyPassword '12345678'
}
test {
if (secureTestPropertiesFileExists) {
storeFile file(secretTestStoreFile)
storePassword secretTestStorePassword
keyAlias secretTestKeyAlias
keyPassword secretTestKeyPassword
} else {
println('secure.properties.test doesn\'t exist')
}
}
release {
if (secureReleasePropertiesFileExists) {
storeFile file(secretReleaseStoreFile)
storePassword secretReleaseStorePassword
keyAlias secretReleaseKeyAlias
keyPassword secretReleaseKeyPassword
if (securityPropertiesFileExists) {
println('The release signing keys are available')
storeFile file(spropStoreFile)
storePassword spropStorePassword
keyAlias spropKeyAlias
keyPassword spropKeyPassword
} else {
println('secure.properties.release doesn\'t exist')
println('The release signing keys are unavailable')
}
}
}
buildTypes {
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
debug {
applicationIdSuffix '.debug' // Allows to install debug and release builds together
versionNameSuffix '-debug'
jniDebuggable true // Enable jni debug build
zipAlignEnabled true
signingConfig signingConfigs.debug
resValue 'string', 'app_name', 'CoMaps Debug'
resValue 'string', 'app_name', 'Debug CoMaps'
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
ndk.debugSymbolLevel = 'none'
if (googleFirebaseServicesEnabled) {
// Keep debug symbols for test lab.
ndk.debugSymbolLevel = 'symbol_table'
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
}
}
release {
if (taskName.contains('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
}
}
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
@@ -294,31 +302,40 @@ android {
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 {
applicationIdSuffix '.test'
versionNameSuffix '-test'
if (taskName.contains('beta')) {
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
if (googleFirebaseServicesEnabled) {
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
}
}
beta {
applicationIdSuffix '.beta'
versionNameSuffix '-beta'
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
// 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.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
matchingFallbacks = ['release'] // use dependencies of "release" build type
resValue 'string', 'app_name', 'CoMaps Test'
matchingFallbacks = ['debug', 'release']
resValue 'string', 'app_name', 'Beta CoMaps'
// Full size symbols are too big for Google, 217mb aab vs 95mb.
ndk.debugSymbolLevel = 'symbol_table'
if (googleFirebaseServicesEnabled) {
firebaseCrashlytics {
nativeSymbolUploadEnabled true
}
firebaseAppDistribution {
// A new beta release is created for each commit.
// Use the last commit message for the release notes.
releaseNotes = getCommitMessage()
groups = 'qa' // Notify only selected people.
serviceCredentialsFile = "$projectDir/firebase-app-distribution.json"
}
}
}
}
@@ -335,58 +352,6 @@ android {
androidResources {
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']
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 {
@@ -398,11 +363,9 @@ android {
}
dependencies {
coreLibraryDesugaring libs.android.tools.desugar
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
// Google Play Location Services
// TODO(@pastk): enabled via microG in all flavors,
// so move google/java/app/organicmaps/location/* into main/ and remove symlinks.
//
// Please add symlinks to google/java/app/organicmaps/location for each new gms-enabled flavor below:
// ```
@@ -411,36 +374,51 @@ dependencies {
// ls -la src/$flavor/java/app/organicmaps/location/GoogleFusedLocationProvider.java
// ```
//
// microG project's FOSS re-implementation of the proprietary libs.google.services.location
implementation libs.microg.services.location
webImplementation 'com.google.android.gms:play-services-location:21.3.0'
googleImplementation 'com.google.android.gms:play-services-location:21.3.0'
huaweiImplementation 'com.google.android.gms:play-services-location:21.3.0'
// This is the microG project's re-implementation which is permissible on
// F-droid because it's Apache-2.0.
fdroidImplementation 'org.microg.gms:play-services-location:0.3.6.244735'
// Google Firebase Services
if (googleFirebaseServicesEnabled) {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:33.5.1')
// Add the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-crashlytics-ndk'
}
// This line is added as a workaround for duplicate classes error caused by some outdated dependency:
// > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
// We don't use Kotlin, but some dependencies are actively using it.
// See https://stackoverflow.com/a/75719642
implementation libs.androidx.core
implementation(platform(libs.jetbrains.kotlin.bom))
implementation libs.androidx.annotation
implementation libs.androidx.appcompat
implementation libs.androidx.car.app
implementation libs.androidx.car.app.projected
implementation libs.androidx.constraintlayout
implementation libs.androidx.fragment
implementation libs.androidx.preference
implementation libs.androidx.recyclerview
implementation libs.androidx.work.runtime
implementation libs.androidx.lifecycle.process
implementation libs.android.material
implementation 'androidx.core:core:1.15.0'
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.1.10'))
implementation 'androidx.annotation:annotation:1.9.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.car.app:app:1.7.0-rc01'
implementation 'androidx.car.app:app-projected:1.7.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.fragment:fragment:1.8.5'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.work:work-runtime:2.10.0'
implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
implementation 'com.google.android.material:material:1.12.0'
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
// https://github.com/organicmaps/organicmaps/issues/6106
implementation libs.google.guava
implementation libs.devnullorthrow.mpandroidchart
implementation libs.jcip.annotations
implementation 'com.google.guava:guava:33.3.0-android'
implementation 'com.github.devnullorthrow:MPAndroidChart:3.2.0-alpha'
implementation 'net.jcip:jcip-annotations:1.0'
// Test Dependencies
androidTestImplementation libs.androidx.test.junit
testImplementation libs.junit
testImplementation libs.mockito.core
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:5.15.2'
testImplementation 'org.mockito:mockito-inline:5.2.0'
}
tasks.withType(JavaCompile) {
@@ -456,6 +434,32 @@ android.applicationVariants.all { variant ->
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 {
enabled.set(false)
track.set('production')

Binary file not shown.

BIN
android/app/debug.keystore Normal file

Binary file not shown.

View File

@@ -1 +1 @@
https://www.comaps.app/
https://organicmaps.app/

View File

@@ -0,0 +1,53 @@
‣ تطبيقنا المجاني لا يتتبعك ولا يحتوي على إعلانات ويحتاج إلى دعمك.
‣ يتم تحسينه باستمرار من قبل المساهمين وفريقنا الصغير، في أوقات فراغنا.
‣ إذا كان هناك شيء خاطئ أو مفقود على الخريطة، يرجى إصلاحه في <b>OpenStreetMap</b> وانظر إلى تعديلاتك في تحديث الخرائط المستقبلية.
‣ إذا لم ينجح التنقل أو البحث، يرجى إرسال بريد إلكتروني إلينا. نرد على <i>كل بريد إلكتروني</i> وسنصلحه في أسرع وقت ممكن!
<b>ملاحظاتك ومراجعات الخمس نجوم هي أفضل المحفزات لنا!</b>
الميزات الرئيسية:
• مجاني، مفتوح المصدر، لا إعلانات، لا تتبع
• خرائط مفصلة غير متصلة بالإنترنت مع أماكن غير موجودة على خرائط Google، وذلك بفضل مجتمع <b>OpenStreetMap</b>
• طرق ركوب الدراجات ومسارات المشي لمسافات طويلة ومسارات المشي
• خطوط الكنتور وملامح الارتفاع والقمم والمنحدرات
• المشي بدوران وركوب الدراجات والملاحة التجريبية بالسيارة مع التوجيه الصوتي
• البحث السريع في وضع عدم الاتصال
• العلامات المرجعية وتتبع التصدير والاستيراد بأشكال KML و KMZ و GPX
• الوضع المظلم لحماية عينيك
لا يوجد نظام وسائل النقل العام وخرائط الأقمار الصناعية وغيرها من الميزات الرائعة <i>حتى الآن</i> في الخرائط العضوية. ولكن مع <i>مساعدتك ودعمك</i>، يمكننا أن نجعل هذا العالم أفضل خطوة بخطوة.
الخرائط العضوية هي <b>نقية وعضوية، مصنوعة من الحب</b>:
• تجربة سريعة مشتعلة في وضع عدم الاتصال
• يحترم خصوصيتك
• يحفظ بطاريتك
• لا توجد رسوم غير متوقعة لبيانات الهاتف المحمول
• سهل الاستخدام، مع تضمين أهم الميزات فقط
خالية من أجهزة التعقب والأشياء السيئة الأخرى:
• لا إعلانات
• لا تتبع
• عدم جمع البيانات
• لا يوجد اتصال هاتفي بالمنزل
• لا تسجيل مزعج
• لا توجد دروس إلزامية
• لا بريد إلكتروني مزعج
• لا توجد إشعارات دفع
• لا توجد أواني حلوى
• لا مبيدات عضوية بالكامل
في Organic Maps نعتقد أن <b>الخصوصية هي حق أساسي من حقوق الإنسان:</b>
• Organic Maps هو مشروع مفتوح المصدر يحركه المجتمع المستقل
• نحن نحمي خصوصيتك من أعين المتطفلين لدى شركات التقنيات الكبيرة
•ابق آمنًا بغض النظر عن مكان وجودك
يتم العثور على أجهزة تعقب صفرية والأذونات المطلوبة بشكل ضئيل فقط وفقًا لتقرير Exodus Privacy.
الرجاء زيارة <b><i>organicmaps.app</i></b> للحصول على مزيد من التفاصيل والأسئلة الشائعة، والاتصال بنا مباشرة على @OrganicMapsApp في Telegram.
ارفض المراقبة - احتضن حريتك.
<b>أعطي Organic Maps تجربة!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
التنقل بالخصوصية - مفتوح المصدر و مُدار من طرف المُجتمع

View File

@@ -0,0 +1 @@
تنزه Organic Maps بدون إنترنت

View File

@@ -0,0 +1 @@
Organic Maps: تنزه والدراجة والقيادة بدون إنترنت

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,53 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -0,0 +1 @@
Organic Maps: offline maps

View File

@@ -0,0 +1 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,53 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -0,0 +1,8 @@
• Новыя дадзеныя OpenStreetMap ад 27 лютага
• Магчымасць уручную расстаўляць прамежкавыя кропкі маршруту
• Экспарт аднаго абранага трэка са спісу
• Палепшаная маршрутызацыя для веласіпедыстаў
• Дададзена сістэмнае апавяшчэнне пры загрузцы карт, фонавыя загрузкі больш не перарываюцца
• Дададзены мігатлівы віджэт запісу трэка
…і шматлікае іншае на omaps.org/news

View File

@@ -0,0 +1 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -0,0 +1 @@
Offline Organic Maps Hike Bike

View File

@@ -0,0 +1 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,53 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -0,0 +1 @@
Organic Maps: gps и навигиране

View File

@@ -0,0 +1 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,10 @@
Organic Maps হল একটি GPS নেভিগেশন অ্যাপ যার গোপনীয়তা রয়েছে, ড্রাইভার, হাইকার এবং সাইক্লিস্টদের জন্য। অ্যাপটিতে গোপনীয়তা সহ নেভিগেশন বৈশিষ্ট্য রয়েছে - কোন অবস্থান ট্র্যাকিং, কোন তথ্য সংগ্রহ এবং কোন বিজ্ঞাপন নেই। অনুসন্ধান, রাউটিং এবং নেভিগেশন সেল ফোন সিগন্যাল ছাড়াই কাজ করে, দূরবর্তী হাইকিং ট্রেইলে ভ্রমণের জন্য আদর্শ বা দুর্বল সংযোগ সহ অবস্থানগুলি। জৈব মানচিত্র সারা বিশ্ব থেকে অবদানকারীদের সাথে ক্রাউড-সোর্সড OpenStreetMap ডেটা ব্যবহার করে। প্রকল্পটি সম্প্রদায়-চালিত, কোডটি ওপেন সোর্স, এবং সম্প্রদায়ের উন্নয়ন এবং সহযোগিতাকে অগ্রাধিকার দেয়।
• কোন সেল সিগন্যাল প্রয়োজন নেই - অনুসন্ধান এবং একটি সংকেত ছাড়া রুট
• দক্ষ ব্যাটারি ব্যবহার - ব্যাটারি ড্রেন হ্রাস
• দ্রুত অনুসন্ধান - দ্রুত অবস্থান খুঁজুন
অর্গানিক ম্যাপে, আমরা গোপনীয়তাকে গুরুত্ব দিই:
• কোন অবস্থান ট্র্যাকিং
• কোন ডেটা সংগ্রহ নেই
• কোন বিজ্ঞাপন নেই

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
গোপনীয়তার সাথে নেভিগেট করুন - সম্প্রদায়-চালিত এবং ওপেন-সোর্স

View File

@@ -0,0 +1 @@
Organic Maps: হাইক বাইক ড্রাইভ

View File

@@ -0,0 +1 @@
Organic Maps: হাইক, বাইক, ড্রাইভ অফলাইন

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,52 @@
‣ La nostra aplicació gratuïta no té cap mena de publicitat ni us fa un seguiment.
‣ És millorada constantment durant el temps lliure dels seus usuaris i el nostre petit equip.
‣ Si hi ha res malament o inacabat al mapa, podeu arreglar-ho a l'<b>OpenStreetMap</b> i veureu els vostres canvis a la propera actualització dels mapes.
‣ Si la navegació o la cerca no funciona, envieu-nos un correu electrònic. Responem a <i>TOTS</i> els correus-e i ho solucionem tan aviat com es pugui.
<b>Els vostres comentaris i comentaris de 5 estrelles són els millors motivadors per a nosaltres!</b>
Característiques clau:
• Gratuït, de codi obert, sense anuncis, sense seguiment
• Mapes detallats fora de línia amb llocs que no existeixen a Google Maps, gràcies a la comunitat de l'<b>OpenStreetMap</b>
• Rutes amb bicicleta, rutes d'excursionisme i senderisme
• Corbes de nivell, perfils d'elevació, cims i pendents
• Passeig, bicicleta i navegació en cotxe amb guia de veu, Android Auto
• Cerca ràpida fora de línia
• Exportació i importació d'adreces d'interès en formats KML, KMZ i GPX
• Mode fosc per a protegir els ulls
No hi ha <i>de moment</i> transport públic, mapes per satèl·lit i altres funcions interessants a l'Organic Maps. Però amb <i>la vostra ajuda i suport</i>, podem millorar aquest món pas a pas.
L'Organic Maps és <b>pur i orgànic, fet amb amor</b>:
• Experiència fora de línia ràpida i brillant
• Respecta la vostra privadesa
• Estalvia la bateria
• Sense càrrecs inesperats de dades mòbils
• Fàcil d'utilitzar, amb només les funcions més importants incloses
Lliure de rastrejadors i altres coses dolentes:
• Sense anuncis
• Sense seguiment
• Sense recollida de dades
• Sense trucades per a vendre-us res
• Sense cap mena de registre
• Sense tutorials obligatoris
• Sense enviar-vos correu brossa
• Sense notificacions push
• Sense crapware
• So̶ns̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purament orgànic
A Organic Maps, creiem que la privadesa <b> és un dret humà fonamental</b>:
• Organic Maps és un projecte de codi obert impulsat per la comunitat independent
• Protegim la privadesa de les mirades indiscretes de les grans multinacionals
• Estigueu segurs siguis on siguis
Segons l'informe de privadesa d'Exodus, no s'ha trobat cap rastrejador i s'utilitzen només els permisos mínims necessaris.
Per a més informació, visiteu el web <b><i>organicmaps.app</i></b> o bé contacteu-nos (en anglès) a @OrganicMapsApp al Telegram.
Rebutgeu la vigilància: accepteu la vostra llibertat.
<b>Proveu els mapes orgànics!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
Mapes comunitaris i de codi obert per a turistes, ciclistes i excursionistes

View File

@@ -0,0 +1 @@
Organic Maps GPS fora de línia

View File

@@ -0,0 +1 @@
Organic Maps: GPS, senderisme i BTT sense dades

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,34 +1,53 @@
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.
‣ Naše bezplatná aplikace vás nesleduje, neobsahuje reklamy a potřebuje vaši podporu.
‣ Je neustále vylepšována přispěvateli a naším malým týmem v našem volném čase.
‣ Pokud je na mapě něco špatně nebo na ní něco chybí, opravte to prosím na <b>OpenStreetMap</b>. Své změny uvidíte v pozdějších aktualizacích map.
‣ Pokud nefunguje navigace nebo vyhledávání, zkontrolujte to prosím nejprve na osm.org a až poté nám napište e-mail. Odpovídáme na <i>KAŽDÝ</i> e-mail a problémy opravujeme jak nejdříve můžeme.
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>Vaše zpětná vazba a 5-hvězdičková hodnocení jsou pro nás nejlepší motivací!</b>
• <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>
Klíčové funkce:
<b>Hlavní funkce</b>:
<ul>
<li>Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google</li>
<li>Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.</li>
<li>Pěší trasy a cyklostezky</li>
<li>Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího</li>
<li>Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu</li>
<li>Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení</li>
<li>Uložení oblíbených míst jedním klepnutím</li>
<li>Offline články z Wikipedie</li>
<li>Vrstva metra a navigace v něm</li>
<li>Záznam tras</li>
<li>Export a import záložek a tras ve formátech KML, KMZ a GPX</li>
<li>Tmavý režim k použití během noci</li>
<li>Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru</li>
</ul>
• Bezplatné, open-source, bez reklam, bez sledování
• Podrobné offline mapy s místy, které neexistují v Mapách Google, díky komunitě <b>OpenStreetMap</b>
• Cyklotrasy, turistické trasy a pěší stezky
• Vrstevnice, výškové profily, vrcholy a svahy
• Pěší, cyklistická a automobilová navigace krok po kroku s hlasovými pokyny a Android Auto
• Rychlý offline vyhledávač
• Export a import záložek a tras ve formátech KML, KMZ a GPX
• Tmavý režim pro ochranu vašich očí
<b>Svoboda je tady</b>
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!
Organic Maps <i>zatím</i> neobsahují cool vychytávky jako veřejnou dopravu nebo satelitní mapy, <i>s vaší pomocí a podporou</i> ale můžeme postupně mapy vylepšovat.
Aplikace Organic Maps je <b>čistá a organická, vytvořená s láskou</b>:
• Neskutečně rychlý offline zážitek
• Respektuje vaše soukromí
• Šetří vaší baterii
• Žádné neočekávané poplatky za mobilní data
• Je jednoduchá na používání, obsahuje pouze nejdůležitější funkce
Neobsahuje sledovací prvky a další špatnosti:
• Žádné reklamy
• Žádné sledování
• Žádné sbírání dat
• Žádné volání domů
• Žádná otravná registrace
• Žádné povinné tutoriály
• Žádný e-mailový spam
• Žádná vyskakovací oznámení
• Žádný crapware
• Ž̶á̶d̶n̶é̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶y̶ Plně organické
V Organic Maps věříme, že <b>soukromí je základní lidské právo</b>:
• Organic Maps jsou nezávislý komunitní open-source projekt
• Chráníme vaše soukromí před zvědavýma očima Big Tech firem
• Nezávisle na vašem umístění jste v bezpečí
Podle hlášení Exodus Privacy neobsahuje aplikace žádné sledovací prvky a vyžaduje pouze minimální množství oprávnění.
Pro další podrobnosti a často kladené dotazy prosím navštivte webové stránky <b><i>organicmaps.app</i></b>. Kontaktovat nás můžete přes @OrganicMapsApp na Telegramu.
Odmítněte sledování - přijměte svou svobodu.
<b>Vyzkoušejte Organic Maps!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -1 +1 @@
Jednoduchá navigace v mapě Objevte více na své cestě Vyvíjeno komunitou
Navigace s ochranou soukromí - vedená komunitou a open-source

View File

@@ -0,0 +1 @@
Organic Maps: pěšky kolo auto

View File

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

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,53 @@
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
<b>Your feedback and 5-star reviews are the best motivators for us!</b>
Key features:
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View File

@@ -0,0 +1 @@
Offline Organic Maps Hike Bike

View File

@@ -0,0 +1 @@
Organic Maps Offline Hike, Bike, GPS Navigation

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,33 +1,53 @@
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent, datensparsam und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
‣ Unsere kostenlose App trackt niemanden, enthält keine Werbung und braucht deine Unterstützung.
‣ Sie wird ständig von Mitwirkenden und unserem kleinen Team verbessert, in unserer Freizeit.
‣ Wenn etwas auf der Karte falsch ist oder fehlt, dann korrigiere es bitte in <b>OpenStreetMap</b> und sieh deine Änderungen in der zukünftigen Kartenaktualisierung.
‣ Sollte die Navigation oder die Suche nicht funktionieren, sende uns bitte eine E-Mail. Wir antworten auf <i>JEDE</i> E-Mail und werden das Problem so schnell wie möglich beheben!
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>Dein Feedback und deine 5-Sterne-Bewertungen sind die beste Motivation für uns!</b>
‣ <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>
Wichtigste Funktionen:
<b>Hauptfunktionen</b>:
<ul>
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
• Kostenlos, Open-Source, keine Werbung, kein Tracking
• Detaillierte Offline-Karten mit Orten, die es auf anderen Karten nicht gibt, dank an die <b>OpenStreetMap</b> Community
Rad-, Wander- und Spazierwege
Höhenlinien, Höhenprofile, Bergspitzen und Steigungen
Schritt-für-Schritt-Navigation für Fußgänger, Radfahrer und Autos mit Sprachführung
Schnelle Offlinesuche
Export und Import von Lesezeichen im KML, KMZ, GPX-Format
Dunkler Modus zum Schutz deiner Augen
<b>Freiheit beginnt hier</b>
Entdecke deine Reise navigiere in der Welt mit Datenschutz!
Öffentlichen Verkehrsmittel, Satellitenbildkarten und viele weitere wichtige Merkmale werden <i>noch</i> nicht unterstützt. Aber mit <i>deiner Hilfe und Unterstützung</i> können wir diese Welt und unsere Karten Schritt für Schritt besser machen.
Organic Maps ist <b>rein, organisch und mit Liebe gemacht</b>:
• Rasend schnelle Offline-Erfahrung
• Respektiert deine Privatsphäre
• Schont deinen Akku
• Keine unerwarteten Gebühren für mobile Daten
• Einfach zu bedienen, nur die wichtigsten Funktionen integriert
Frei von Trackern und schlechten Dingen:
• Keine Werbung
• Kein Tracking
• Keine Datenerfassung
• Kein Telefonieren nach Hause
• Keine lästige Registrierung
• Keine obligatorischen Tutorials
• Kein lästiger E-Mail-Spam
• Keine Push-Benachrichtigungen
• Keine Crapware
• -K̶e̶i̶n̶e̶ ̶P̶e̶s̶t̶i̶z̶i̶d̶e̶ Rein organisch
Wir bei Organic Maps glauben, dass <b>Privatsphäre ein grundlegendes Menschenrecht</b> ist:
• Organic Maps ist ein von einer unabhängigen Gemeinschaft betriebenes Open-Source-Projekt
• Wir schützen deine Privatsphäre vor den neugierigen Augen der großen Technologiekonzerne
• Bleib sicher, egal wo du bist
Keine Tracker und nur minimal erforderliche Berechtigungen sind laut dem Exodus-Datenschutzbericht vorhanden.
Bitte besuche <b><i>organicmaps.app</i></b> Webseite für weitere Details und ein FAQ. Oder kontaktiere uns direkt unter @OrganicMapsApp in Telegram.
Lehne Überwachung ab - lebe deine Freiheit.
<b>Teste Organic Maps!</b>

View File

@@ -1,8 +1,8 @@
• OpenStreetMap Daten vom 2. Juni
Neue Einstellungsoption zum Ändern oder Ausblenden der "Über CoMaps" Schaltfläche ganz links
Routen als GPS Track speichern
Qingdao Metro, Gärtnereien, Leitplanken, Leitern, Studios, Tanzsäle, Feuerstellen und Stundenhotels hinzugefügt
transparente Navigationsleiste im Light Mode
Mastodon und Bluesky Kontaktoptionen für POIs und im OSM-Editor hinzugefügt
• Anzeige der Kompassgradzahl in der Richtungspfeilansicht
• Übersetzungen aktualisiert
Neue OpenStreetMap-Daten vom 27. Februar
Möglichkeit, Zwischenroutenpunkte manuell zu arrangieren
Einen einzelnen ausgewählten Track aus der Liste teilen
Verbesserte Routenführung für Fahrräder
Beim Herunterladen von Karten eine Systembenachrichtigung anzeigen und Hintergrunddownloads nicht unterbrechen
Ein blinkendes Trackaufzeichnungs-Widget hinzugefügt
…weitere Details unter omaps.org/news

View File

@@ -1 +1 @@
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt
Navigieren mit Datenschutz - Community-gesteuert & Open-Source

View File

@@ -0,0 +1 @@
Organic Maps Offline Karten

View File

@@ -1 +1 @@
CoMaps Offline navigieren mit Datenschutz
Organic Maps Offline Wandern, Radfahren, GPS-Navi

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,10 @@
Το Organic Maps είναι μια εφαρμογή πλοήγησης GPS με απόρρητο, για οδηγούς, πεζοπόρους και ποδηλάτες. Η εφαρμογή διαθέται πλοήγηση με απόρρητο - χωρίς παρακολούθηση τοποθεσίας, χωρίς συλλογή δεδομένων και χωρίς διαφημίσεις. Η αναζήτηση, η δρομολόγηση και η πλοήγηση λειτουργούν χωρίς σήμα κινητού τηλεφώνου, ιδανικά για ταξίδι σε μακρινά μονοπάτια πεζοπορίας ή τοποθεσίες με κακές συνδέσεις. Το Organic Maps χρησιμοποιεί τα crowd-sourced δεδομένα του OpenStreetMap με συνεισφέροντες απ' όλη την υφήλιο. Το έργο βασίζεται στην κοινότητα, ο κώδικας είναι ανοιχτού κώδικα, και δίνει προτεραιότητα στην ανάπτυξη και τη συνεργασία της κοινότητας.
• Δεν Απαιτείται Σήμα Κινητής - Αναζήτηση & δρομολόγηση χωρίς σήμα
• Αποτελεσματική Χρήση Μπαταρίας - Μειωμένη αποστράγγιση μπαταρίας
• Γρήγορη Αναζήτηση - Βρείτε γρήγορα τοποθεσίες
Στο Organic Maps, εκτιμούμε το απόρρητο:
• Όχι Παρακολούθηση Τοποθεσίας
• Όχι Συλλογή Δεδομένων
• Όχι Διαφημίσεις

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

View File

@@ -0,0 +1 @@
Navigate with Privacy - Community-Driven & Open-Source

View File

@@ -0,0 +1 @@
Organic Maps: Hike Bike Drive

View File

@@ -0,0 +1 @@
Organic Maps: Hike, Bike, Drive Offline

View File

@@ -0,0 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -1,34 +1,53 @@
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.
‣ Our free app does not track you, does not have ads, and it needs your support.
‣ It is constantly being improved by contributors and our small team, in our free time.
‣ If something is wrong or missing on the map, please fix it in <b>OpenStreetMap</b> and see your changes in the future maps update.
‣ If navigation or search doesn't work, please check it on osm.org first, and then email us. We reply to <i>EVERY</i> email, and we'll fix it ASAP!
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>Your feedback and 5-star reviews are the best motivators for us!</b>
‣ <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>Simple and Polished</b>: essential easy to use features that just work.
‣ <b>Saves Your Battery and Space</b>: Doesnt drain your battery like other navigation apps. Compact maps save precious space on your phone.
‣ <b>Free and Built by the Community</b>: People like you helped build the app by adding places to OpenStreetMap, testing and giving feedback on features and contributing their development skills and money.
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
Key features:
<b>Main Features</b>:
<ul>
<li>Downloadable detailed maps with places which are not available with Google Maps</li>
<li>Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc</li>
<li>Walking paths and cycleways</li>
<li>Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more</li>
<li>Search by name or an address or by point of interest category</li>
<li>Navigation with voice announcements for walking, cycling, or driving</li>
<li>Bookmark your favorite places with a single tap</li>
<li>Offline Wikipedia articles</li>
<li>Subway transit layer and directions</li>
<li>Track recording</li>
<li>Export and import bookmarks and tracks in KML, KMZ, GPX formats</li>
<li>A dark mode to use during the night</li>
<li>Improve map data for everyone using a basic built-in editor</li>
</ul>
• Free, open-source, no ads, no tracking
• Detailed offline maps with places that don't exist on Google maps, thanks to the <b>OpenStreetMap</b> community
• Cycling routes, hiking trails, and walking paths
• Contour lines, elevation profiles, peaks, and slopes
• Turn-by-turn walking, cycling, and car navigation with voice guidance and Android Auto
• Fast offline search
• Bookmarks and tracks export and import in KML, KMZ, GPX formats
• Dark mode to protect your eyes
<b>Freedom Is Here</b>
Discover your journey, navigate the world with privacy and community at the forefront!
There is no public transport, satellite maps, and other cool features <i>yet</i> in Organic Maps. But with <i>your help and support</i>, we can make better maps step by step.
Organic Maps is <b>pure and organic, made with love</b>:
• Blazing fast offline experience
• Respects your privacy
• Saves your battery
• No unexpected mobile data charges
• Simple to use, with only most important features included
Free from trackers and other bad stuff:
• No ads
• No tracking
• No data collection
• No phoning home
• No annoying registration
• No mandatory tutorials
• No noisy email spam
• No push notifications
• No crapware
• N̶o̶ ̶p̶e̶s̶t̶i̶c̶i̶d̶e̶s̶ Purely organic
At Organic Maps, we believe that <b>privacy is a fundamental human right</b>:
• Organic Maps is an indie community-driven open-source project
• We protect privacy from Big Tech's prying eyes
• Stay safe no matter wherever you are
Zero trackers and only minimally required permissions are found according to Exodus Privacy Report.
Please visit <b><i>organicmaps.app</i></b> website for additional details and FAQ, and contact us directly at @OrganicMapsApp in Telegram.
Reject surveillance - embrace your freedom.
<b>Give Organic Maps a try!</b>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,8 +1,8 @@
• OpenStreetMap data as of June 2
add a setting to change the leftmost button or hide it
save built routes as tracks
add Qingdao metro, plant nurseries, highway guard rails, ladders, studios, dance venues, firepits, love hotels
transparent system navigation bar in the light mode
add Mastodon and Bluesky contact options to POIs and OSM editor
• display Azimuth angle in direction arrow view
• update translations
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
…more details at omaps.org/news

View File

@@ -1 +1 @@
Easy map navigation - Discover more of your journey - Powered by the community
Navigate with Privacy - Community-Driven & Open-Source

View File

@@ -0,0 +1 @@
Organic Maps: Hike Bike Drive

View File

@@ -1 +1 @@
CoMaps - Hike, Bike, Drive Offline with Privacy
Organic Maps: Hike, Bike, Drive Offline

View File

@@ -1 +1 @@
https://www.youtube.com/watch?v=dK-CUuy82Uc

View File

@@ -0,0 +1,53 @@
‣ Nuestra aplicación gratuita no te rastrea, no tiene anuncios y necesita tu apoyo.
‣ Está siendo mejorado constantemente por los colaboradores y nuestro pequeño equipo, en nuestro tiempo libre.
‣ Si algo está mal o falta en el mapa, corríjalo en <b>OpenStreetMap</b> y vea sus cambios en la futura actualización de mapas.
‣ Si la navegación o la búsqueda no funcionan, compruébelo primero en osm.org y luego envíenos un correo electrónico. ¡Respondemos a <i>TODOS los</i> correos electrónicos y lo solucionaremos lo antes posible!
<b>¡Sus comentarios y reseñas de 5 estrellas son los mejores motivadores para nosotros!</b>
Características principales:
• Gratis, de código abierto, sin anuncios, sin seguimiento
• Mapas detallados sin conexión con lugares que no existen en Google Maps, gracias a la comunidad <b>OpenStreetMap</b>
• Rutas en bicicleta, rutas de senderismo y senderos
• Curvas de nivel, perfiles de elevación, picos y pendientes
• Navegación paso a paso a pie, en bicicleta y en coche con guía de voz y Android Auto
• Búsqueda rápida sin conexión
• Exportación e importación de marcadores y pistas en formatos KML, KMZ, GPX
• Modo oscuro para proteger tus ojos
<i>Todavía</i> no hay transporte público, mapas satelitales y otras características interesantes en Organic Maps. Pero con <i>su ayuda y apoyo</i>, podemos hacer mejores mapas paso a paso.
Organic Maps es <b>puro y orgánico, hecho con amor</b>:
• Experiencia offline ultrarrápida
• Respeta tu privacidad
• Ahorra batería
• Sin cargos inesperados por datos móviles
• Fácil de usar, con sólo las características más importantes incluidas
Libre de rastreadores y otras cosas malas:
• Sin anuncios
• Sin seguimiento
• Ausencia de recopilación de datos
• No hay llamadas a casa
• Sin registro molesto
• No hay tutoriales obligatorios
• No hay spam de correo electrónico ruidoso
• No hay notificaciones push
• Sin crapware
• N̶o̶p̶e̶s̶t̶i̶i̶i̶i̶e̶s̶s̶ puramente orgánico
En Organic Maps, creemos que <b>la privacidad es un derecho humano fundamental</b>:
• Organic Maps es un proyecto independiente de código abierto impulsado por la comunidad
• Protegemos la privacidad de las miradas indiscretas de las grandes tecnológicas
• Mantente seguro estés donde estés
De acuerdo con el Informe de privacidad de Exodus, no se encuentran rastreadores y solo se requieren permisos mínimos.
Visite <b><i>organicmaps.app</i></b> sitio web para obtener más detalles y preguntas frecuentes, y contáctenos directamente en @OrganicMapsApp en Telegram.
Rechaza la vigilancia, abraza tu libertad.
<b>¡Dale una oportunidad a Organic Maps!</b>

View File

@@ -0,0 +1,8 @@
• 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 flashing Track Recording widget
…more details at omaps.org/news

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