Compare commits
1 Commits
generate-2
...
hb0nd-url-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34e9b17c33 |
@@ -1,61 +1,48 @@
|
|||||||
# Configuration file for clang-format, based on docs/CPP_STYLE.md.
|
# Configuration file for clang-format, based on docs/CPP_STYLE.md.
|
||||||
|
|
||||||
|
---
|
||||||
BasedOnStyle: Google
|
BasedOnStyle: Google
|
||||||
|
|
||||||
AccessModifierOffset: -2
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
|
||||||
AlignConsecutiveMacros: AcrossEmptyLinesAndComments
|
|
||||||
AlignEscapedNewlines: LeftWithLastLine
|
|
||||||
AlignOperands: AlignAfterOperator
|
AlignOperands: AlignAfterOperator
|
||||||
AllowShortBlocksOnASingleLine: Empty
|
AllowShortBlocksOnASingleLine: Empty
|
||||||
AllowShortCaseLabelsOnASingleLine: true
|
|
||||||
AllowShortFunctionsOnASingleLine: Inline
|
|
||||||
AllowShortIfStatementsOnASingleLine: Never
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AllowShortCaseLabelsOnASingleLine: true
|
||||||
BraceWrapping:
|
BraceWrapping:
|
||||||
AfterCaseLabel: true
|
AfterCaseLabel: true
|
||||||
AfterClass: true
|
AfterClass: true
|
||||||
AfterControlStatement: Always
|
AfterControlStatement: Always
|
||||||
AfterEnum: true
|
AfterEnum: true
|
||||||
AfterExternBlock: true
|
|
||||||
AfterFunction: true
|
AfterFunction: true
|
||||||
AfterNamespace: true
|
AfterNamespace: true
|
||||||
AfterObjCDeclaration: true
|
AfterObjCDeclaration: true
|
||||||
AfterStruct: true
|
AfterStruct: true
|
||||||
AfterUnion: true
|
AfterUnion: true
|
||||||
|
AfterExternBlock: true
|
||||||
BeforeCatch: true
|
BeforeCatch: true
|
||||||
BeforeElse: true
|
BeforeElse: true
|
||||||
BeforeLambdaBody: true
|
BeforeLambdaBody: true
|
||||||
BeforeWhile: true
|
BeforeWhile: true
|
||||||
|
IndentBraces: false
|
||||||
SplitEmptyFunction: false
|
SplitEmptyFunction: false
|
||||||
SplitEmptyNamespace: false
|
|
||||||
SplitEmptyRecord: false
|
SplitEmptyRecord: false
|
||||||
BinPackArguments: true
|
SplitEmptyNamespace: false
|
||||||
BinPackParameters: true
|
|
||||||
BreakAfterJavaFieldAnnotations: true
|
|
||||||
BreakBeforeBraces: Custom
|
BreakBeforeBraces: Custom
|
||||||
BreakConstructorInitializers: BeforeComma
|
BreakConstructorInitializers: BeforeComma
|
||||||
BreakInheritanceList: BeforeComma
|
BreakInheritanceList: BeforeComma
|
||||||
ColumnLimit: 120
|
ColumnLimit: 120
|
||||||
ConstructorInitializerIndentWidth: 2
|
ConstructorInitializerIndentWidth: 2
|
||||||
ContinuationIndentWidth: 4
|
ContinuationIndentWidth: 2
|
||||||
DerivePointerAlignment: false
|
DerivePointerAlignment: false
|
||||||
EmptyLineBeforeAccessModifier: Always
|
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
IndentExternBlock: NoIndent
|
IndentExternBlock: NoIndent
|
||||||
InsertBraces: false
|
|
||||||
InsertNewlineAtEOF: true
|
InsertNewlineAtEOF: true
|
||||||
LambdaBodyIndentation: OuterScope
|
PackConstructorInitializers: Never
|
||||||
PackConstructorInitializers: CurrentLine
|
|
||||||
PointerAlignment: Middle
|
PointerAlignment: Middle
|
||||||
RemoveBracesLLVM: true
|
|
||||||
RemoveSemicolon: true
|
|
||||||
QualifierAlignment: Right
|
QualifierAlignment: Right
|
||||||
SpacesInContainerLiterals: false
|
SpacesInContainerLiterals: false
|
||||||
Standard: Latest
|
Standard: Latest
|
||||||
TabWidth: 2
|
TabWidth: 2
|
||||||
|
UseTab: Never
|
||||||
---
|
|
||||||
Language: Java
|
|
||||||
AllowShortFunctionsOnASingleLine: Empty
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
# Files that should not be formatted.
|
|
||||||
./3party
|
|
||||||
# A patched copy of the https://registry.khronos.org/OpenGL/api/GLES3/gl3.h
|
|
||||||
./android/sdk/src/main/cpp/app/organicmaps/sdk/opengl/gl3stub.h
|
|
||||||
# Formatting it leads to crashes in runtime. Newer protobuf may fix it.
|
|
||||||
./libs/indexer/drules_struct.pb.cc
|
|
||||||
# No need to format this 3party tool.
|
|
||||||
tools/osmctools/*.c
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
name: 🐞 Bug Report
|
name: 🐞 Bug Report
|
||||||
description: Report a problem you've encountered
|
description: Report a problem you've encountered
|
||||||
|
title: "bug: "
|
||||||
labels:
|
labels:
|
||||||
- bug
|
- bug
|
||||||
body:
|
body:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
name: "💡 Feature Request"
|
name: "💡 Feature Request"
|
||||||
description: "Suggest an idea or improvement for CoMaps"
|
description: "Suggest an idea or improvement for CoMaps"
|
||||||
|
title: "feat: "
|
||||||
labels:
|
labels:
|
||||||
- "enhancement"
|
- "enhancement"
|
||||||
body:
|
body:
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ on:
|
|||||||
- track_generator/**
|
- track_generator/**
|
||||||
- xcode/**
|
- xcode/**
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android-google-beta:
|
android-google-beta:
|
||||||
name: Android Google Beta
|
name: Android Google Beta
|
||||||
@@ -68,6 +71,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Compile
|
- name: Compile
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ on:
|
|||||||
- track_generator/**
|
- track_generator/**
|
||||||
- xcode/**
|
- xcode/**
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
name: Android Lint
|
name: Android Lint
|
||||||
@@ -48,6 +51,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
@@ -86,6 +93,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 5 * * 0' # Once per week at 05:00 UTC
|
- cron: '0 5 * * 0' # Once per week at 05:00 UTC
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
precondition:
|
precondition:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -70,6 +73,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Compile
|
- name: Compile
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ name: Android Release Metadata
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android-release-metadata:
|
android-release-metadata:
|
||||||
name: Upload Google Play metadata
|
name: Upload Google Play metadata
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ on:
|
|||||||
env:
|
env:
|
||||||
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
|
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
|
||||||
FDROID_VERSION: android/app/src/fdroid/play/version.yaml
|
FDROID_VERSION: android/app/src/fdroid/play/version.yaml
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tag:
|
tag:
|
||||||
@@ -116,6 +117,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Set up SDK
|
- name: Set up SDK
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
||||||
|
|||||||
@@ -3,20 +3,20 @@ on:
|
|||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- packaging/app.comaps.comaps.metainfo.xml
|
- packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate-appstream:
|
validate-appstream:
|
||||||
name: Validate appstream metadata xml
|
name: Validate appstream metadata xml
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
sparse-checkout: |
|
sparse-checkout: |
|
||||||
packaging/app.comaps.comaps.metainfo.xml
|
packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|
||||||
- name: Install appstream validator and flatpak Builder
|
- name: Install appstream validator and flatpak Builder
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -29,8 +29,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Lint appstream data with flatpak Builder
|
- name: Lint appstream data with flatpak Builder
|
||||||
shell: bash
|
shell: bash
|
||||||
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.comaps.comaps.metainfo.xml
|
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|
||||||
- name: Run appstreamcli in pedantic mode
|
- name: Run appstreamcli in pedantic mode
|
||||||
shell: bash
|
shell: bash
|
||||||
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.comaps.comaps.metainfo.xml
|
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
should-run-check:
|
should-run-check:
|
||||||
name: Should run coverage
|
name: Should run coverage
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
|
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
|
||||||
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
|
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
|
||||||
@@ -59,9 +59,14 @@ jobs:
|
|||||||
coverage:
|
coverage:
|
||||||
needs: should-run-check
|
needs: should-run-check
|
||||||
name: Generate coverage report
|
name: Generate coverage report
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
|
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -89,6 +94,10 @@ jobs:
|
|||||||
llvm \
|
llvm \
|
||||||
gcovr
|
gcovr
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
name: DCO
|
name: dco
|
||||||
on: [pull_request]
|
on: [pull_request]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
runs-on: ubuntu-latest
|
runs-on: codeberg-tiny
|
||||||
steps:
|
steps:
|
||||||
- name: Check for Developer Certificate of Origin (DCO) compliance
|
- uses: https://github.com/KineticCafe/actions-dco@v1
|
||||||
uses: https://github.com/KineticCafe/actions-dco@fb284c903a7673a3d4b0bdd104479a6f0d46dae7 # v1.3.6
|
|
||||||
@@ -3,20 +3,20 @@ on:
|
|||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- qt/res/linux/app.comaps.comaps.desktop
|
- qt/res/app.organicmaps.desktop.desktop
|
||||||
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate-desktop-file:
|
validate-desktop-file:
|
||||||
name: Validate .desktop file
|
name: Validate .desktop file
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
sparse-checkout: |
|
sparse-checkout: |
|
||||||
qt/res/linux/app.comaps.comaps.desktop
|
qt/res/app.organicmaps.desktop.desktop
|
||||||
|
|
||||||
- name: Install desktop-file-validate tool
|
- name: Install desktop-file-validate tool
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -27,4 +27,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Validate desktop file
|
- name: Validate desktop file
|
||||||
shell: bash
|
shell: bash
|
||||||
run: desktop-file-validate qt/res/linux/app.comaps.comaps.desktop && echo "Successfully validated .desktop file"
|
run: desktop-file-validate qt/res/app.organicmaps.desktop.desktop && echo "Successfully validated .desktop file"
|
||||||
|
|||||||
@@ -31,13 +31,18 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
linux-no-unity:
|
linux-no-unity:
|
||||||
name: Linux no unity build
|
name: Linux no unity build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
# Cancels previous jobs if the same branch or PR was updated again.
|
# Cancels previous jobs if the same branch or PR was updated again.
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
|
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -66,6 +71,10 @@ jobs:
|
|||||||
libqt6positioning6-plugins \
|
libqt6positioning6-plugins \
|
||||||
libqt6positioning6
|
libqt6positioning6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
@@ -90,7 +99,7 @@ jobs:
|
|||||||
|
|
||||||
linux-matrix:
|
linux-matrix:
|
||||||
name: Linux builds and tests
|
name: Linux builds and tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -102,6 +111,11 @@ jobs:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -128,19 +142,15 @@ jobs:
|
|||||||
libqt6positioning6-plugins \
|
libqt6positioning6-plugins \
|
||||||
libqt6positioning6
|
libqt6positioning6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
|
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
|
||||||
|
|
||||||
- name: Configure repository
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
SKIP_MAP_DOWNLOAD: 1
|
|
||||||
SKIP_GENERATE_SYMBOLS: 1
|
|
||||||
SKIP_GENERATE_DRULES: 1
|
|
||||||
run: ./configure.sh
|
|
||||||
|
|
||||||
- name: CMake
|
- name: CMake
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
10
.github/workflows/android-check.yaml
vendored
@@ -7,7 +7,6 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
SKIP_MAP_DOWNLOAD: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -23,9 +22,9 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
- name: Configure repository
|
- name: Init boost, generate textures
|
||||||
shell: bash
|
shell: bash
|
||||||
run: SKIP_GENERATE_SYMBOLS=1 ./configure.sh
|
run: ./configure.sh --skip-map-download
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -66,7 +65,6 @@ jobs:
|
|||||||
libxinerama-dev \
|
libxinerama-dev \
|
||||||
libxcursor-dev \
|
libxcursor-dev \
|
||||||
libxi-dev \
|
libxi-dev \
|
||||||
python3-protobuf \
|
|
||||||
zlib1g-dev
|
zlib1g-dev
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
@@ -78,6 +76,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Init boost, generate textures
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh --skip-map-download
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
51
.github/workflows/code-style-check.yaml
vendored
@@ -1,51 +0,0 @@
|
|||||||
name: Code style check
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
paths: # Should stay in sync with tools/unix/clang-format.sh
|
|
||||||
- '.github/workflows/code-style-check.yaml'
|
|
||||||
- 'android/app/src/**.java'
|
|
||||||
- 'android/sdk/src/**.java'
|
|
||||||
- 'android/sdk/src/main/cpp/**.[ch]pp'
|
|
||||||
- 'dev_sandbox/**.[ch]pp'
|
|
||||||
- 'generator/**.[ch]pp'
|
|
||||||
- 'iphone/**.[ch]pp'
|
|
||||||
- 'iphone/**.[hm]'
|
|
||||||
- 'iphone/**.mm'
|
|
||||||
- 'libs/**.[ch]pp'
|
|
||||||
- 'libs/**.[hm]'
|
|
||||||
- '!libs/indexer/drules_struct.pb.h'
|
|
||||||
- 'libs/**.mm'
|
|
||||||
- 'qt/**.[ch]pp'
|
|
||||||
- 'qt/**.h'
|
|
||||||
- 'tools/**.[ch]pp'
|
|
||||||
- '.clang-format'
|
|
||||||
- '.clang-format-ignore'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
code-style-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Install clang-format
|
|
||||||
run: |
|
|
||||||
sudo apt purge -y clang-format-18 # Remove default old version of clang-format
|
|
||||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
|
||||||
echo 'deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main' | sudo tee /etc/apt/sources.list.d/llvm-toolchain-noble-20.list
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y clang-format-20
|
|
||||||
sudo update-alternatives --force --install /usr/bin/clang-format clang-format /usr/bin/clang-format-20 10
|
|
||||||
sudo update-alternatives --force --install /usr/bin/git-clang-format git-clang-format /usr/bin/git-clang-format-20 10
|
|
||||||
clang-format --version
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Check code style
|
|
||||||
run: tools/unix/clang-format.sh
|
|
||||||
|
|
||||||
- name: Post clang-format comments
|
|
||||||
if: failure()
|
|
||||||
uses: reviewdog/action-suggester@v1.21.0
|
|
||||||
with:
|
|
||||||
tool_name: clang-format
|
|
||||||
fail_level: error
|
|
||||||
3
.github/workflows/ios-check.yaml
vendored
@@ -30,7 +30,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
brew install qt \
|
brew install qt \
|
||||||
optipng
|
optipng
|
||||||
pip3 install "protobuf<3.21" --break-system-packages
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -38,7 +37,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
||||||
|
|
||||||
- name: Configure repository
|
- name: Init boost, download World map, generate textures
|
||||||
shell: bash
|
shell: bash
|
||||||
run: ./configure.sh
|
run: ./configure.sh
|
||||||
|
|
||||||
|
|||||||
32
.gitignore
vendored
@@ -9,32 +9,27 @@ Makefile.Release
|
|||||||
object_script.*.Debug
|
object_script.*.Debug
|
||||||
object_script.*.Release
|
object_script.*.Release
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
*.local.*
|
|
||||||
|
|
||||||
stxxl.errlog
|
stxxl.errlog
|
||||||
stxxl.log
|
stxxl.log
|
||||||
screenlog.0
|
screenlog.0
|
||||||
|
|
||||||
|
data/styles/*/*/out/*
|
||||||
|
data/resources-*_design/*
|
||||||
# symbols png/sdf are now generated at build
|
# symbols png/sdf are now generated at build
|
||||||
data/symbols/**/symbols.png
|
data/resources-*_*/symbols.png
|
||||||
data/symbols/**/symbols.sdf
|
data/resources-*_*/symbols.sdf
|
||||||
|
data/drules_proto_default_design.bin
|
||||||
|
data/colors_design.txt
|
||||||
|
data/patterns_design.txt
|
||||||
data/bookmarks
|
data/bookmarks
|
||||||
data/edits.xml
|
data/edits.xml
|
||||||
data/World.mwm
|
data/World.mwm
|
||||||
data/WorldCoasts.mwm
|
data/WorldCoasts.mwm
|
||||||
data/world_mwm/*
|
|
||||||
data/*_hash
|
# generated when running tests. NOT the lowercase 'testing' which should be kept.
|
||||||
data/drules_proto*
|
Testing
|
||||||
data/classificator.txt*
|
!testing
|
||||||
data/types.txt*
|
|
||||||
data/visibility.txt*
|
|
||||||
data/colors.txt*
|
|
||||||
data/patterns.txt*
|
|
||||||
# TODO: designer is not used at the moment
|
|
||||||
# data/symbols/*/design/
|
|
||||||
# data/colors_design.txt
|
|
||||||
# data/patterns_design.txt
|
|
||||||
|
|
||||||
# Compiled Python
|
# Compiled Python
|
||||||
*.pyc
|
*.pyc
|
||||||
@@ -53,9 +48,10 @@ omim.sdf
|
|||||||
*.suo
|
*.suo
|
||||||
*.aps
|
*.aps
|
||||||
*.rc
|
*.rc
|
||||||
!qt/res/windows/windows.rc
|
!qt/res/windows.rc
|
||||||
*.pdb
|
*.pdb
|
||||||
out/
|
out/*
|
||||||
|
qt/mapswithme.log
|
||||||
|
|
||||||
# XCode
|
# XCode
|
||||||
xcode/keys/*
|
xcode/keys/*
|
||||||
|
|||||||
4
.gitmodules
vendored
@@ -65,7 +65,3 @@
|
|||||||
[submodule "3party/imgui/imgui"]
|
[submodule "3party/imgui/imgui"]
|
||||||
path = 3party/imgui/imgui
|
path = 3party/imgui/imgui
|
||||||
url = https://github.com/ocornut/imgui
|
url = https://github.com/ocornut/imgui
|
||||||
[submodule "3party/glaze"]
|
|
||||||
path = 3party/glaze
|
|
||||||
url = https://github.com/stephenberry/glaze
|
|
||||||
branch = main
|
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ endif()
|
|||||||
|
|
||||||
add_subdirectory(agg)
|
add_subdirectory(agg)
|
||||||
add_subdirectory(bsdiff-courgette)
|
add_subdirectory(bsdiff-courgette)
|
||||||
add_subdirectory(glaze)
|
|
||||||
add_subdirectory(minizip)
|
add_subdirectory(minizip)
|
||||||
add_subdirectory(open-location-code)
|
add_subdirectory(open-location-code)
|
||||||
add_subdirectory(opening_hours)
|
add_subdirectory(opening_hours)
|
||||||
|
|||||||
@@ -4,9 +4,7 @@ set(FT_DISABLE_HARFBUZZ ON)
|
|||||||
add_subdirectory(freetype)
|
add_subdirectory(freetype)
|
||||||
|
|
||||||
# Fix warning with ONE_PIXEL macro clash.
|
# Fix warning with ONE_PIXEL macro clash.
|
||||||
if(NOT MSVC)
|
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
||||||
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Use ft2build.h from the current directory instead of the default.
|
# Use ft2build.h from the current directory instead of the default.
|
||||||
target_include_directories(freetype
|
target_include_directories(freetype
|
||||||
|
|||||||
@@ -11,23 +11,14 @@ target_include_directories(${PROJECT_NAME}
|
|||||||
harfbuzz/src
|
harfbuzz/src
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MSVC)
|
# Keep these settigns in sync with xcode/harfbuzz project.
|
||||||
target_compile_options(${PROJECT_NAME}
|
target_compile_options(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
/GR-
|
-fno-rtti
|
||||||
/EHsc-
|
-fno-exceptions
|
||||||
/Zc:threadSafeInit-
|
-fno-threadsafe-statics
|
||||||
)
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
||||||
else()
|
)
|
||||||
# Keep these settings in sync with xcode/harfbuzz project.
|
|
||||||
target_compile_options(${PROJECT_NAME}
|
|
||||||
PRIVATE
|
|
||||||
-fno-rtti
|
|
||||||
-fno-exceptions
|
|
||||||
-fno-threadsafe-statics
|
|
||||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME}
|
target_compile_definitions(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
@@ -37,20 +28,14 @@ target_compile_definitions(${PROJECT_NAME}
|
|||||||
#$<$<BOOL:${APPLE}>:HAVE_CORETEXT>
|
#$<$<BOOL:${APPLE}>:HAVE_CORETEXT>
|
||||||
HAVE_ATEXIT
|
HAVE_ATEXIT
|
||||||
HAVE_GETPAGESIZE
|
HAVE_GETPAGESIZE
|
||||||
|
HAVE_MMAP
|
||||||
HAVE_MPROTECT
|
HAVE_MPROTECT
|
||||||
|
HAVE_PTHREAD
|
||||||
HAVE_SYSCONF
|
HAVE_SYSCONF
|
||||||
|
HAVE_SYS_MMAN_H
|
||||||
|
HAVE_UNISTD_H
|
||||||
)
|
)
|
||||||
|
|
||||||
if (NOT MSVC)
|
|
||||||
target_compile_definitions(${PROJECT_NAME}
|
|
||||||
PRIVATE
|
|
||||||
HAVE_MMAP
|
|
||||||
HAVE_PTHREAD
|
|
||||||
HAVE_SYS_MMAN_H
|
|
||||||
HAVE_UNISTD_H
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} Freetype::Freetype)
|
target_link_libraries(${PROJECT_NAME} Freetype::Freetype)
|
||||||
|
|
||||||
add_library(harfbuzz::harfbuzz ALIAS harfbuzz)
|
add_library(harfbuzz::harfbuzz ALIAS harfbuzz)
|
||||||
|
|||||||
@@ -172,7 +172,6 @@ add_library(icuuc
|
|||||||
icu/icu4c/source/common/uvector.cpp
|
icu/icu4c/source/common/uvector.cpp
|
||||||
icu/icu4c/source/common/uvectr32.cpp
|
icu/icu4c/source/common/uvectr32.cpp
|
||||||
icu/icu4c/source/common/uvectr64.h
|
icu/icu4c/source/common/uvectr64.h
|
||||||
icu/icu4c/source/common/wintz.cpp
|
|
||||||
icu/icu4c/source/common/wintz.h
|
icu/icu4c/source/common/wintz.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ set(SRC
|
|||||||
protobuf/src/google/protobuf/message_lite.cc
|
protobuf/src/google/protobuf/message_lite.cc
|
||||||
protobuf/src/google/protobuf/repeated_field.cc
|
protobuf/src/google/protobuf/repeated_field.cc
|
||||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
||||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc
|
|
||||||
protobuf/src/google/protobuf/stubs/bytestream.cc
|
protobuf/src/google/protobuf/stubs/bytestream.cc
|
||||||
protobuf/src/google/protobuf/stubs/common.cc
|
protobuf/src/google/protobuf/stubs/common.cc
|
||||||
protobuf/src/google/protobuf/stubs/int128.cc
|
protobuf/src/google/protobuf/stubs/int128.cc
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
#include <boost/utility.hpp>
|
#include <boost/utility.hpp>
|
||||||
#include <boost/type_traits/is_pod.hpp>
|
#include <boost/type_traits/is_pod.hpp>
|
||||||
|
#include <boost/iostreams/device/mapped_file.hpp>
|
||||||
|
|
||||||
#include "mappable_vector.hpp"
|
#include "mappable_vector.hpp"
|
||||||
|
|
||||||
@@ -282,6 +283,12 @@ namespace succinct { namespace mapper {
|
|||||||
return mapper.bytes_read();
|
return mapper.bytes_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
size_t map(T& val, boost::iostreams::mapped_file_source const& m, uint64_t flags = 0, const char* friendly_name = "<TOP>")
|
||||||
|
{
|
||||||
|
return map(val, m.data(), flags, friendly_name);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
uint64_t size_of(T& val)
|
uint64_t size_of(T& val)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <boost/iterator/iterator_facade.hpp>
|
#include <boost/iterator/iterator_facade.hpp>
|
||||||
|
#include <boost/iostreams/device/mapped_file.hpp>
|
||||||
|
|
||||||
namespace succinct { namespace util {
|
namespace succinct { namespace util {
|
||||||
|
|
||||||
@@ -204,6 +205,29 @@ namespace succinct { namespace util {
|
|||||||
std::string m_cur_value;
|
std::string m_cur_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct mmap_lines
|
||||||
|
{
|
||||||
|
typedef buffer_line_iterator iterator;
|
||||||
|
typedef buffer_line_iterator const_iterator;
|
||||||
|
|
||||||
|
mmap_lines(std::string filename)
|
||||||
|
: m_map(filename)
|
||||||
|
{}
|
||||||
|
|
||||||
|
const_iterator begin() const
|
||||||
|
{
|
||||||
|
return const_iterator(m_map.data(), m_map.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator end() const
|
||||||
|
{
|
||||||
|
return const_iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
boost::iostreams::mapped_file_source m_map;
|
||||||
|
};
|
||||||
|
|
||||||
struct input_error : std::invalid_argument
|
struct input_error : std::invalid_argument
|
||||||
{
|
{
|
||||||
input_error(std::string const& what)
|
input_error(std::string const& what)
|
||||||
|
|||||||
@@ -19,18 +19,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "vulkan_wrapper.h"
|
#include "vulkan_wrapper.h"
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#endif
|
|
||||||
#ifndef NOMINMAX
|
|
||||||
#define NOMINMAX
|
|
||||||
#endif
|
|
||||||
#include <windows.h>
|
|
||||||
#else
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
int InitVulkan(void) {
|
int InitVulkan(void) {
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
@@ -41,9 +30,6 @@ int InitVulkan(void) {
|
|||||||
if (!libvulkan) {
|
if (!libvulkan) {
|
||||||
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||||
}
|
}
|
||||||
#elif defined( _WIN32 )
|
|
||||||
HMODULE libvulkan = LoadLibraryA("vulkan-1.dll");
|
|
||||||
auto dlsym = [](HMODULE h, char const * name) { return GetProcAddress(h, name); };
|
|
||||||
#else
|
#else
|
||||||
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
||||||
if (!libvulkan) {
|
if (!libvulkan) {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.22.1)
|
cmake_minimum_required(VERSION 3.22.1)
|
||||||
|
|
||||||
project(omim C CXX)
|
project(omim C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_C_STANDARD 23)
|
set(CMAKE_C_STANDARD 17)
|
||||||
# Our code does not rely on gnu extensions.
|
# Our code does not rely on gnu extensions.
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_C_EXTENSIONS OFF)
|
set(CMAKE_C_EXTENSIONS OFF)
|
||||||
@@ -39,12 +38,12 @@ if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
|
|||||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
|
||||||
enable_language(OBJC)
|
enable_language(OBJC)
|
||||||
set(CMAKE_OBJC_EXTENSIONS OFF)
|
set(CMAKE_OBJC_EXTENSIONS OFF)
|
||||||
set(CMAKE_OBJC_STANDARD 23)
|
set(CMAKE_OBJC_STANDARD 11)
|
||||||
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
||||||
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
||||||
enable_language(OBJCXX)
|
enable_language(OBJCXX)
|
||||||
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_OBJCXX_STANDARD 23)
|
set(CMAKE_OBJCXX_STANDARD 20)
|
||||||
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
||||||
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
||||||
endif()
|
endif()
|
||||||
@@ -85,7 +84,7 @@ if (MSVC)
|
|||||||
add_compile_options(/utf-8)
|
add_compile_options(/utf-8)
|
||||||
add_link_options(/INCREMENTAL:NO)
|
add_link_options(/INCREMENTAL:NO)
|
||||||
else()
|
else()
|
||||||
add_compile_options(-ffast-math $<$<CXX_COMPILER_ID:GNU>:-Wno-psabi>)
|
add_compile_options(-ffast-math)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PLATFORM_WIN)
|
if (PLATFORM_WIN)
|
||||||
@@ -104,7 +103,7 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
|||||||
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
||||||
add_definitions(-DRELEASE)
|
add_definitions(-DRELEASE)
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
add_compile_options(-O3 $<$<CXX_COMPILER_ID:GNU>:-flto=auto>)
|
add_compile_options(-Ofast $<$<CXX_COMPILER_ID:GNU>:-flto=auto>) # Also enables -ffast-math
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
||||||
@@ -183,7 +182,7 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# To allow #include "base/file_name.hpp" in all sources.
|
# To allow #include "base/file_name.hpp" in all sources.
|
||||||
include_directories("${CMAKE_HOME_DIRECTORY}" "${CMAKE_HOME_DIRECTORY}/libs" "${CMAKE_HOME_DIRECTORY}/tools")
|
include_directories(${CMAKE_HOME_DIRECTORY})
|
||||||
|
|
||||||
if (USE_PCH)
|
if (USE_PCH)
|
||||||
message(STATUS "Precompiled headers are ON")
|
message(STATUS "Precompiled headers are ON")
|
||||||
@@ -195,7 +194,7 @@ if (USE_PCH)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Should be on the root level, not in 3party, so tests can get these dependencies.
|
# Should be on the root level, not in 3party, so tests can get these dependencies.
|
||||||
if (PLATFORM_LINUX)
|
if (PLATFORM_LINUX OR PLATFORM_WIN)
|
||||||
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
||||||
find_package(Freetype REQUIRED)
|
find_package(Freetype REQUIRED)
|
||||||
find_package(harfbuzz REQUIRED)
|
find_package(harfbuzz REQUIRED)
|
||||||
@@ -225,23 +224,50 @@ endif()
|
|||||||
# Used in qt/ and shaders/
|
# Used in qt/ and shaders/
|
||||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||||
|
|
||||||
add_subdirectory(libs)
|
add_subdirectory(base)
|
||||||
|
add_subdirectory(coding)
|
||||||
|
add_subdirectory(descriptions)
|
||||||
|
add_subdirectory(drape)
|
||||||
|
add_subdirectory(drape_frontend)
|
||||||
|
add_subdirectory(editor)
|
||||||
|
add_subdirectory(ge0)
|
||||||
|
add_subdirectory(generator/mwm_diff)
|
||||||
|
add_subdirectory(geometry)
|
||||||
|
add_subdirectory(indexer)
|
||||||
|
add_subdirectory(kml)
|
||||||
|
add_subdirectory(map)
|
||||||
|
add_subdirectory(cppjansson)
|
||||||
|
add_subdirectory(platform)
|
||||||
|
add_subdirectory(routing)
|
||||||
|
add_subdirectory(routing_common)
|
||||||
|
add_subdirectory(search)
|
||||||
|
add_subdirectory(shaders)
|
||||||
|
add_subdirectory(storage)
|
||||||
|
add_subdirectory(tracking)
|
||||||
|
add_subdirectory(traffic)
|
||||||
|
add_subdirectory(transit)
|
||||||
|
|
||||||
if (PLATFORM_DESKTOP)
|
if (PLATFORM_DESKTOP)
|
||||||
add_subdirectory(dev_sandbox)
|
omim_add_tool_subdirectory(feature_list)
|
||||||
add_subdirectory(generator)
|
add_subdirectory(generator)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(openlr)
|
||||||
|
add_subdirectory(poly_borders)
|
||||||
|
omim_add_tool_subdirectory(topography_generator)
|
||||||
|
add_subdirectory(track_analyzing)
|
||||||
|
omim_add_tool_subdirectory(track_generator)
|
||||||
if (NOT SKIP_QT_GUI)
|
if (NOT SKIP_QT_GUI)
|
||||||
add_subdirectory(qt)
|
add_subdirectory(qt)
|
||||||
|
omim_add_tool_subdirectory(skin_generator)
|
||||||
endif()
|
endif()
|
||||||
if (GENERATOR_TOOL)
|
if (GENERATOR_TOOL)
|
||||||
add_compile_options(-march=native -mtune=native)
|
add_compile_options(-march=native -mtune=native)
|
||||||
message(STATUS "target CPU optimizations enabled, produced binaries will NOT work on a different CPU")
|
message(STATUS "target CPU optimizations enabled, produced binaries will NOT work on a different CPU")
|
||||||
endif()
|
endif()
|
||||||
|
add_subdirectory(dev_sandbox)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
omim_add_test_subdirectory(libs/qt_tstfrm)
|
omim_add_test_subdirectory(qt_tstfrm)
|
||||||
|
|
||||||
if (PLATFORM_ANDROID)
|
if (PLATFORM_ANDROID)
|
||||||
add_subdirectory(android/sdk/src/main/cpp)
|
add_subdirectory(android/app/src/main/cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
26
README.md
@@ -19,20 +19,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://codeberg.org/comaps/comaps/src/branch/main/LICENSE">
|
<a href="https://codeberg.org/comaps/comaps/releases">
|
||||||
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License"/>
|
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License" style="width: 90%; max-width: 150px;"/>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
|
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
|
||||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge&color=588157" alt="Android Build Status"/>
|
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge&color=588157" alt="Android Build Status" style="width: 90%; max-width: 170px;"/>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
|
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
|
||||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge&color=588157" alt="iOS Build Status"/>
|
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge&color=588157" alt="iOS Build Status" style="width: 90%; max-width: 145px;"/>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://opencollective.com/comaps">
|
<a href="https://opencollective.com/comaps">
|
||||||
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors"/>
|
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors" style="width: 90%; max-width: 191px;"/>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://liberapay.com/CoMaps">
|
<a href="https://liberapay.com/CoMaps">
|
||||||
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons"/>
|
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons" style="width: 90%; max-width: 160px;"/>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,6 +41,8 @@
|
|||||||
|
|
||||||
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
|
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
|
||||||
|
|
||||||
|
**Available for:** Android, iOS, ARM macOS, and alpha Linux/macOS desktop builds (also usable on Linux phones).
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://apps.apple.com/app/comaps/id6747180809">
|
<a href="https://apps.apple.com/app/comaps/id6747180809">
|
||||||
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
|
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
|
||||||
@@ -51,9 +53,6 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
|
|||||||
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
|
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
|
||||||
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
|
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
|
||||||
</a>
|
</a>
|
||||||
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps">
|
|
||||||
<img src="docs/badges/obtainium.png" alt="Obtainium" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://codeberg.org/comaps/comaps/releases">
|
<a href="https://codeberg.org/comaps/comaps/releases">
|
||||||
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
|
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
|
||||||
</a>
|
</a>
|
||||||
@@ -75,10 +74,9 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
|
|||||||
## ⚡️ Highlights
|
## ⚡️ Highlights
|
||||||
|
|
||||||
- **Offline-first**: Navigate without a connection
|
- **Offline-first**: Navigate without a connection
|
||||||
- **Privacy-respecting**: No tracking, ads or data collection
|
- **Privacy-respecting**: No tracking, Ads or data collection
|
||||||
- **Lightweight**: Battery- and space-efficient
|
- **Lightweight**: Battery- and space-efficient
|
||||||
- **Simple**: Polished, user-focused interface
|
- **Simple**: Polished, user-focused interface
|
||||||
- **Cross-platform**: Available for Android, iOS, MacOS, and Linux.
|
|
||||||
- **Community-built**: Free, open source, and collaborative
|
- **Community-built**: Free, open source, and collaborative
|
||||||
- **Transparent**: Open finances and governance
|
- **Transparent**: Open finances and governance
|
||||||
|
|
||||||
@@ -124,8 +122,10 @@ You can help by donating, contributing code, translating, or by telling others a
|
|||||||
|
|
||||||
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
|
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
|
||||||
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
|
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
|
||||||
|
> [!NOTE]
|
||||||
|
> Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
|
||||||
|
|
||||||
There is a dedicated [Zulip](https://codeberg.org/comaps/Governance/src/branch/main/contribute.md#3-team-messaging) chat for active contributors.
|
There is a dedicated Zulip chat for active contributors: [Zulip](https://comaps.zulipchat.com)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ There is a dedicated [Zulip](https://codeberg.org/comaps/Governance/src/branch/m
|
|||||||
|
|
||||||
## 💸 Funding
|
## 💸 Funding
|
||||||
|
|
||||||
CoMaps is free. To fund development, we rely on your voluntary support ♥️
|
CoMaps is free. To stay that way, it relies on your support.
|
||||||
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
|
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
|
||||||
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
|
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
|
||||||
|
|
||||||
|
|||||||
@@ -18,4 +18,5 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
libxi-dev \
|
libxi-dev \
|
||||||
optipng
|
optipng
|
||||||
WORKDIR /root/comaps
|
WORKDIR /root/comaps
|
||||||
|
RUN ./configure.sh
|
||||||
CMD ./gradlew -Parm64 assembleFdroidDebug
|
CMD ./gradlew -Parm64 assembleFdroidDebug
|
||||||
|
|||||||
@@ -15,17 +15,43 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
maven { url 'https://www.jitpack.io' } // MPAndroidChart
|
||||||
|
}
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'com.github.triplet.play'
|
apply plugin: 'com.github.triplet.play'
|
||||||
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
||||||
|
|
||||||
|
def run(cmd) {
|
||||||
|
def stdout = new ByteArrayOutputStream()
|
||||||
|
exec {
|
||||||
|
commandLine = cmd
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
return stdout.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
||||||
|
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||||
|
|
||||||
|
def getVersion() {
|
||||||
|
def isWindows = DefaultNativePlatform.getCurrentOperatingSystem().isWindows()
|
||||||
|
def bash = isWindows ? 'C:\\Program Files\\Git\\bin\\bash.exe' : 'bash'
|
||||||
|
def versionCode = Integer.parseInt(run([bash, '../../tools/unix/version.sh', 'android_code']).trim())
|
||||||
|
def versionName = run([bash, '../../tools/unix/version.sh', 'android_name']).trim()
|
||||||
|
return new Tuple2(versionCode, versionName)
|
||||||
|
}
|
||||||
|
|
||||||
def getCommitMessage() {
|
def getCommitMessage() {
|
||||||
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
|
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def osName = System.properties['os.name'].toLowerCase()
|
||||||
|
|
||||||
project.ext.appId = 'app.comaps'
|
project.ext.appId = 'app.comaps'
|
||||||
project.ext.appName = 'CoMaps'
|
project.ext.appName = 'CoMaps'
|
||||||
|
|
||||||
@@ -37,10 +63,7 @@ project.ext.appName = 'CoMaps'
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = 'app.organicmaps'
|
namespace 'app.organicmaps'
|
||||||
|
|
||||||
// TODO: it should not be here, but in sdk/build.gradle. But for some reason it should be specified here as well.
|
|
||||||
ndkVersion = '28.2.13676358'
|
|
||||||
|
|
||||||
dependenciesInfo {
|
dependenciesInfo {
|
||||||
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
|
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
|
||||||
@@ -62,23 +85,79 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// All properties are read from gradle.properties file
|
// All properties are read from gradle.properties file
|
||||||
compileSdk = propCompileSdkVersion.toInteger()
|
compileSdk propCompileSdkVersion.toInteger()
|
||||||
|
|
||||||
|
ndkVersion '28.2.13676358'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
versionCode = rootProject.ext.versionCode
|
// Default package name is taken from the manifest and should be app.comaps
|
||||||
versionName = rootProject.ext.versionName
|
def ver = getVersion()
|
||||||
|
versionCode = ver.V1
|
||||||
|
versionName = ver.V2
|
||||||
println('Version: ' + versionName)
|
println('Version: ' + versionName)
|
||||||
println('VersionCode: ' + versionCode)
|
println('VersionCode: ' + versionCode)
|
||||||
minSdk = propMinSdkVersion.toInteger()
|
minSdk propMinSdkVersion.toInteger()
|
||||||
targetSdk = propTargetSdkVersion.toInteger()
|
targetSdk propTargetSdkVersion.toInteger()
|
||||||
applicationId project.ext.appId
|
applicationId project.ext.appId
|
||||||
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
|
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
|
||||||
// Should be customized in flavors.
|
// Should be customized in flavors.
|
||||||
buildConfigField 'String', 'REVIEW_URL', '""'
|
buildConfigField 'String', 'REVIEW_URL', '""'
|
||||||
|
|
||||||
base.archivesName = appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode
|
externalNativeBuild {
|
||||||
|
def pchFlag = 'OFF'
|
||||||
|
if (project.hasProperty('pch')) pchFlag = 'ON'
|
||||||
|
|
||||||
ndk.debugSymbolLevel = 'full'
|
def njobs = ''
|
||||||
|
if (project.hasProperty('njobs')) njobs = project.getProperty('njobs')
|
||||||
|
|
||||||
|
def enableVulkanDiagnostics = 'OFF'
|
||||||
|
if (project.hasProperty('enableVulkanDiagnostics')) {
|
||||||
|
enableVulkanDiagnostics = project.getProperty('enableVulkanDiagnostics')
|
||||||
|
}
|
||||||
|
|
||||||
|
def enableTrace = 'OFF'
|
||||||
|
if (project.hasProperty('enableTrace')) {
|
||||||
|
enableTrace = project.getProperty('enableTrace')
|
||||||
|
}
|
||||||
|
|
||||||
|
cmake {
|
||||||
|
cppFlags '-fexceptions', '-frtti'
|
||||||
|
// There is no sense to enable sections without gcc's --gc-sections flag.
|
||||||
|
cFlags '-fno-function-sections', '-fno-data-sections',
|
||||||
|
'-Wno-extern-c-compat'
|
||||||
|
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static',
|
||||||
|
"-DOS=$osName", '-DSKIP_TESTS=ON', '-DSKIP_TOOLS=ON', "-DUSE_PCH=$pchFlag",
|
||||||
|
"-DNJOBS=$njobs", "-DENABLE_VULKAN_DIAGNOSTICS=$enableVulkanDiagnostics",
|
||||||
|
"-DENABLE_TRACE=$enableTrace"
|
||||||
|
targets 'organicmaps'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use, for example, -Parm32 gradle parameter to build only for armeabi-v7a.
|
||||||
|
ndk {
|
||||||
|
abiFilters = new HashSet<>()
|
||||||
|
if (project.hasProperty('arm32') || project.hasProperty('armeabi-v7a')) {
|
||||||
|
abiFilters.add('armeabi-v7a')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('arm64') || project.hasProperty('arm64-v8a')) {
|
||||||
|
abiFilters.add('arm64-v8a')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('x86')) {
|
||||||
|
abiFilters.add('x86')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('x86_64') || project.hasProperty('x64')) {
|
||||||
|
abiFilters.add('x86_64')
|
||||||
|
}
|
||||||
|
if (abiFilters.isEmpty()) {
|
||||||
|
abiFilters.add('armeabi-v7a')
|
||||||
|
abiFilters.add('arm64-v8a')
|
||||||
|
// For the emulator, chromebooks and some Intel Atom devices.
|
||||||
|
abiFilters.add('x86_64')
|
||||||
|
}
|
||||||
|
println('Building for ' + abiFilters + ' archs.')
|
||||||
|
}
|
||||||
|
|
||||||
|
setProperty('archivesBaseName', appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
flavorDimensions += 'default'
|
flavorDimensions += 'default'
|
||||||
@@ -128,21 +207,23 @@ android {
|
|||||||
splits.abi {
|
splits.abi {
|
||||||
boolean enabled = project.hasProperty('splitApk')
|
boolean enabled = project.hasProperty('splitApk')
|
||||||
println ('Create separate apks: ' + enabled)
|
println ('Create separate apks: ' + enabled)
|
||||||
enable = enabled
|
enable enabled
|
||||||
reset()
|
reset()
|
||||||
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
||||||
universalApk = true
|
universalApk true
|
||||||
}
|
}
|
||||||
|
|
||||||
lint {
|
lint {
|
||||||
disable 'MissingTranslation'
|
disable 'MissingTranslation'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/3551
|
// https://github.com/organicmaps/organicmaps/issues/3551
|
||||||
disable 'MissingQuantity', 'UnusedQuantity'
|
disable 'MissingQuantity', 'UnusedQuantity'
|
||||||
|
// https://github.com/organicmaps/organicmaps/issues/3550
|
||||||
|
disable 'ByteOrderMark'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/1077
|
// https://github.com/organicmaps/organicmaps/issues/1077
|
||||||
disable 'CustomSplashScreen'
|
disable 'CustomSplashScreen'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/3610
|
// https://github.com/organicmaps/organicmaps/issues/3610
|
||||||
disable 'InsecureBaseConfiguration'
|
disable 'InsecureBaseConfiguration'
|
||||||
abortOnError = true
|
abortOnError true
|
||||||
}
|
}
|
||||||
|
|
||||||
gradle.projectsEvaluated {
|
gradle.projectsEvaluated {
|
||||||
@@ -201,29 +282,33 @@ android {
|
|||||||
debug {
|
debug {
|
||||||
applicationIdSuffix '.debug' // Allows to install debug and release builds together
|
applicationIdSuffix '.debug' // Allows to install debug and release builds together
|
||||||
versionNameSuffix '-debug'
|
versionNameSuffix '-debug'
|
||||||
|
jniDebuggable true // Enable jni debug build
|
||||||
zipAlignEnabled true
|
zipAlignEnabled true
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
resValue 'string', 'app_name', 'CoMaps Debug'
|
resValue 'string', 'app_name', 'CoMaps Debug'
|
||||||
|
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
|
||||||
|
ndk.debugSymbolLevel = 'none'
|
||||||
}
|
}
|
||||||
|
|
||||||
release {
|
release {
|
||||||
if (taskName.contains('release')) {
|
if (taskName.contains('release')) {
|
||||||
if (secureReleasePropertiesFileExists) {
|
if (secureReleasePropertiesFileExists) {
|
||||||
println('Using RELEASE signing keys from secure.properties.release')
|
println('Using RELEASE signing keys from secure.properties.release')
|
||||||
signingConfig = signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
} else {
|
} else {
|
||||||
println('NO RELEASE signing keys found')
|
println('NO RELEASE signing keys found')
|
||||||
println('Using DEBUG signing keys')
|
println('Using DEBUG signing keys')
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
minifyEnabled true
|
minifyEnabled true
|
||||||
shrinkResources = true
|
shrinkResources true
|
||||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||||
// To learn more, go to the documentation section about R8 configuration files.
|
// To learn more, go to the documentation section about R8 configuration files.
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
resValue 'string', 'app_name', project.ext.appName
|
resValue 'string', 'app_name', project.ext.appName
|
||||||
|
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||||
|
ndk.debugSymbolLevel = 'symbol_table'
|
||||||
}
|
}
|
||||||
|
|
||||||
beta {
|
beta {
|
||||||
@@ -232,27 +317,37 @@ android {
|
|||||||
if (taskName.contains('beta')) {
|
if (taskName.contains('beta')) {
|
||||||
if (secureTestPropertiesFileExists) {
|
if (secureTestPropertiesFileExists) {
|
||||||
println('Using TEST signing keys from secure.properties.test')
|
println('Using TEST signing keys from secure.properties.test')
|
||||||
signingConfig = signingConfigs.test
|
signingConfig signingConfigs.test
|
||||||
} else {
|
} else {
|
||||||
println('NO TEST signing keys found')
|
println('NO TEST signing keys found')
|
||||||
println('Using DEBUG signing keys')
|
println('Using DEBUG signing keys')
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
minifyEnabled true
|
minifyEnabled true
|
||||||
shrinkResources = true
|
shrinkResources true
|
||||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||||
// To learn more, go to the documentation section about R8 configuration files.
|
// To learn more, go to the documentation section about R8 configuration files.
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
matchingFallbacks = ['release'] // use dependencies of "release" build type
|
matchingFallbacks = ['release'] // use dependencies of "release" build type
|
||||||
resValue 'string', 'app_name', 'CoMaps Test'
|
resValue 'string', 'app_name', 'CoMaps Test'
|
||||||
|
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||||
|
ndk.debugSymbolLevel = 'symbol_table'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
externalNativeBuild {
|
||||||
|
cmake {
|
||||||
|
version '3.22.1+'
|
||||||
|
buildStagingDirectory './nativeOutputs'
|
||||||
|
path '../../CMakeLists.txt'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
|
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
|
||||||
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
|
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
|
||||||
androidResources {
|
androidResources {
|
||||||
ignoreAssetsPattern = '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
ignoreAssetsPattern '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
||||||
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
||||||
localeFilters += [
|
localeFilters += [
|
||||||
"af",
|
"af",
|
||||||
@@ -309,7 +404,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
coreLibraryDesugaringEnabled = true
|
coreLibraryDesugaringEnabled true
|
||||||
|
|
||||||
sourceCompatibility JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
@@ -317,8 +412,6 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':sdk')
|
|
||||||
|
|
||||||
coreLibraryDesugaring libs.android.tools.desugar
|
coreLibraryDesugaring libs.android.tools.desugar
|
||||||
|
|
||||||
// Google Play Location Services
|
// Google Play Location Services
|
||||||
@@ -364,6 +457,10 @@ dependencies {
|
|||||||
testImplementation libs.mockito.core
|
testImplementation libs.mockito.core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.withType(JavaCompile) {
|
||||||
|
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
||||||
|
}
|
||||||
|
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
def authorityValue = variant.applicationId + ".provider"
|
def authorityValue = variant.applicationId + ".provider"
|
||||||
def authority = "\"" + authorityValue + "\""
|
def authority = "\"" + authorityValue + "\""
|
||||||
@@ -411,7 +508,3 @@ huaweiPublish {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
|
||||||
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
|
||||||
}
|
|
||||||
|
|||||||
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 36 KiB |
BIN
android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 63 KiB |
BIN
android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -1 +0,0 @@
|
|||||||
../../../../google/java/app/organicmaps/location
|
|
||||||
1
android/app/src/fdroid/java/app/organicmaps/sdk/location
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../../google/java/app/organicmaps/sdk/location
|
||||||
@@ -1 +0,0 @@
|
|||||||
মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং ও ড্রাইভিং
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Navegació intuïtiva - Descobreix el teu camí - El poder de la comunitat
|
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
• OpenStreetMap-Daten vom 22. August
|
Wir stellen vor: Das neue CoMaps-Logo!
|
||||||
• Neue Geschwindigkeitsanzeige & Details aufgezeichneter Strecken
|
• Verbesserte Höhenlinien in vielen Regionen (Stufen von 20/50 m)
|
||||||
• Besserer dunkler Modus, neue farbige Labels
|
• Links zu Panoramax-Bildern für ausgewählte POIs
|
||||||
• Anzeige wann Orte & Öffnungszeiten überprüft wurden
|
• OpenStreetMap-Daten vom 13. Juli
|
||||||
• Routenplanung berücksichtigt Stoppschilder, Ampeln & bedingte Einschränkungen.
|
• Neue Farben für viele Objekte und Farben werden früher angezeigt
|
||||||
• GPS-Peilung wird statt Kompass bevorzugt & höhere GPS-Frequenz.
|
• Öffnungszeiten werden beim Antippen eines POI angezeigt
|
||||||
• Adressen & Notizen im OSM-Editor unterstützt.
|
• Verschiedene Arten von Feuchtgebieten
|
||||||
• Mehr Verbesserungen an UI-Elementen & Kartenstil, alle Details in den Codeberg-Versionshinweisen!
|
• Neue Farben für Vegetation und andere Features; einige neue Icons
|
||||||
|
• Wandern: bessere Darstellung der Höhenlinien
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
• OpenStreetMap data as of August 22
|
Introducing CoMaps logo!
|
||||||
• New current speed indicator, display track info
|
|
||||||
• Improved dark map style, added coloured labels
|
• upgrade altitude contour lines for many regions to 20 or 50 meters step
|
||||||
• Display when places & opening hours were last checked
|
• add Panoramax Picture links to selected POIs
|
||||||
• Routing now considers turns, stop signs, lights & conditional restrictions
|
• OpenStreetMap data as of July 13
|
||||||
• Prefer GPS bearing over compass and increase location poll rate
|
• add color fills to many features and display fills earlier for existing features
|
||||||
• Enable adding standalone addresses & notes in the editor
|
• display opening hours state when selecting a POI
|
||||||
• Various UI element & map style improvements
|
• split all wetlands into several distinct types
|
||||||
Check our Codeberg release notes for more changes!
|
• update vegetation and other map colors, update some map icons
|
||||||
|
• outdoors: bolder altitude contour lines
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
Una aplicación de mapas gratuita y de código abierto liderada por la comunidad, basada en los datos de OpenStreetMap y reforzada con un compromiso con la transparencia, la privacidad y la ausencia de fines de lucro. CoMaps es un fork o derivado de Organic Maps, que a su vez es un fork de Maps.ME.
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
Lee más sobre los motivos del proyecto y su dirección en <b><i>codeberg.org/comaps</i></b>.
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
Únete allí a la comunidad y ayuda a crear la mejor app de mapas
|
|
||||||
|
|
||||||
• Usa la aplicación y corre la voz sobre ella
|
|
||||||
|
|
||||||
• Envía comentarios y reporta problemas
|
|
||||||
|
|
||||||
• Actualiza los datos del mapa en la app o en el sitio web de OpenStreetMap
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
‣ <b>Enfocada en el uso sin conexión</b>: Planifica y navega tus viajes sin necesidad de conexión móvil, busca puntos de paso en rutas remotas, etc. Todas las funciones están diseñadas para funcionar sin conexión.
|
|
||||||
|
|
||||||
‣ <b>Respeta tu Privacidad</b>: La app está diseñada pensando en tu privacidad: no identifica personas, no rastrea y no recoge datos personales. Sin publicidad.
|
|
||||||
|
|
||||||
‣ <b>Sencilla y Pulida</b>: funciones esenciales fáciles de usar que simplemente funcionan.
|
|
||||||
|
|
||||||
‣ <b>Ahorra Batería y Espacio</b>: No consume la batería como otras apps de navegación. Los mapas compactos ahorran espacio valioso en tu teléfono.
|
|
||||||
|
|
||||||
‣ <b>Gratuita y Creada por la Comunidad</b>: Personas como tú ayudaron a construir la app añadiendo lugares a OpenStreetMap, probando funciones, dando opiniones y contribuyendo con desarrollo o financiación.
|
|
||||||
|
|
||||||
‣ <b>Toma de decisiones y finanzas abiertas y transparentes, sin ánimo de lucro y completamente de código abierto.</b>
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<b>Funciones Principales</b>:
|
|
||||||
|
|
||||||
• Mapas detallados descargables con lugares que no aparecen en Google Maps
|
|
||||||
|
|
||||||
• Modo exterior con rutas de senderismo destacadas, campings, fuentes de agua, picos, curvas de nivel, etc.
|
|
||||||
|
|
||||||
• Caminos peatonales y carriles bici
|
|
||||||
|
|
||||||
• Puntos de interés como restaurantes, gasolineras, hoteles, tiendas, lugares turísticos y muchos más
|
|
||||||
|
|
||||||
• Búsqueda por nombre, dirección o categoría de punto de interés
|
|
||||||
|
|
||||||
• Navegación con indicaciones por voz para caminar, ir en bici o conducir
|
|
||||||
|
|
||||||
• Guarda tus lugares favoritos con un solo toque
|
|
||||||
|
|
||||||
• Artículos de Wikipedia sin conexión
|
|
||||||
|
|
||||||
• Capa de transporte subterráneo y rutas
|
|
||||||
|
|
||||||
• Grabación de rutas
|
|
||||||
|
|
||||||
• Exporta e importa favoritos y rutas en formatos KML, KMZ y GPX
|
|
||||||
|
|
||||||
• Modo oscuro para usar de noche
|
|
||||||
|
|
||||||
• Mejora los datos del mapa para todos usando un editor básico integrado
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<b>La Libertad Está Aquí</b>
|
|
||||||
|
|
||||||
Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad.
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
• Datos de OSM a 22-08-2025
|
¡Presentamos el logo de CoMaps!
|
||||||
• Nuevo indicador de velocidad e información de pista
|
• mejora de isolíneas con más detalle para muchas regiones
|
||||||
• Modo oscuro mejorado y nombres de POI coloreados
|
• añade enlaces de imágenes de Panoramax a POIs seleccionados
|
||||||
• Indicador de última revisión de lugares y horarios de apertura
|
• datos de OpenStreetMap a 13 de julio
|
||||||
• Rutas mejoradas teniendo en cuenta giros, señales de STOP, semáforos y restricciones
|
• añadidos rellenos de color a muchas características
|
||||||
• Mayor precisión para determinar tu localización y sentido
|
• se muestra el estado de horarios de apertura al seleccionar un POI
|
||||||
• Añade direcciones y notas con el editor
|
• se dividen los humedales en tipos distintos
|
||||||
• Otras mejoras en elementos de la interfaz y estilo del mapa
|
• se actualiza la vegetación y otros colores del mapa, así como otros iconos
|
||||||
Entra en nuestro Codeberg para más cambios!
|
• exteriores: líneas de contorno de altitud más gruesas
|
||||||
@@ -1 +0,0 @@
|
|||||||
Navegación de mapa fácil - Descubre más en tu camino - Creado por la comunidad
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Senderismo, ciclismo y conducción offline
|
|
||||||
@@ -24,7 +24,7 @@ Sartu komunitatean eta lagundu maparik onena aplikatzen
|
|||||||
• Lineaz kanpoko Wikipedia artikuluak
|
• Lineaz kanpoko Wikipedia artikuluak
|
||||||
• Metroaren garraio geruza eta jarraibideak
|
• Metroaren garraio geruza eta jarraibideak
|
||||||
• Arrastoen grabazioa
|
• Arrastoen grabazioa
|
||||||
• Markagailuak eta arrastoak esportatu eta inportatu KML, KMZ, GPX formatuetan
|
• Laster-markak eta ibilbideak esportatu eta inportatu KML, KMZ, GPX formatuetan
|
||||||
• Gauean erabiltzeko modu iluna
|
• Gauean erabiltzeko modu iluna
|
||||||
• Hobetu mapako datuak guztiontzat oinarrizko editore integratua erabiliz
|
• Hobetu mapako datuak guztiontzat oinarrizko editore integratua erabiliz
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
ناوبری آسان نقشه - کشف بیشتر از سفر شما - توسط جامعه
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - کوهنوردی، دوچرخهسواری و رانندگی آفلاین
|
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
• Données OSM du 22 août
|
Présentation du logo CoMaps !
|
||||||
• Nouvel indicateur de vitesse et détails des pistes
|
• Amélioration des courbes d’altitude à une précision de 20 ou 50 mètres pour de nombreuses régions
|
||||||
• Amélioration du style sombre, ajout de labels colorées
|
• Ajout d'un lien vers les images Panoramax des POI
|
||||||
• Affichage de la date de dernière vérification d'un lieu
|
• Données OpenStreetMap du 13 juillet
|
||||||
• Support dans le routage des virages, signalisations et restrictions
|
• Affichage de l’état des heures d’ouverture lors de la sélection d’un POI
|
||||||
• Amélioration de la boussole et de la précision GPS
|
• Mise à jour du style(végétation et zones humides), mise à jour de certaines icônes de la carte
|
||||||
• Support des adresses et des notes dans l'éditeur
|
• Outdoors: Améliorations de la visibilité des courbes d'altitude
|
||||||
• Diverses améliorations d'UI et du style de la carte
|
|
||||||
Plus d'informations sur notre Codeberg
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
Navigation de cartes facile - Découvrez le monde - Propulsé par la communauté
|
Navigation cartographique facile - Découvrez davantage de votre voyage - Propulsé par la communauté
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
CoMaps - Pješačite, biciklirajte, vozite Offline
|
CoMaps - Pješačite, biciklirajte, vozite Offline i privatno
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
A CoMaps egy közösség által létrehozott, ingyenes és nyílt forráskódú térképalkalmazás, amely az OpenStreetMap térképadatain alapul, és amelyet az átláthatóság, a magánélet védelme és a nonprofit jelleg iránti elkötelezettség erősít. A CoMaps az Organic Maps villája, amely viszont a Maps.ME villája.
|
|
||||||
|
|
||||||
A projekt előzményeiről és az irányáról a <b><i>codeberg.org/comaps</i></b> oldalon olvashatsz.
|
|
||||||
Csatlakozz ott a közösséghez, és segíts a legjobb térképalkalmazás elkészítésében.
|
|
||||||
• Használd az alkalmazást és terjeszd a hírét
|
|
||||||
• Adj visszajelzést és jelentsd a problémákat
|
|
||||||
• Frissítsd és javítsd a térképadatokat az alkalmazásban vagy az OpenStreetMap weboldalán.
|
|
||||||
|
|
||||||
‣ <b>Offline-fókuszú:</b> Tervezd meg és navigáld külföldi útad mobilszolgáltatás nélkül, keress útpontokat egy távoli túra során stb. Az alkalmazás minden funkcióját úgy terveztük, hogy internetkapcsolat nélkül is működjön.
|
|
||||||
‣ <b>A magánélet tiszteletben tartása:</b> Az alkalmazás az adatvédelem szem előtt tartásával készült, nem azonosítja az embereket, nem követi nyomon és nem gyűjt személyes adatokat, és reklámmentes.
|
|
||||||
‣ <b>Takarékosdik az akkumulátorral és a tárhellyel:</b> Nem meríti le az akkumulátort, mint más navigációs alkalmazások. A jól összeállítot kis méretű térképek értékes helyet takarítanak meg a telefonon.
|
|
||||||
‣ <b>Egyszerű és szép grafikus felület,</b> nagyszerű és könnyen használható funkciók, amelyek egyszerűen működnek.
|
|
||||||
‣ <b>Ingyenes és a közösség által készített:</b> A hozzád hasonló emberek segítettek az alkalmazás létrehozásában azáltal, hogy hozzáadtak helyeket az OpenStreetMap térképhez, tesztelték és visszajelzést adtak a funkciókról, valamint hozzájárultak a fejlesztői képességeikkel és a pénzükkel.
|
|
||||||
‣ <b>Nyílt és átlátható döntéshozatal és pénzügyek, nonprofit és teljesen nyílt forráskódú.</b>
|
|
||||||
|
|
||||||
<b>Főbb jellemzők:</b>
|
|
||||||
• Letölthető részletes térképek olyan helyekkel, amelyek sok kereskedelmi térképen nem állnak rendelkezésre.
|
|
||||||
• Szabadtéri üzemmód kiemelt túraútvonalakkal, táborhelyekkel, vízforrásokkal, csúcsokkal, szintvonalakkal stb.
|
|
||||||
• Sétaútvonalak és kerékpárutak
|
|
||||||
• Érdekes pontok, mint például éttermek, benzinkutak, szállodák, üzletek, látnivalók és még sok minden más
|
|
||||||
• Keresés név, cím vagy az érdekes pontok kategóriája alapján
|
|
||||||
• Navigáció hangutasításokkal gyalogláshoz, kerékpározáshoz vagy vezetéshez
|
|
||||||
• Kedvenc helyeid könyvjelzővel láthatod el egyetlen érintéssel
|
|
||||||
• Wikipedia szócikkek internetkapcsolat nélkül
|
|
||||||
• Metró tranzit réteg és irányok
|
|
||||||
• Útvonal mentése
|
|
||||||
• Könyvjelzők és nyomvonalak exportálása és importálása KML, KMZ, GPX formátumokban
|
|
||||||
• Sötét üzemmód az éjszakai használathoz
|
|
||||||
• Térképadatok javítása mindenki számára egy alapvető beépített szerkesztő segítségével
|
|
||||||
|
|
||||||
<b>Itt van a szabadság</b>
|
|
||||||
Fedezd fel az utadat, navigálj a világban úgy, hogy a magánélet és a közösség kerüljön előtérbe!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Könnyű térképes navigáció - Fedezz fel többet az útjaidról - A közösség erejével
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
Una app realizzata dalla community gratuita e open-source, basata su OpenStreetMap e sull'impegno alla trasparenza, al rispetto della Privacy e senza scopo di lucro. CoMaps è uno spin-off di Organic Maps, che a sua volta deriva da Maps.ME.
|
Una app sviluppata dalla comunità, gratuita e open-source, basata su OpenStreetMap e sull'impegno alla trasparenza, al rispetto della Privacy senza scopo di lucro. CoMaps è uno spin-off di Organic Maps, che a sua volta deriva da Maps.ME.
|
||||||
|
|
||||||
Leggi delle ragioni del progetto e della sua direzione futura su <b><i>codeberg.org/comaps</i></b>.
|
Leggi delle ragioni del progetto e della sua direzione futura su <b><i>codeberg.org/comaps</i></b>.
|
||||||
Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
||||||
@@ -15,7 +15,7 @@ Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
|||||||
|
|
||||||
<b>Funzionalità principali</b>:
|
<b>Funzionalità principali</b>:
|
||||||
• Scarica mappe dettagliate di luoghi che non sono disponibili su Google Maps
|
• Scarica mappe dettagliate di luoghi che non sono disponibili su Google Maps
|
||||||
• Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altri punti d'interesse evidenziati
|
• Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altro evidenziati
|
||||||
• Strade pedonali e piste ciclabili
|
• Strade pedonali e piste ciclabili
|
||||||
• Punti d'interesse come ristoranti, stazioni di benzina, hotel, negozi, luoghi turistici e molto altro
|
• Punti d'interesse come ristoranti, stazioni di benzina, hotel, negozi, luoghi turistici e molto altro
|
||||||
• Cerca per nome, indirizzo o categoria
|
• Cerca per nome, indirizzo o categoria
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
Navigazione semplice - Immergiti nella tua avventura - Realizzato dalla comunità
|
Navigazione semplice - Immergiti nella tua avventura - Sviluppato dalla comunità
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
CoMaps - Wandel, fiets, rijd offline met privacy
|
CoMaps - Wandel, fiets, rijdt offline met privacy
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
Lett kart navigasjon - Opplev mere på din reise - Drevet av felleskapet
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Gå tur, sykkel, kjør - med personvern
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Wprowadzamy logo CoMaps!
|
||||||
|
• zwiększenie dokładności izolinii w wielu regionach w krokach 20 do 50 metrów
|
||||||
|
• dodanie linków do zdjęć z Panoramax do wybranych POI
|
||||||
|
• aktualizacja danych OpenStreetMap z 13 lipca
|
||||||
|
• dodanie wypełnienia kolorem dla wielu typów obiektów
|
||||||
|
• wyświetlanie stanu godzin otwarcia przy wyborze POI
|
||||||
|
• podział mokradeł na kilka typów
|
||||||
|
• aktualizacja koloru roślinności i innych kolorów, aktualizacja części ikon na mapie
|
||||||
|
• tryb outdoorowy: pogrubione warstwice wysokości
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
• Dados OSM de 22/08
|
Apresentamos o logo do CoMaps!
|
||||||
• Novo indicador de velocidade e tela de informações de trilha
|
• Curvas de nível mais detalhadas em muitas regiões
|
||||||
• Melhor estilo de mapa escuro, rótulos coloridos adicionados
|
• Adicionados links de imagens do Panoramax para pontos de interesse selecionados
|
||||||
• Exibição da última atualização de locais e horários de funcionamento
|
• Dados OSM de 13/07
|
||||||
• O roteamento agora considera conversões, PARE, semáforos, e restrições condicionais
|
• Adicionados preenchimentos de cor a muitos elementos
|
||||||
• Preferência por orientação GPS em vez de bússola e aumento da frequência de localização
|
• Exibição de horário de funcionamento ao selecionar um ponto de interesse
|
||||||
• Editor: adição de endereços e notas independentes
|
• Divididas áreas úmidas em vários tipos distintos
|
||||||
• Melhorias em elementos da interface e estilo de mapa
|
• Atualizada cores/ícones para vegetação e outros elementos
|
||||||
|
• Ar livre: curvas de nível de altitude mais destacadas
|
||||||
@@ -1 +1 @@
|
|||||||
CoMaps - Mapas e Navegação Offline com Privacidade
|
CoMaps - Mapas com Privacidade
|
||||||
|
|||||||
32
android/app/src/fdroid/play/listings/pt/full-description.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
Um aplicativo de mapas gratuito e de código aberto, liderado pela comunidade, baseado em dados do OpenStreetMap e reforçado pelo compromisso com a transparência, privacidade e sem fins lucrativos. O CoMaps é um fork/spin-off do Organic Maps, que por sua vez é um fork do Maps.ME.
|
||||||
|
|
||||||
|
Leia mais sobre os motivos do projeto e sua direção em <b><i>codeberg.org/comaps</i></b>.
|
||||||
|
Junte-se à comunidade e ajude a criar o melhor aplicativo de mapas.
|
||||||
|
• Use o aplicativo e divulgue-o.
|
||||||
|
• Envie feedback e relate problemas.
|
||||||
|
• Atualize os dados do mapa no aplicativo ou no site do OpenStreetMap.
|
||||||
|
|
||||||
|
‣ <b>Foco offline</b>: Planeje e navegue em sua viagem ao exterior sem a necessidade de sinal de celular, pesquise pontos de referência durante uma caminhada distante, etc. Todas as funções do aplicativo foram projetadas para funcionar offline.
|
||||||
|
‣ <b>Respeitando a privacidade</b>: O aplicativo foi projetado com a privacidade em mente - não identifica pessoas, não rastreia e não coleta informações pessoais. Sem anúncios.
|
||||||
|
‣ <b>Simples e sofisticado</b>: recursos essenciais e fáceis de usar que simplesmente funcionam.
|
||||||
|
‣ <b>Economiza bateria e espaço</b>: Não consome muita bateria como outros aplicativos de navegação. Mapas compactos economizam espaço precioso no seu celular.
|
||||||
|
‣ <b>Gratuito e desenvolvido pela comunidade</b>: Pessoas como você ajudaram a desenvolver o aplicativo adicionando lugares ao OpenStreetMap, testando e dando feedback sobre os recursos e contribuindo com suas habilidades de desenvolvimento e dinheiro.
|
||||||
|
‣ <b>Tomada de decisões e finanças abertas e transparentes, sem fins lucrativos e totalmente de código aberto.</b>
|
||||||
|
|
||||||
|
<b>Principais recursos</b>:
|
||||||
|
• Mapas detalhados para download com locais não disponíveis no Google Maps
|
||||||
|
• Modo ao ar livre com trilhas em destaque, acampamentos, fontes de água, picos, curvas de nível, etc.
|
||||||
|
• Trilhas para caminhada e ciclovias
|
||||||
|
• Pontos de interesse como restaurantes, postos de gasolina, hotéis, lojas, pontos turísticos e muito mais
|
||||||
|
• Pesquise por nome, endereço ou por categoria de ponto de interesse
|
||||||
|
• Navegação com anúncios de voz para caminhadas, ciclismo ou direção
|
||||||
|
• Marque seus lugares favoritos com um único toque
|
||||||
|
• Artigos offline da Wikipédia
|
||||||
|
• Camada e direções de transporte público do metrô
|
||||||
|
• Gravação de trilhas
|
||||||
|
• Exporte e importe favoritos e trilhas nos formatos KML, KMZ e GPX
|
||||||
|
• Um modo escuro para usar à noite
|
||||||
|
• Aprimore os dados do mapa para todos usando um editor básico integrado
|
||||||
|
|
||||||
|
<b>A Liberdade Chegou</b>
|
||||||
|
Descubra sua jornada, navegue pelo mundo com privacidade e comunidade em primeiro lugar!
|
||||||
@@ -1 +1 @@
|
|||||||
CoMaps - călătorește offline cu confidențialitate
|
CoMaps - Drumeții, Ciclism, Condus Offline în confidențialitate
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
• Данные 22 августа
|
Представляем логотип CoMaps!
|
||||||
• Новый спидометр,информация о маршруте
|
• Линии высот для многих регионов с шагом 20м или 50м
|
||||||
• Улучшен тёмный стиль,цветные метки
|
• Ссылки на изображения Panoramax к выбранным POI
|
||||||
• Время последней проверки часов работы
|
• Карты OpenStreetMap от 13 июля
|
||||||
• Построении маршрута учитывает повороты, знак «Стоп»,светофоры и ограничения
|
• Заливки цветом ко многим объектам и более ранняя заливка для существующих объектов
|
||||||
• Предпочтение отдается GPS-координатам,а не компасу,увеличена частота опроса местоположения
|
• Показ часов работы при выборе POI
|
||||||
• Можно добавлять отдельные адреса и заметки в редакторе
|
• Разные водно-болотные угодья отличаются цветом
|
||||||
• Улучшены различные элементы пользовательского интерфейса и стиль карты
|
• Обновлены цвета растительности и другие цвета на карте, изменены некоторые иконки
|
||||||
Ознакомьтесь с примечания к релизу про изменения!
|
• В стиле "Активный отдых" более четкие линии высот
|
||||||
@@ -1,32 +1,32 @@
|
|||||||
Бесплатна апликација отвореног кода коју одржава заједница, која се заснива на ОpenStreetMap подацима. Непрофитна, транспарентна и цени вашу приватност. CoMaps је настала од апликације Organic Maps, које је настала од апликације Maps.ME.
|
Бесплатна апликација отвореног кода коју је обављала заједница и заснива се на ОpenStreetMap-у подацима, усмерени транспарентност, приватност и непрофитни. CoMaps је Апликације за органске карте виљушка, које је пак форк Maps.ME.
|
||||||
|
|
||||||
Прочитајте о разлозима пројекта и његовог правца на <b><i>codeberg.org/comaps</i></b>
|
Прочитајте о разлозима пројекта и његовог правца на <b><i>codeberg.org/comaps</i></b>
|
||||||
Придружите се отвореној заједници и помозите да направимо најбољу апликацију за мапе
|
Придружите се отвореној заједници и помозите да направимо најбољу апликацију за мапе
|
||||||
• Користите апликацију и проширите глас о томе
|
• Користите апликацију и проширите глас о томе
|
||||||
• Дајте повратне информације и пријавите проблеме
|
• Дајте повратне информације и пријавите проблеме
|
||||||
• Ажурирајте податке на мапи у апликацији или на сајту OpenStreetMap
|
• Ажурирајте податке на мапи у апликацији или на веб локацији OpenStreetMap
|
||||||
|
|
||||||
‣ <b>Фокусирано на офлајн рад</b>: Планирајте и управљајте путовањем у иностранству без потребе за мобилним интернетом, тражите успутне тачке док сте на забаченом планинском путу, итд. Све функционалности су дизајниране за рад без интернета.
|
‣ <b> фокусирано на офлајн Вар </b>: Планирајте и управљајте путовањем у иностранству без потребе за мобилним услугама, тражите путне тачке док је на даљинском покрету, итд. Све апликације су дизајниране за рад ван мреже.
|
||||||
‣ <b>Поштовање приватности</b>: Апликација је осмишљена са приватношћу корисника на уму - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
|
‣ <b> Поштовање приватности </b>: Апликација је осмишљена задржавања у уму приватност - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
|
||||||
‣ <b>Једноставно и елегантно</b>: Апликација је лака за употребу и једноставно функционише.
|
‣ <b> Једноставно и елегантно </b>: Апликација је тривијална за употребу и једноставно функционише.
|
||||||
‣ <b>Чува вашу батерију и простор</b>: Не троши батерију као остале апликације за навигацију. Компактне мапе чувају драгоцени простор на вашем телефону.
|
‣ <b> Чува вашу батерију и простор </b>: не конзумира батерију као остале навигационе апликације. Компактне картице сачувајте драгоцени простор на вашем телефону.
|
||||||
‣ <b>Отворено и направљено од стране заједнице</b>: Људи попут вас су допринели развоју апликације додавањем локација на OpenStreetMap, тестирањем, давањем повратних информација о апликацији и помогли су својим програмерским вештинама и донацијама.
|
‣ <b> Отворено и направио је заједницу </b>: Људи попут вас је помогли да додају апликацију додавањем локација на OpenStreetMap-у, тестирању и давање повратних информација о апликацији и доприносе вашим развојним вештинама и новцу.
|
||||||
‣ <b>Отворено и транспарентно доношење одлука и употреба донација, непрофитна и потпуно отвореног кода.</b>
|
‣ <b> Отворено и транспарентно доношење одлука и употреба финансија, непрофитна и потпуно отворена извора. </b>
|
||||||
|
|
||||||
<b> Главне карактеристике </b>:
|
<b> Главне карактеристике </b>:
|
||||||
• Преузмимање детаљне мапе са локацијама које нису доступне са Google мапама
|
• Преузмите детаљне мапе са локацијама које нису доступне са Гоогле мапама
|
||||||
• Режим за излете са истакнутим планинарским стазама, камповима, изворима воде, планинским врховима, изохипсама итд.
|
• Улазнице за излете са истакнутим планинарским стазама, камповима, изворима воде, планинске врхове, контурне линије итд.
|
||||||
• Стазе за планинарење и бицикле
|
• Стазе за планинарење и бицикле
|
||||||
• Тачке интереса као што су ресторани, бензинске пумпе, хотели, продавнице, знаменитости и још много тога
|
• Тачке интереса као што су ресторани, бензинске пумпе, хотели, продавнице, погледа и још много тога
|
||||||
• Претрага по називу, адреси или категоријама
|
• Претражите име или адресу или по категоријама камате
|
||||||
• Навигација са гласовним инструкцијама за ходање, вожњу бицикла или аутомобила
|
• навигација са гласовним најавама за ходање, бициклизам или аутомобил
|
||||||
• Означивање омиљених места једним додиром
|
• Означите своја омиљена места једним додиром
|
||||||
• Офлајн чланци Википедије
|
• Офлајн чланци Википедије
|
||||||
• Транзитни слој подземне железнице са навигацијом
|
• транзитни слој подземне пруге са навигацијом
|
||||||
• Снимање ГПС путања
|
• Снимање ГПС трагова
|
||||||
• Увоз и увоз маркера и путања у KML, KMZ, GPX формате
|
• Ознака и увоз и увоз у KML, KMZ, GPX формате
|
||||||
• Тамни режим за употребу током ноћи
|
• Тамни режим за употребу током ноћи
|
||||||
• Побољшајте карту за све кориснике, користећи основни едитор за мапе
|
• Побољшајте карту за све кориснике, користећи основни уредни уредник мапе
|
||||||
|
|
||||||
<b> Слобода је овде </b>
|
<b> Слобода је овде </b>
|
||||||
Откријте своје путовање, крећете се са светом са приватношћу и заједницом на првом месту!
|
Откријте своје путовање, крећете се са свијетом са приватношћу и заједницом на првом месту!
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Представљамо CoMaps лого!
|
||||||
|
• ажуриране изохипсе за многе регионе на кораке од 20 или 50 метара
|
||||||
|
• додате везе ка Panoramax сликама за изабране тачке интересовања (POI)
|
||||||
|
• подаци са OpenStreetMap-а од 13. јула
|
||||||
|
• додате боје за многе елементе и раније приказивање постојећих површина
|
||||||
|
• приказ стања радног времена при избору POI-ја
|
||||||
|
• мочваре подељене на неколико различитих типова
|
||||||
|
• ажуриране боје вегетације и других елемената на мапи, ажуриране поједине иконе
|
||||||
|
• на отвореном: наглашеније изохипсе
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
package app.organicmaps.location;
|
|
||||||
|
|
||||||
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
|
|
||||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
|
||||||
import static app.organicmaps.sdk.util.concurrency.UiThread.runLater;
|
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.location.Location;
|
|
||||||
import android.os.Looper;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.RequiresPermission;
|
|
||||||
import app.organicmaps.sdk.location.BaseLocationProvider;
|
|
||||||
import app.organicmaps.sdk.util.LocationUtils;
|
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
|
||||||
import com.google.android.gms.common.api.ApiException;
|
|
||||||
import com.google.android.gms.common.api.ResolvableApiException;
|
|
||||||
import com.google.android.gms.location.FusedLocationProviderClient;
|
|
||||||
import com.google.android.gms.location.Granularity;
|
|
||||||
import com.google.android.gms.location.LocationAvailability;
|
|
||||||
import com.google.android.gms.location.LocationCallback;
|
|
||||||
import com.google.android.gms.location.LocationRequest;
|
|
||||||
import com.google.android.gms.location.LocationResult;
|
|
||||||
import com.google.android.gms.location.LocationServices;
|
|
||||||
import com.google.android.gms.location.LocationSettingsRequest;
|
|
||||||
import com.google.android.gms.location.LocationSettingsStatusCodes;
|
|
||||||
import com.google.android.gms.location.Priority;
|
|
||||||
import com.google.android.gms.location.SettingsClient;
|
|
||||||
|
|
||||||
class GoogleFusedLocationProvider extends BaseLocationProvider
|
|
||||||
{
|
|
||||||
private static final String TAG = GoogleFusedLocationProvider.class.getSimpleName();
|
|
||||||
@NonNull
|
|
||||||
private final FusedLocationProviderClient mFusedLocationClient;
|
|
||||||
@NonNull
|
|
||||||
private final SettingsClient mSettingsClient;
|
|
||||||
@NonNull
|
|
||||||
private final Context mContext;
|
|
||||||
|
|
||||||
private class GoogleLocationCallback extends LocationCallback
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onLocationResult(@NonNull LocationResult result)
|
|
||||||
{
|
|
||||||
final Location location = result.getLastLocation();
|
|
||||||
if (location != null)
|
|
||||||
mListener.onLocationChanged(location);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocationAvailability(@NonNull LocationAvailability availability)
|
|
||||||
{
|
|
||||||
Logger.w(TAG, "isLocationAvailable = " + availability.isLocationAvailable());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final GoogleLocationCallback mCallback = new GoogleLocationCallback();
|
|
||||||
|
|
||||||
GoogleFusedLocationProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
|
||||||
{
|
|
||||||
super(listener);
|
|
||||||
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
|
|
||||||
mSettingsClient = LocationServices.getSettingsClient(context);
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
|
|
||||||
public void start(long interval)
|
|
||||||
{
|
|
||||||
Logger.d(TAG);
|
|
||||||
|
|
||||||
final LocationRequest locationRequest =
|
|
||||||
new LocationRequest
|
|
||||||
.Builder(Priority.PRIORITY_HIGH_ACCURACY, interval)
|
|
||||||
// Wait a few seconds for accurate locations initially, when accurate locations could not be computed on the
|
|
||||||
// device immediately. https://github.com/organicmaps/organicmaps/issues/2149
|
|
||||||
.setWaitForAccurateLocation(true)
|
|
||||||
// The desired location granularity should correspond to the client permission level. The client will be
|
|
||||||
// delivered fine locations while it has the Manifest.permission.ACCESS_FINE_LOCATION permission, coarse
|
|
||||||
// locations while it has only the Manifest.permission.ACCESS_COARSE_LOCATION permission, and no location
|
|
||||||
// if it lacks either.
|
|
||||||
.setGranularity(Granularity.GRANULARITY_PERMISSION_LEVEL)
|
|
||||||
// Sets the maximum age of an initial historical location delivered for this request.
|
|
||||||
.setMaxUpdateAgeMillis(60 * 60 * 1000L) // 1 hour
|
|
||||||
.build();
|
|
||||||
|
|
||||||
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
|
|
||||||
builder.addLocationRequest(locationRequest);
|
|
||||||
builder.setAlwaysShow(true); // improves the wording/appearance of the dialog
|
|
||||||
final LocationSettingsRequest locationSettingsRequest = builder.build();
|
|
||||||
|
|
||||||
mSettingsClient.checkLocationSettings(locationSettingsRequest)
|
|
||||||
.addOnSuccessListener(locationSettingsResponse -> {
|
|
||||||
Logger.d(TAG, "Service is available");
|
|
||||||
mFusedLocationClient.requestLocationUpdates(locationRequest, mCallback, Looper.myLooper());
|
|
||||||
})
|
|
||||||
.addOnFailureListener(e -> {
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int statusCode = ((ApiException) e).getStatusCode();
|
|
||||||
if (statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED)
|
|
||||||
{
|
|
||||||
// This case happens if at least one of the following system settings is off:
|
|
||||||
// 1. Location Services a.k.a GPS;
|
|
||||||
// 2. Google Location Accuracy a.k.a High Accuracy;
|
|
||||||
// 3. Both Wi-Fi && Mobile Data together (needed for 2).
|
|
||||||
//
|
|
||||||
// PendingIntent below will show a special Google "For better experience... enable (1) and/or (2) and/or
|
|
||||||
// (3)" dialog. This system dialog can change system settings if "Yes" is pressed. We can't do it from our
|
|
||||||
// app. However, we don't want to annoy a user who disabled (2) or (3) intentionally. GPS (1) is mandatory
|
|
||||||
// to continue, while (2) and (3) are not dealbreakers here.
|
|
||||||
//
|
|
||||||
// See https://github.com/organicmaps/organicmaps/issues/3846
|
|
||||||
//
|
|
||||||
if (LocationUtils.areLocationServicesTurnedOn(mContext))
|
|
||||||
{
|
|
||||||
Logger.d(TAG, "Don't show 'location resolution' dialog because location services are already on");
|
|
||||||
mFusedLocationClient.requestLocationUpdates(locationRequest, mCallback, Looper.myLooper());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Logger.d(TAG, "Requesting 'location resolution' dialog");
|
|
||||||
final ResolvableApiException resolvable = (ResolvableApiException) e;
|
|
||||||
final PendingIntent pendingIntent = resolvable.getResolution();
|
|
||||||
// Call this callback in the next event loop to allow LocationHelper::start() to finish.
|
|
||||||
runLater(() -> mListener.onLocationResolutionRequired(pendingIntent));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (ClassCastException ex)
|
|
||||||
{
|
|
||||||
// Ignore, should be an impossible error.
|
|
||||||
// https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient
|
|
||||||
Logger.e(TAG, "An error that should be impossible: " + ex);
|
|
||||||
}
|
|
||||||
// Location settings are not satisfied. However, we have no way to fix the
|
|
||||||
// settings so we won't show the dialog.
|
|
||||||
Logger.e(TAG, "Service is not available: " + e);
|
|
||||||
// Call this callback in the next event loop to allow LocationHelper::start() to finish.
|
|
||||||
runLater(mListener::onFusedLocationUnsupported);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void stop()
|
|
||||||
{
|
|
||||||
Logger.d(TAG);
|
|
||||||
mFusedLocationClient.removeLocationUpdates(mCallback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
package app.organicmaps.sdk.location;
|
||||||
|
|
||||||
|
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
|
||||||
|
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||||
|
import static app.organicmaps.sdk.util.concurrency.UiThread.runLater;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.os.Looper;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.RequiresPermission;
|
||||||
|
|
||||||
|
import com.google.android.gms.common.api.ApiException;
|
||||||
|
import com.google.android.gms.common.api.ResolvableApiException;
|
||||||
|
import com.google.android.gms.location.FusedLocationProviderClient;
|
||||||
|
import com.google.android.gms.location.Granularity;
|
||||||
|
import com.google.android.gms.location.LocationAvailability;
|
||||||
|
import com.google.android.gms.location.LocationCallback;
|
||||||
|
import com.google.android.gms.location.LocationRequest;
|
||||||
|
import com.google.android.gms.location.LocationResult;
|
||||||
|
import com.google.android.gms.location.LocationServices;
|
||||||
|
import com.google.android.gms.location.LocationSettingsRequest;
|
||||||
|
import com.google.android.gms.location.LocationSettingsStatusCodes;
|
||||||
|
import com.google.android.gms.location.Priority;
|
||||||
|
import com.google.android.gms.location.SettingsClient;
|
||||||
|
|
||||||
|
import app.organicmaps.sdk.util.LocationUtils;
|
||||||
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
|
|
||||||
|
class GoogleFusedLocationProvider extends BaseLocationProvider
|
||||||
|
{
|
||||||
|
private static final String TAG = GoogleFusedLocationProvider.class.getSimpleName();
|
||||||
|
@NonNull
|
||||||
|
private final FusedLocationProviderClient mFusedLocationClient;
|
||||||
|
@NonNull
|
||||||
|
private final SettingsClient mSettingsClient;
|
||||||
|
@NonNull
|
||||||
|
private final Context mContext;
|
||||||
|
|
||||||
|
private class GoogleLocationCallback extends LocationCallback
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onLocationResult(@NonNull LocationResult result)
|
||||||
|
{
|
||||||
|
final Location location = result.getLastLocation();
|
||||||
|
if (location != null)
|
||||||
|
mListener.onLocationChanged(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationAvailability(@NonNull LocationAvailability availability)
|
||||||
|
{
|
||||||
|
Logger.w(TAG, "isLocationAvailable = " + availability.isLocationAvailable());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final GoogleLocationCallback mCallback = new GoogleLocationCallback();
|
||||||
|
|
||||||
|
GoogleFusedLocationProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
||||||
|
{
|
||||||
|
super(listener);
|
||||||
|
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
|
||||||
|
mSettingsClient = LocationServices.getSettingsClient(context);
|
||||||
|
mContext = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
|
||||||
|
public void start(long interval)
|
||||||
|
{
|
||||||
|
Logger.d(TAG);
|
||||||
|
|
||||||
|
final LocationRequest locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, interval)
|
||||||
|
// Wait a few seconds for accurate locations initially, when accurate locations could not be computed on the device immediately.
|
||||||
|
// https://github.com/organicmaps/organicmaps/issues/2149
|
||||||
|
.setWaitForAccurateLocation(true)
|
||||||
|
// The desired location granularity should correspond to the client permission level. The client will be
|
||||||
|
// delivered fine locations while it has the Manifest.permission.ACCESS_FINE_LOCATION permission, coarse
|
||||||
|
// locations while it has only the Manifest.permission.ACCESS_COARSE_LOCATION permission, and no location
|
||||||
|
// if it lacks either.
|
||||||
|
.setGranularity(Granularity.GRANULARITY_PERMISSION_LEVEL)
|
||||||
|
// Sets the maximum age of an initial historical location delivered for this request.
|
||||||
|
.setMaxUpdateAgeMillis(60 * 60 * 1000L) // 1 hour
|
||||||
|
.build();
|
||||||
|
|
||||||
|
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
|
||||||
|
builder.addLocationRequest(locationRequest);
|
||||||
|
builder.setAlwaysShow(true); // improves the wording/appearance of the dialog
|
||||||
|
final LocationSettingsRequest locationSettingsRequest = builder.build();
|
||||||
|
|
||||||
|
mSettingsClient.checkLocationSettings(locationSettingsRequest).addOnSuccessListener(locationSettingsResponse -> {
|
||||||
|
Logger.d(TAG, "Service is available");
|
||||||
|
mFusedLocationClient.requestLocationUpdates(locationRequest, mCallback, Looper.myLooper());
|
||||||
|
}).addOnFailureListener(e -> {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int statusCode = ((ApiException) e).getStatusCode();
|
||||||
|
if (statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED)
|
||||||
|
{
|
||||||
|
// This case happens if at least one of the following system settings is off:
|
||||||
|
// 1. Location Services a.k.a GPS;
|
||||||
|
// 2. Google Location Accuracy a.k.a High Accuracy;
|
||||||
|
// 3. Both Wi-Fi && Mobile Data together (needed for 2).
|
||||||
|
//
|
||||||
|
// PendingIntent below will show a special Google "For better experience... enable (1) and/or (2) and/or (3)"
|
||||||
|
// dialog. This system dialog can change system settings if "Yes" is pressed. We can't do it from our app.
|
||||||
|
// However, we don't want to annoy a user who disabled (2) or (3) intentionally. GPS (1) is mandatory to
|
||||||
|
// continue, while (2) and (3) are not dealbreakers here.
|
||||||
|
//
|
||||||
|
// See https://github.com/organicmaps/organicmaps/issues/3846
|
||||||
|
//
|
||||||
|
if (LocationUtils.areLocationServicesTurnedOn(mContext))
|
||||||
|
{
|
||||||
|
Logger.d(TAG, "Don't show 'location resolution' dialog because location services are already on");
|
||||||
|
mFusedLocationClient.requestLocationUpdates(locationRequest, mCallback, Looper.myLooper());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Logger.d(TAG, "Requesting 'location resolution' dialog");
|
||||||
|
final ResolvableApiException resolvable = (ResolvableApiException) e;
|
||||||
|
final PendingIntent pendingIntent = resolvable.getResolution();
|
||||||
|
// Call this callback in the next event loop to allow LocationHelper::start() to finish.
|
||||||
|
runLater(() -> mListener.onLocationResolutionRequired(pendingIntent));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (ClassCastException ex)
|
||||||
|
{
|
||||||
|
// Ignore, should be an impossible error.
|
||||||
|
// https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient
|
||||||
|
Logger.e(TAG, "An error that should be impossible: " + ex);
|
||||||
|
}
|
||||||
|
// Location settings are not satisfied. However, we have no way to fix the
|
||||||
|
// settings so we won't show the dialog.
|
||||||
|
Logger.e(TAG, "Service is not available: " + e);
|
||||||
|
// Call this callback in the next event loop to allow LocationHelper::start() to finish.
|
||||||
|
runLater(mListener::onFusedLocationUnsupported);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void stop()
|
||||||
|
{
|
||||||
|
Logger.d(TAG);
|
||||||
|
mFusedLocationClient.removeLocationUpdates(mCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,25 +1,24 @@
|
|||||||
package app.organicmaps.location;
|
package app.organicmaps.sdk.location;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import app.organicmaps.sdk.location.AndroidNativeProvider;
|
|
||||||
import app.organicmaps.sdk.location.BaseLocationProvider;
|
|
||||||
import app.organicmaps.sdk.location.LocationProviderFactory;
|
|
||||||
import app.organicmaps.sdk.util.Config;
|
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
|
||||||
import com.google.android.gms.common.ConnectionResult;
|
import com.google.android.gms.common.ConnectionResult;
|
||||||
import com.google.android.gms.common.GoogleApiAvailability;
|
import com.google.android.gms.common.GoogleApiAvailability;
|
||||||
|
|
||||||
public class LocationProviderFactoryImpl implements LocationProviderFactory
|
import app.organicmaps.sdk.util.Config;
|
||||||
{
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
private static final String TAG = LocationProviderFactoryImpl.class.getSimpleName();
|
|
||||||
|
|
||||||
public boolean isGoogleLocationAvailable(@NonNull Context context)
|
public class LocationProviderFactory
|
||||||
|
{
|
||||||
|
private static final String TAG = LocationProviderFactory.class.getSimpleName();
|
||||||
|
|
||||||
|
public static boolean isGoogleLocationAvailable(@NonNull Context context)
|
||||||
{
|
{
|
||||||
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS;
|
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseLocationProvider getProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
public static BaseLocationProvider getProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
||||||
{
|
{
|
||||||
if (isGoogleLocationAvailable(context) && Config.useGoogleServices())
|
if (isGoogleLocationAvailable(context) && Config.useGoogleServices())
|
||||||
{
|
{
|
||||||
@@ -1 +0,0 @@
|
|||||||
সহজ মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - গোপনীয়তা সহ যাতায়াত
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
CoMaps és una aplicació de mapes lliure i de codi obert a càrrec de la comunitat que es basa en les dades OpenStreetMap i es fonamenta en el compromís amb la transparència i la privadesa sense ànim de lucre.
|
|
||||||
|
|
||||||
Uneix-te a la comunitat i ajuda a crear la millor aplicació de mapes.
|
|
||||||
• Fes servir l'aplicació i recomana-la.
|
|
||||||
• Dona la teva opinió i comunica qualsevol problema.
|
|
||||||
• Actualitza les dades de mapes a l'aplicació o al web d'OpenStreetMap.
|
|
||||||
|
|
||||||
<i>Els teus comentaris i les valoracions de 5 estrelles són el que més ens ajuda.</i>
|
|
||||||
|
|
||||||
‣ <b>Disseny senzill i polit</b>: funcions bàsiques i fàcils de fer servir que funcionen i punt.
|
|
||||||
‣ <b>Centrada en l'ús sense connexió</b>: planifica viatges a l'estranger i navega sense haver d'accedir a les dades mòbils o cerca punts d'interès durant rutes d'excursionisme llargues. Totes les funcions de l'aplicació s'han dissenyat perquè funcionin sense connexió.
|
|
||||||
‣ <b>Respecte per la privadesa</b>: el disseny de l'aplicació prioritza la privadesa. No t'identifica, no fa cap seguiment i no recull dades personals. A més, no té anuncis.
|
|
||||||
‣ <b>Ús eficient de la bateria i l'espai</b>: consumeix menys bateria que altres aplicacions de navegació. Els mapes compactes ocupen molt poc espai al telèfon.
|
|
||||||
‣ <b>Lliure gràcies a la comunitat</b>: aquesta aplicació s'ha desenvolupat gràcies a persones com tu que han afegit llocs a OpenStreetMap, han provat funcions, n'han aportat comentaris i hi han contribuït amb diners i esforç.
|
|
||||||
‣ <b>És un projecte obert i transparent en les seves decisions i finances. No té cap ànim de lucre i és completament de codi obert.</b>
|
|
||||||
|
|
||||||
<b>Funcions principals</b>:
|
|
||||||
• Mapes detallats que es poden baixar i inclouen llocs que no apareixen a Google Maps
|
|
||||||
• Mode exterior en què es ressalten les rutes d'excursionisme, els llocs d'acampada, les fonts d'aigua, els pics i les línies de contorn, entre altres coses
|
|
||||||
• Zones per a vianants i carrils bici
|
|
||||||
• Punts d'interès, com ara restaurants, benzineres, hotels, botigues, atraccions turístiques i molt més
|
|
||||||
• Cerques per nom, adreça o categoria de punt d'interès
|
|
||||||
• Navegació amb indicacions per veu mentre camines, vas amb bicicleta o condueixes
|
|
||||||
• Adreces d'interès perquè desis els teus llocs preferits amb un toc
|
|
||||||
• Articles de Wikipedia sense connexió
|
|
||||||
• Capa de línies de metro amb direccions
|
|
||||||
• Enregistrament d'itineraris
|
|
||||||
• Exportació i importació d'adreces d'interès i itineraris en els formats KML, KMZ i GPX
|
|
||||||
• Mode fosc per fer servir l'aplicació a la nit
|
|
||||||
• Millora de les dades de mapes per a tothom amb un editor integrat bàsic
|
|
||||||
• Compatibilitat amb Android Auto
|
|
||||||
|
|
||||||
Pots informar de problemes a l'aplicació, suggerir idees i unir-te a la comunitat al web <b><i>comaps.app</i></b>.
|
|
||||||
|
|
||||||
<b>La llibertat ha arribat</b>
|
|
||||||
Descobreix el teu camí i explora el món amb la privadesa i la comunitat com a eix central!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Navegació intuïtiva - Descobreix el teu camí - El poder de la comunitat
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps – Navega amb privadesa
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
En fællesskabsdrevet gratis og open source-kortapp baseret på OpenStreetMap-data og forstærket med en forpligtelse til gennemsigtighed, privatliv og non-profit.
|
|
||||||
|
|
||||||
Bliv en del af fællesskabet og vær med til at skabe den bedste kortapp
|
|
||||||
• Brug appen og fortæl andre om den
|
|
||||||
• Giv feedback og rapporter problemer
|
|
||||||
• Opdater kortdata i appen eller på OpenStreetMap-webstedet
|
|
||||||
|
|
||||||
<i>Din feedback og 5-stjernede anmeldelser er den bedste støtte for os!</i>
|
|
||||||
|
|
||||||
‣ <b>Enkel og poleret</b>: væsentlige, brugervenlige funktioner, der bare virker.
|
|
||||||
‣ <b>Offline-focused</b>: Planlæg og naviger på din rejse i udlandet uden behov for mobilfordbindelse, søg efter rutepunkter, mens du er på en lang vandretur osv. Alle app-funktioner er designet til at fungere offline..
|
|
||||||
‣ <b>Respekt for privatlivets fred</b>: Appen er designet med fokus på privatlivets fred – den identificerer ikke personer, sporer ikke og indsamler ikke personlige oplysninger. Annoncefri.
|
|
||||||
‣ <b>Sparer på batteriet og plads</b>: Dræner ikke dit batteri som andre navigationsapps. Kompakte kort sparer værdifuld plads på din telefon.
|
|
||||||
‣ <b>Gratis og udviklet af fællesskabet</b>: Folk som dig har været med til at udvikle appen ved at tilføje steder til OpenStreetMap, teste og give feedback på funktioner samt bidrage med deres udviklingskompetencer og penge.
|
|
||||||
‣ <b>Åben og gennemsigtig beslutningstagning og økonomi, non-profit og fuldstændig open source.</b>
|
|
||||||
|
|
||||||
<b>Vigtigste funktioner</b>:
|
|
||||||
• Detaljerede kort med steder, der ikke er tilgængelige på Google Maps, kan downloades.
|
|
||||||
• Udendørstilstand med fremhævede vandreruter, campingpladser, vandkilder, bjergtoppe, højdekurver osv.
|
|
||||||
• Gang- og cykelstier
|
|
||||||
• Interessepunkter som restauranter, tankstationer, hoteller, butikker, seværdigheder og meget mere
|
|
||||||
• Søg efter navn, adresse eller efter interessepunkt-kategori
|
|
||||||
• Navigation med stemmevejledning til gående, cyklende eller kørende
|
|
||||||
• Bogmærk dine yndlingssteder med ét enkelt tryk
|
|
||||||
• Offline Wikipedia-artikler
|
|
||||||
• Lag med metrolinjer og rutevejledning
|
|
||||||
• Sporoptagelse
|
|
||||||
• Eksportér og importér bogmærker og ruter i KML, KMZ, GPX-formater
|
|
||||||
• En mørk tilstand til brug om natten
|
|
||||||
• Forbedr kortdata for alle ved hjælp af en simpel, indbygget redigeringsfunktion
|
|
||||||
• Android Auto-understøttelse
|
|
||||||
|
|
||||||
Rapportér app-problemer, kom med forslag og bliv en del af vores fællesskab på <b><i>comaps.app</i></b> webstedet.
|
|
||||||
|
|
||||||
<b>Nu med frihed</b>
|
|
||||||
Udforsk din rejse, og navigér i verden med fokus på privatliv og fællesskab!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Naviger med privatliv
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
Una aplicación de mapas gratuita y de código abierto liderada por la comunidad, basada en los datos de OpenStreetMap y reforzada con un compromiso con la transparencia, la privacidad y la ausencia de fines de lucro.
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
Únete a la comunidad y ayuda a crear la mejor app de mapas
|
|
||||||
|
|
||||||
• Usa la aplicación y corre la voz sobre ella
|
|
||||||
|
|
||||||
• Envía comentarios y reporta problemas
|
|
||||||
|
|
||||||
• Actualiza los datos del mapa en la app o en el sitio web de OpenStreetMap
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<i>¡Tus comentarios y valoraciones de 5 estrellas son el mejor apoyo para nosotros!</i>
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
‣ <b>Sencilla y Pulida</b>: funciones esenciales fáciles de usar que simplemente funcionan.
|
|
||||||
|
|
||||||
‣ <b>Enfocada en el uso sin conexión</b>: Planifica y navega tus viajes sin necesidad de conexión móvil, busca puntos de paso en rutas remotas, etc. Todas las funciones están diseñadas para funcionar sin conexión.
|
|
||||||
|
|
||||||
‣ <b>Respeta tu Privacidad</b>: La app está diseñada pensando en tu privacidad: no identifica personas, no rastrea y no recoge datos personales. Sin publicidad.
|
|
||||||
|
|
||||||
‣ <b>Ahorra Batería y Espacio</b>: No consume la batería como otras apps de navegación. Los mapas compactos ahorran espacio valioso en tu teléfono.
|
|
||||||
|
|
||||||
‣ <b>Gratuita y Creada por la Comunidad</b>: Personas como tú ayudaron a construir la app añadiendo lugares a OpenStreetMap, probando funciones, dando opiniones y contribuyendo con desarrollo o financiación.
|
|
||||||
|
|
||||||
‣ <b>Toma de decisiones y finanzas abiertas y transparentes, sin ánimo de lucro y completamente de código abierto.</b>
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<b>Funciones Principales</b>:
|
|
||||||
|
|
||||||
• Mapas detallados descargables con lugares que no aparecen en Google Maps
|
|
||||||
|
|
||||||
• Modo exterior con rutas de senderismo destacadas, campings, fuentes de agua, picos, curvas de nivel, etc.
|
|
||||||
|
|
||||||
• Caminos peatonales y carriles bici
|
|
||||||
|
|
||||||
• Puntos de interés como restaurantes, gasolineras, hoteles, tiendas, lugares turísticos y muchos más
|
|
||||||
|
|
||||||
• Búsqueda por nombre, dirección o categoría de punto de interés
|
|
||||||
|
|
||||||
• Navegación con indicaciones por voz para caminar, ir en bici o conducir
|
|
||||||
|
|
||||||
• Guarda tus lugares favoritos con un solo toque
|
|
||||||
|
|
||||||
• Artículos de Wikipedia sin conexión
|
|
||||||
|
|
||||||
• Capa de transporte subterráneo y rutas
|
|
||||||
|
|
||||||
• Grabación de rutas
|
|
||||||
|
|
||||||
• Exporta e importa favoritos y rutas en formatos KML, KMZ y GPX
|
|
||||||
|
|
||||||
• Modo oscuro para usar de noche
|
|
||||||
|
|
||||||
• Mejora los datos del mapa para todos usando un editor básico integrado
|
|
||||||
|
|
||||||
• Compatibilidad con Android Auto
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
Por favor, informa de errores, sugiere ideas y únete a nuestra comunidad en el sitio web <b><i>comaps.app</i></b>.
|
|
||||||
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<b>La Libertad Está Aquí</b>
|
|
||||||
|
|
||||||
Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad.
|
|
||||||