Compare commits
88 commits
master
...
github/for
Author | SHA1 | Date | |
---|---|---|---|
|
039b71798e | ||
|
77f098acb6 | ||
|
a7d7d80a8a | ||
|
7aa4f4dc03 | ||
|
c92a138130 | ||
|
f9a6bc5c00 | ||
|
e0d98091ed | ||
|
3d9ebab8c2 | ||
|
f25019b8f8 | ||
|
f592cb23dd | ||
|
b34607bd04 | ||
|
a3d2a22f5b | ||
|
451d628bfd | ||
|
661807cde8 | ||
|
fa4e191fab | ||
|
ca2167658b | ||
|
2183b7a53c | ||
|
36f60c9d64 | ||
|
dae8c92ea2 | ||
|
76e66c31ec | ||
|
2cc11db7b2 | ||
|
549ca85c43 | ||
|
eb14807513 | ||
|
64ed84bfa9 | ||
|
fef69f5eec | ||
|
fb493aceee | ||
|
ded2bfe91d | ||
|
04418bc015 | ||
|
babef10504 | ||
|
e32a9d2665 | ||
|
7950027ddf | ||
|
97e162707b | ||
|
93c0970275 | ||
|
de69678a96 | ||
|
fff086dcf4 | ||
|
1077efd56c | ||
|
2d9820c745 | ||
|
beb457603a | ||
|
c59c102f62 | ||
|
90a6f01752 | ||
|
5ae27cbccb | ||
|
52bf2acb91 | ||
|
bcf18422b5 | ||
|
d728b8c7d6 | ||
|
d1bf71528e | ||
|
c5e3417af0 | ||
|
7166577cd1 | ||
|
7720b166c6 | ||
|
6ea723b0f5 | ||
|
91c544bfeb | ||
|
6be8ce1933 | ||
|
7d4e760778 | ||
|
a85dcd0efc | ||
|
0b5a4bf665 | ||
|
e62d6ef2d0 | ||
|
2d9a1ee57f | ||
|
0d0b43ae7e | ||
|
d30678a9b4 | ||
|
207bc0cd02 | ||
|
09d92aec73 | ||
|
d0a5911fd1 | ||
|
63e3de24a9 | ||
|
0b99a3572b | ||
|
7cb1b6e51f | ||
|
dc9c67480c | ||
|
dcb0d40816 | ||
|
e78bbe397e | ||
|
dc0523cbb3 | ||
|
104f02b987 | ||
|
2400c21819 | ||
|
bba8edbf48 | ||
|
b7eeeb2ed7 | ||
|
1d6e96e1fe | ||
|
ab8677439f | ||
|
ab44d68eac | ||
|
6f0c27d73a | ||
|
45a8da004b | ||
|
15b3613363 | ||
|
c3c3736f07 | ||
|
58b81266e8 | ||
|
8917001a27 | ||
|
184cd72db2 | ||
|
dce2313723 | ||
|
ba0f2bb041 | ||
|
7326924a23 | ||
|
cc9e6c9dc5 | ||
|
3a6166bae9 | ||
|
13719ee316 |
|
@ -21,7 +21,7 @@ IndentCaseLabels: false
|
|||
NamespaceIndentation: None
|
||||
PointerAlignment: Middle
|
||||
SortIncludes: true
|
||||
Standard: c++20
|
||||
Standard: c++17
|
||||
IncludeBlocks: Regroup
|
||||
IncludeCategories:
|
||||
# Tests --------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
6aa73face8b5eb8e026cfafa40d1983d4a0502c0
|
||||
480fa6c2fcf53be296504ac6ba8e6b3d70f92b42
|
||||
a6ede2b1466f0c9d8a443600ef337ba6b5832e58
|
||||
1377b81bf1cac72bb6da192da7fed6696d5d5281
|
||||
|
|
78
.github/CODEOWNERS
vendored
|
@ -1,69 +1,9 @@
|
|||
# All non-assigned.
|
||||
* @organicmaps/mergers
|
||||
# Visual design.
|
||||
/android/app/src/main/res/drawable*/ @organicmaps/design
|
||||
/android/app/src/main/res/font/ @organicmaps/design
|
||||
/android/app/src/main/res/mipmap*/ @organicmaps/design
|
||||
/data/*.ttf @organicmaps/design
|
||||
/data/resources-svg/ @organicmaps/design
|
||||
/data/search-icons/ @organicmaps/design
|
||||
/iphone/Maps/Images.xcassets/ @organicmaps/design
|
||||
# Android.
|
||||
/android/ @organicmaps/android
|
||||
/android/app/src/main/java/app/organicmaps/car/ @organicmaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @organicmaps/android
|
||||
/docs/JAVA_STYLE.md @organicmaps/android
|
||||
# no owner for translation changes
|
||||
/android/app/src/main/res/values*/strings.xml
|
||||
# iOS.
|
||||
/iphone/ @organicmaps/ios
|
||||
/xcode/ @organicmaps/ios
|
||||
/docs/OBJC_STYLE.md @organicmaps/ios
|
||||
# no owner for translation changes
|
||||
/iphone/plist.txt
|
||||
/iphone/Maps/LocalizedStrings/
|
||||
# Qt
|
||||
/qt/ @organicmaps/qt
|
||||
# Rendering
|
||||
/drape/ @organicmaps/rendering
|
||||
/drape_frontend/ @organicmaps/rendering
|
||||
# Map Data.
|
||||
/tools/python/maps_generator/ @organicmaps/data
|
||||
/generator/ @organicmaps/data
|
||||
/topography_generator/ @organicmaps/data
|
||||
/data/borders/ @organicmaps/data
|
||||
/data/conf/isolines/ @organicmaps/data
|
||||
/docs/SUBWAY_GENERATION.md @organicmaps/data
|
||||
/docs/MAPS.md @organicmaps/data
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @organicmaps/data
|
||||
# no owner (changed often to add a new POI)
|
||||
/generator/generator_tests/osm_type_test.cpp
|
||||
# Map Styles.
|
||||
/data/styles/ @organicmaps/styles
|
||||
/data/types.txt @organicmaps/styles
|
||||
/data/visibility.txt @organicmaps/styles
|
||||
/data/mapcss-mapping.csv @organicmaps/styles
|
||||
/data/replaced_tags.txt @organicmaps/styles
|
||||
/data/classificator.txt @organicmaps/styles
|
||||
/data/drules_* @organicmaps/styles
|
||||
/docs/STYLES.md
|
||||
/tools/kothic/ @organicmaps/styles
|
||||
# DevOps.
|
||||
/.github/workflows @organicmaps/devops
|
||||
/android/*gradle* @organicmaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
|
||||
/xcode/fastlane/ @organicmaps/devops
|
||||
# Growth.
|
||||
README.md @organicmaps/growth
|
||||
/.github/FUNDING.yml @organicmaps/growth
|
||||
/android/app/src/fdroid/play/ @organicmaps/growth
|
||||
/android/app/src/google/play/ @organicmaps/growth
|
||||
/iphone/metadata/ @organicmaps/growth
|
||||
# Legal.
|
||||
LEGAL @organicmaps/legal
|
||||
LICENSE @organicmaps/legal
|
||||
NOTICE @organicmaps/legal
|
||||
CONTRIBUTORS @organicmaps/legal
|
||||
/docs/CODE_OF_CONDUCT.md @organicmaps/legal
|
||||
/docs/DCO.md @organicmaps/legal
|
||||
/docs/GOVERNANCE.md @organicmaps/legal
|
||||
# Require legal approval for all new graphics
|
||||
android/app/src/main/res/drawable*/ @organicmaps/legal
|
||||
android/app/src/main/res/fonts/ @organicmaps/legal
|
||||
android/app/src/main/res/mipmap*/ @organicmaps/legal
|
||||
data/*.ttf @organicmaps/legal
|
||||
data/resources*/ @organicmaps/legal
|
||||
data/search-icons/ @organicmaps/legal
|
||||
data/styles/clear/style-*/ @organicmaps/legal
|
||||
iphone/Maps/Images.xcassets/ @organicmaps/legal
|
||||
|
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -2,7 +2,7 @@
|
|||
name: Feature Request
|
||||
about: Suggest an idea for Organic Maps
|
||||
title: ''
|
||||
labels: []
|
||||
labels: [Enhancement]
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
|
27
.github/workflows/android-beta.yaml
vendored
|
@ -56,24 +56,19 @@ jobs:
|
|||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Restore beta keys
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: private.git
|
||||
|
||||
- name: Configure repo with private keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$FIREBASE_APP_DISTRIBUTION_JSON" | base64 -d > android/app/firebase-app-distribution.json
|
||||
echo "$GOOGLE_SERVICES_JSON" | base64 -d > android/app/google-services.json
|
||||
echo "$SECURE_PROPERTIES" | base64 -d > android/app/secure.properties
|
||||
echo "$RELEASE_KEYSTORE" | base64 -d > android/app/release.keystore
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
FIREBASE_APP_DISTRIBUTION_JSON: ${{ secrets.FIREBASE_APP_DISTRIBUTION_JSON }}
|
||||
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
./configure.sh ./private.git
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Compile
|
||||
shell: bash
|
||||
|
|
25
.github/workflows/android-check.yaml
vendored
|
@ -23,10 +23,10 @@ on:
|
|||
- packaging/**
|
||||
- platform/*apple*
|
||||
- platform/*_ios*
|
||||
- platform/*_linux*
|
||||
- platform/*_mac*
|
||||
- platform/*qt*
|
||||
- platform/*_win*
|
||||
- platform/*_linux*
|
||||
- platform/*_mac*
|
||||
- platform/*qt*
|
||||
- platform/*_win*
|
||||
- pyhelpers/**
|
||||
- qt*/**
|
||||
- skin_generator/**
|
||||
|
@ -51,7 +51,7 @@ jobs:
|
|||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure in Open Source mode
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -66,12 +66,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
flavor: [WebDebug, FdroidDebug]
|
||||
include:
|
||||
- flavor: WebDebug
|
||||
arch: arm64
|
||||
- flavor: FdroidDebug
|
||||
arch: arm32
|
||||
flavor: [WebDebug, FdroidBeta]
|
||||
# Cancels previous jobs if the same branch or PR was updated again.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ matrix.flavor }}-${{ github.event.pull_request.number || github.ref }}
|
||||
|
@ -93,7 +88,7 @@ jobs:
|
|||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure in Open Source mode
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -111,11 +106,11 @@ jobs:
|
|||
run: |
|
||||
cmake --version
|
||||
ninja --version
|
||||
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
./gradlew -Parm64 assemble${{ matrix.flavor }}
|
||||
|
||||
- name: Upload ${{ matrix.flavor }} apk
|
||||
- name: Upload arm64-v8a ${{ matrix.flavor }} apk
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-${{ matrix.flavor }}
|
||||
name: android-arm64-v8a-${{ matrix.flavor }}
|
||||
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
|
||||
if-no-files-found: error
|
||||
|
|
29
.github/workflows/android-monkey.yaml
vendored
|
@ -56,26 +56,19 @@ jobs:
|
|||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Restore beta keys
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: private.git
|
||||
|
||||
- name: Configure repo with private keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$FIREBASE_TEST_LAB_JSON" | base64 -d > android/app/firebase-test-lab.json
|
||||
echo "$FIREBASE_APP_DISTRIBUTION_JSON" | base64 -d > android/app/firebase-app-distribution.json
|
||||
echo "$GOOGLE_SERVICES_JSON" | base64 -d > android/app/google-services.json
|
||||
echo "$SECURE_PROPERTIES" | base64 -d > android/app/secure.properties
|
||||
echo "$RELEASE_KEYSTORE" | base64 -d > android/app/release.keystore
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
FIREBASE_TEST_LAB_JSON: ${{ secrets.FIREBASE_TEST_LAB_JSON }}
|
||||
FIREBASE_APP_DISTRIBUTION_JSON: ${{ secrets.FIREBASE_APP_DISTRIBUTION_JSON }}
|
||||
GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }}
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
./configure.sh ./private.git
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Compile
|
||||
shell: bash
|
||||
|
|
17
.github/workflows/android-release-metadata.yaml
vendored
|
@ -26,14 +26,19 @@ jobs:
|
|||
ref: master
|
||||
path: screenshots
|
||||
|
||||
- name: Restore release keys
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: private.git
|
||||
|
||||
- name: Configure repo with private keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
||||
./configure.sh ./private.git
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Upload
|
||||
shell: bash
|
||||
|
|
34
.github/workflows/android-release.yaml
vendored
|
@ -29,7 +29,7 @@ jobs:
|
|||
version=$(tools/unix/version.sh ios_version)
|
||||
# +1 because below a "Bump versions" commit is created.
|
||||
# TODO: Find a way to refactor FDroid versioning without that additional commit.
|
||||
build=$(($(tools/unix/version.sh count) + 1))
|
||||
build=$(($(tools/unix/version.sh ios_build) + 1))
|
||||
code=$(($(tools/unix/version.sh android_code) + 1))
|
||||
tag=$version-$build-android
|
||||
echo "::set-output name=version::$version"
|
||||
|
@ -100,26 +100,19 @@ jobs:
|
|||
ref: master
|
||||
path: screenshots
|
||||
|
||||
- name: Restore release keys
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: private.git
|
||||
|
||||
- name: Configure repo with private keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
||||
echo "$HUAWEI_APPGALLERY_JSON" | base64 -d > android/app/huawei-appgallery.json
|
||||
echo "$AGCONNECT_SERVICES_JSON" | base64 -d > android/app/agconnect-services.json
|
||||
echo "$SECURE_PROPERTIES" | base64 -d > android/app/secure.properties
|
||||
echo "$RELEASE_KEYSTORE" | base64 -d > android/app/release.keystore
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
||||
HUAWEI_APPGALLERY_JSON: ${{ secrets.HUAWEI_APPGALLERY_JSON }}
|
||||
AGCONNECT_SERVICES_JSON: ${{ secrets.AGCONNECT_SERVICES_JSON }}
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
./configure.sh ./private.git
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Set up SDK
|
||||
shell: bash
|
||||
|
@ -155,8 +148,7 @@ jobs:
|
|||
{
|
||||
cat ${{ env.RELEASE_NOTES }}
|
||||
echo ""
|
||||
echo "See [a detailed announce](https://organicmaps.app/news/) on our website when app updates are published in all stores."
|
||||
echo "You can get automatic app updates from GitHub [using Obtainium](https://github.com/organicmaps/organicmaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)."
|
||||
echo "See [more details](https://organicmaps.app/news/) on our website when apps are published."
|
||||
echo ""
|
||||
echo "sha256sum:"
|
||||
echo -e '\n```'
|
||||
|
|
4
.github/workflows/appstream-check.yaml
vendored
|
@ -34,7 +34,3 @@ jobs:
|
|||
- name: Lint appstream data with flatpak Builder
|
||||
shell: bash
|
||||
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
||||
- name: Run appstreamcli in pedantic mode
|
||||
shell: bash
|
||||
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
|
6
.github/workflows/coverage-check.yaml
vendored
|
@ -94,7 +94,7 @@ jobs:
|
|||
llvm \
|
||||
gcovr
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -124,14 +124,14 @@ jobs:
|
|||
shell: bash
|
||||
working-directory: build
|
||||
env:
|
||||
QT_QPA_PLATFORM: "offscreen"
|
||||
# drape_tests - requires X Window
|
||||
# generator_integration_tests - https://github.com/organicmaps/organicmaps/issues/225
|
||||
# opening_hours_integration_tests - https://github.com/organicmaps/organicmaps/issues/219
|
||||
# opening_hours_supported_features_tests - https://github.com/organicmaps/organicmaps/issues/219
|
||||
# routing_integration_tests - https://github.com/organicmaps/organicmaps/issues/221
|
||||
# shaders_tests - https://github.com/organicmaps/organicmaps/issues/223
|
||||
# world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215
|
||||
CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
|
||||
CTEST_EXCLUDE_REGEX: "drape_tests|generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
|
||||
run: |
|
||||
sudo locale-gen en_US
|
||||
sudo locale-gen en_US.UTF-8
|
||||
|
|
6
.github/workflows/desktop-file-check.yaml
vendored
|
@ -3,7 +3,7 @@ on:
|
|||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
paths:
|
||||
- qt/res/app.organicmaps.desktop.desktop
|
||||
- qt/res/OrganicMaps.desktop
|
||||
- .github/workflows/desktop-file-check.yaml # Run check on self change
|
||||
|
||||
jobs:
|
||||
|
@ -16,7 +16,7 @@ jobs:
|
|||
with:
|
||||
fetch-depth: 1
|
||||
sparse-checkout: |
|
||||
qt/res/app.organicmaps.desktop.desktop
|
||||
qt/res/OrganicMaps.desktop
|
||||
|
||||
- name: Install desktop-file-validate tool
|
||||
shell: bash
|
||||
|
@ -27,4 +27,4 @@ jobs:
|
|||
|
||||
- name: Validate desktop file
|
||||
shell: bash
|
||||
run: desktop-file-validate qt/res/app.organicmaps.desktop.desktop && echo "Successfully validated .desktop file"
|
||||
run: desktop-file-validate qt/res/OrganicMaps.desktop && echo "Successfully validated .desktop file"
|
||||
|
|
31
.github/workflows/ios-beta.yaml
vendored
|
@ -33,9 +33,9 @@ on:
|
|||
jobs:
|
||||
ios-beta:
|
||||
name: Apple TestFlight
|
||||
runs-on: macos-15
|
||||
runs-on: macos-14
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
@ -52,23 +52,18 @@ jobs:
|
|||
- name: Parallel submodules checkout
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
||||
|
||||
- name: Restore beta keys
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p xcode/keys
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$APPSTORE_JSON" | base64 -d > xcode/keys/appstore.json
|
||||
echo "$CERTIFICATES_DEV_P12" | base64 -d > xcode/keys/CertificatesDev.p12
|
||||
echo "$CERTIFICATES_DISTR_P12" | base64 -d > xcode/keys/CertificatesDistr.p12
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
APPSTORE_JSON: ${{ secrets.APPSTORE_JSON }}
|
||||
CERTIFICATES_DEV_P12: ${{ secrets.CERTIFICATES_DEV_P12 }}
|
||||
CERTIFICATES_DISTR_P12: ${{ secrets.CERTIFICATES_DISTR_P12 }}
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: private.git
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
- name: Configure repo with private keys
|
||||
run: |
|
||||
./configure.sh ./private.git
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Compile and upload to TestFlight
|
||||
run: |
|
||||
|
|
8
.github/workflows/ios-check.yaml
vendored
|
@ -35,9 +35,9 @@ on:
|
|||
jobs:
|
||||
ios-check:
|
||||
name: Build iOS
|
||||
runs-on: macos-15
|
||||
runs-on: macos-14
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
@ -59,7 +59,7 @@ jobs:
|
|||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -78,7 +78,7 @@ jobs:
|
|||
-scheme OMaps \
|
||||
-configuration Debug \
|
||||
-sdk iphonesimulator \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' \
|
||||
-quiet \
|
||||
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
|
||||
CODE_SIGNING_REQUIRED=NO \
|
||||
|
|
21
.github/workflows/ios-release.yaml
vendored
|
@ -5,9 +5,9 @@ on:
|
|||
jobs:
|
||||
ios-release:
|
||||
name: iOS Release
|
||||
runs-on: macos-15
|
||||
runs-on: macos-14
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
@ -16,13 +16,20 @@ jobs:
|
|||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Restore release keys
|
||||
- name: Checkout private keys
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ secrets.PRIVATE_REPO }}
|
||||
ssh-key: ${{ secrets.PRIVATE_SSH_KEY }}
|
||||
ref: master
|
||||
path: ./private.git
|
||||
|
||||
- name: Configure repo with private keys
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p xcode/keys
|
||||
echo "$APPSTORE_JSON" | base64 -d > xcode/keys/appstore.json
|
||||
env:
|
||||
APPSTORE_JSON: ${{ secrets.APPSTORE_JSON }}
|
||||
mkdir -p xcode/keys/
|
||||
cp -p ./private.git/xcode/keys/appstore.json xcode/keys/
|
||||
rm -rf ./private.git
|
||||
|
||||
- name: Checkout screenshots
|
||||
uses: actions/checkout@v4
|
||||
|
|
15
.github/workflows/linux-check.yaml
vendored
|
@ -61,17 +61,13 @@ jobs:
|
|||
libgl1-mesa-dev \
|
||||
libglvnd-dev \
|
||||
libharfbuzz-dev \
|
||||
libxrandr-dev \
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
qt6-base-dev \
|
||||
libqt6svg6-dev \
|
||||
qt6-positioning-dev \
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -132,17 +128,13 @@ jobs:
|
|||
libgl1-mesa-dev \
|
||||
libglvnd-dev \
|
||||
libharfbuzz-dev \
|
||||
libxrandr-dev \
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
qt6-base-dev \
|
||||
libqt6svg6-dev \
|
||||
qt6-positioning-dev \
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
@ -173,6 +165,7 @@ jobs:
|
|||
shell: bash
|
||||
working-directory: build
|
||||
env:
|
||||
# drape_tests - requires X Window
|
||||
QT_QPA_PLATFORM: "offscreen"
|
||||
# generator_integration_tests - https://github.com/organicmaps/organicmaps/issues/225
|
||||
# opening_hours_integration_tests - https://github.com/organicmaps/organicmaps/issues/219
|
||||
|
@ -180,7 +173,7 @@ jobs:
|
|||
# routing_integration_tests - https://github.com/organicmaps/organicmaps/issues/221
|
||||
# shaders_tests - https://github.com/organicmaps/organicmaps/issues/223
|
||||
# world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215
|
||||
CTEST_EXCLUDE_REGEX: "generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
|
||||
CTEST_EXCLUDE_REGEX: "drape_tests|generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
|
||||
run: |
|
||||
sudo locale-gen en_US
|
||||
sudo locale-gen en_US.UTF-8
|
||||
|
|
6
.github/workflows/macos-check.yaml
vendored
|
@ -30,9 +30,9 @@ on:
|
|||
jobs:
|
||||
macos-matrix:
|
||||
name: macOS builds and tests
|
||||
runs-on: macos-15
|
||||
runs-on: macos-14
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_15.3.app/Contents/Developer
|
||||
HOMEBREW_NO_ANALYTICS: 1
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
strategy:
|
||||
|
@ -57,7 +57,7 @@ jobs:
|
|||
run: |
|
||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
|
|
22
.github/workflows/stale.yml
vendored
|
@ -1,22 +0,0 @@
|
|||
name: Close stale PRs
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # Runs every day at midnight
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-pr-stale: 180 # 6 months before warning
|
||||
days-before-pr-close: 365 # Closed after 12 months
|
||||
stale-pr-label: "stale"
|
||||
stale-pr-message: "Hi! This PR has been inactive for 6 months. If it's still relevant, please update it to let us know you’d like to keep it open 😊"
|
||||
close-pr-message: "This PR has been automatically closed after 12 months of inactivity."
|
||||
days-before-issue-stale: -1 # Issues are never stale
|
||||
days-before-issue-close: -1 # Issues are never closed
|
||||
remove-stale-when-updated: true
|
31
.github/workflows/strings-check.yaml
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
name: Validate translation strings
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/workflows/strings-check.yaml # Run check on self change
|
||||
- data/strings/strings.txt
|
||||
- data/strings/types_strings.txt
|
||||
- data/strings/sound.txt
|
||||
- data/countries_names.txt
|
||||
- iphone/plist.txt
|
||||
- tools/python/strings_utils.py
|
||||
|
||||
jobs:
|
||||
validate-translation-strings:
|
||||
name: Validate translation strings
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3'
|
||||
|
||||
- name: Validate string files
|
||||
shell: bash
|
||||
run: |
|
||||
for f in data/strings/strings.txt data/strings/types_strings.txt data/strings/sound.txt data/countries_names.txt iphone/plist.txt; do
|
||||
./tools/python/strings_utils.py --validate $f -o
|
||||
done;
|
||||
git diff --exit-code
|
4
.gitignore
vendored
|
@ -20,7 +20,6 @@ data/drules_proto_default_design.bin
|
|||
data/colors_design.txt
|
||||
data/patterns_design.txt
|
||||
data/bookmarks
|
||||
data/edits.xml
|
||||
|
||||
# Compiled Python
|
||||
*.pyc
|
||||
|
@ -85,7 +84,7 @@ data/[0-9][0-9][0-9][0-9][0-9][0-9]
|
|||
data/gps_track.dat
|
||||
# temporary files for downloader
|
||||
data/settings.ini
|
||||
data/test_data/world_feed_integration_tests_data
|
||||
data/world_feed_integration_tests_data
|
||||
|
||||
# benchmark results
|
||||
data/benchmarks/*.trace
|
||||
|
@ -147,7 +146,6 @@ iphone/Maps/app.omaps/
|
|||
|
||||
*.autosave
|
||||
|
||||
# CMake
|
||||
cmake-build-*
|
||||
build/
|
||||
|
||||
|
|
61
.gitmodules
vendored
|
@ -1,23 +1,29 @@
|
|||
[submodule "tools/osmctools"]
|
||||
path = tools/osmctools
|
||||
url = https://git.omaps.dev/organicmaps/osmctools.git
|
||||
url = https://github.com/organicmaps/osmctools.git
|
||||
[submodule "tools/kothic"]
|
||||
path = tools/kothic
|
||||
url = https://git.omaps.dev/organicmaps/kothic.git
|
||||
url = https://github.com/organicmaps/kothic.git
|
||||
[submodule "tools/macdeployqtfix"]
|
||||
path = tools/macdeployqtfix
|
||||
url = https://github.com/aurelien-rainone/macdeployqtfix.git
|
||||
[submodule "3party/protobuf/protobuf"]
|
||||
path = 3party/protobuf/protobuf
|
||||
url = https://git.omaps.dev/organicmaps/protobuf.git
|
||||
url = https://github.com/organicmaps/protobuf.git
|
||||
[submodule "tools/twine"]
|
||||
path = tools/twine
|
||||
url = https://github.com/organicmaps/twine.git
|
||||
[submodule "3party/Vulkan-Headers"]
|
||||
path = 3party/Vulkan-Headers
|
||||
url = https://github.com/KhronosGroup/Vulkan-Headers.git
|
||||
[submodule "3party/boost"]
|
||||
path = 3party/boost
|
||||
url = https://github.com/boostorg/boost.git
|
||||
branch = boost-1.85.0
|
||||
branch = boost-1.76.0
|
||||
ignore = dirty
|
||||
[submodule "3party/just_gtfs"]
|
||||
path = 3party/just_gtfs
|
||||
url = https://git.omaps.dev/organicmaps/just_gtfs.git
|
||||
url = https://github.com/organicmaps/just_gtfs.git
|
||||
branch = for-usage-as-submodule
|
||||
[submodule "3party/expat"]
|
||||
path = 3party/expat
|
||||
|
@ -30,38 +36,29 @@
|
|||
path = 3party/icu/icu
|
||||
url = https://github.com/unicode-org/icu.git
|
||||
[submodule "3party/freetype/freetype"]
|
||||
path = 3party/freetype/freetype
|
||||
url = https://git.omaps.dev/organicmaps/freetype.git
|
||||
path = 3party/freetype/freetype
|
||||
url = https://github.com/organicmaps/freetype.git
|
||||
[submodule "3party/googletest"]
|
||||
path = 3party/googletest
|
||||
url = https://github.com/google/googletest.git
|
||||
path = 3party/googletest
|
||||
url = https://github.com/google/googletest.git
|
||||
[submodule "3party/fast_double_parser"]
|
||||
path = 3party/fast_double_parser
|
||||
url = https://github.com/lemire/fast_double_parser.git
|
||||
path = 3party/fast_double_parser
|
||||
url = https://github.com/lemire/fast_double_parser.git
|
||||
[submodule "3party/pugixml/pugixml"]
|
||||
path = 3party/pugixml/pugixml
|
||||
url = https://github.com/zeux/pugixml.git
|
||||
path = 3party/pugixml/pugixml
|
||||
url = https://github.com/zeux/pugixml.git
|
||||
[submodule "3party/jansson/jansson"]
|
||||
path = 3party/jansson/jansson
|
||||
url = https://github.com/akheron/jansson.git
|
||||
path = 3party/jansson/jansson
|
||||
url = https://github.com/akheron/jansson.git
|
||||
[submodule "3party/gflags"]
|
||||
path = 3party/gflags
|
||||
url = https://github.com/gflags/gflags
|
||||
path = 3party/gflags
|
||||
url = https://github.com/gflags/gflags
|
||||
[submodule "3party/fast_obj"]
|
||||
path = 3party/fast_obj
|
||||
url = https://github.com/thisistherk/fast_obj
|
||||
path = 3party/fast_obj
|
||||
url = https://github.com/thisistherk/fast_obj
|
||||
[submodule "3party/harfbuzz/harfbuzz"]
|
||||
path = 3party/harfbuzz/harfbuzz
|
||||
url = https://github.com/harfbuzz/harfbuzz.git
|
||||
path = 3party/harfbuzz/harfbuzz
|
||||
url = https://github.com/harfbuzz/harfbuzz.git
|
||||
[submodule "3party/utfcpp"]
|
||||
path = 3party/utfcpp
|
||||
url = https://github.com/nemtrif/utfcpp.git
|
||||
[submodule "3party/glfw"]
|
||||
path = 3party/glfw
|
||||
url = https://github.com/glfw/glfw.git
|
||||
[submodule "3party/CMake-MetalShaderSupport"]
|
||||
path = 3party/CMake-MetalShaderSupport
|
||||
url = https://github.com/dpogue/CMake-MetalShaderSupport.git
|
||||
[submodule "3party/imgui/imgui"]
|
||||
path = 3party/imgui/imgui
|
||||
url = https://github.com/ocornut/imgui
|
||||
path = 3party/utfcpp
|
||||
url = https://github.com/nemtrif/utfcpp.git
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 989857d2e5e54869c35ad06fb21a67d12a2dbc67
|
|
@ -22,6 +22,7 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
|
|||
set(EXPAT_DTD OFF)
|
||||
set(EXPAT_NS ON)
|
||||
add_subdirectory(expat/expat)
|
||||
add_library(expat::expat ALIAS expat)
|
||||
|
||||
# Configure Jansson library.
|
||||
set(JANSSON_BUILD_DOCS OFF)
|
||||
|
@ -66,19 +67,4 @@ add_subdirectory(vulkan_wrapper)
|
|||
|
||||
if (PLATFORM_DESKTOP)
|
||||
add_subdirectory(libtess2)
|
||||
|
||||
set(GLFW_BUILD_DOCS OFF CACHE BOOL "")
|
||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "")
|
||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "")
|
||||
set(GLFW_INSTALL OFF CACHE BOOL "")
|
||||
set(GLFW_VULKAN_STATIC OFF CACHE BOOL "")
|
||||
set(GLFW_BUILD_WAYLAND OFF CACHE BOOL "")
|
||||
# Disable ARC for glfw and re-enable after it because it's globally set in the root CMakeLists.txt
|
||||
set(CMAKE_OBJC_FLAGS "")
|
||||
add_subdirectory(glfw)
|
||||
set_target_properties(glfw PROPERTIES UNITY_BUILD OFF)
|
||||
set_target_properties(glfw PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO)
|
||||
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
||||
|
||||
add_subdirectory(imgui)
|
||||
endif()
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 595c8d4794410a4e64b98dc58d27c0310d7ea2fd
|
||||
Subproject commit 31aa7f634b052d87ede4664053e85f3f4d1d50d3
|
|
@ -1 +1 @@
|
|||
Subproject commit ab7968a0bbcf574a7859240d1d8443f58ed6f6cf
|
||||
Subproject commit 564e2ac16907019696cdaba8a93e3588ec596062
|
|
@ -1 +1 @@
|
|||
Subproject commit a0dc7d5efacbe2b744211289c276e2b9168bd4ae
|
||||
Subproject commit 74d91febb0995b7c6706dfd4eed2d39fb1694421
|
|
@ -1 +1 @@
|
|||
Subproject commit 252029ddac664370bdda3f0761675785d92a1573
|
||||
Subproject commit efec03532ef65984786e5e32dbc81f6e6a55a115
|
|
@ -1 +1 @@
|
|||
Subproject commit 42629f744269e004907a6fb4f16c6c7f69acc586
|
||||
Subproject commit 1a8060257a96401a9555a476bd13c3a87502c9b5
|
|
@ -1 +1 @@
|
|||
Subproject commit 97069edd163b66ce11e8152bee3055b2fa627e15
|
||||
Subproject commit 920c5502cc3ddda88f6c7d85ee834ac611bb11cc
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 21fea01161e0d6b70c0c5c1f52dc8e7a7df14a50
|
|
@ -17,7 +17,6 @@ target_compile_options(${PROJECT_NAME}
|
|||
-fno-rtti
|
||||
-fno-exceptions
|
||||
-fno-threadsafe-statics
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
||||
)
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 788b469ad5e5f78611f665b6eb17afd0eb040f21
|
||||
Subproject commit bc90b29b37fe3809f9e48aa7be08fbf2208e481a
|
|
@ -32,13 +32,10 @@ add_library(icuuc
|
|||
icu/icu4c/source/common/locbased.h
|
||||
icu/icu4c/source/common/locid.cpp
|
||||
icu/icu4c/source/common/loclikely.cpp
|
||||
icu/icu4c/source/common/loclikelysubtags.cpp
|
||||
icu/icu4c/source/common/loclikelysubtags.h
|
||||
icu/icu4c/source/common/locmap.cpp
|
||||
icu/icu4c/source/common/locutil.cpp
|
||||
icu/icu4c/source/common/locutil.h
|
||||
icu/icu4c/source/common/lsr.h
|
||||
icu/icu4c/source/common/lsr.cpp
|
||||
icu/icu4c/source/common/messageimpl.h
|
||||
icu/icu4c/source/common/msvcres.h
|
||||
icu/icu4c/source/common/mutex.h
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 7750081bda4b3bc1768ae03849ec70f67ea10625
|
||||
Subproject commit 6af11aa609f3fdf735cab5fdc051cd840960186b
|
|
@ -1,16 +0,0 @@
|
|||
project(imgui)
|
||||
|
||||
set(SRC
|
||||
imgui/imgui_draw.cpp
|
||||
imgui/imgui_tables.cpp
|
||||
imgui/imgui_widgets.cpp
|
||||
imgui/imgui.cpp
|
||||
imgui/backends/imgui_impl_glfw.cpp
|
||||
)
|
||||
|
||||
add_library(${PROJECT_NAME} ${SRC})
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PRIVATE ${OMIM_ROOT}/3party/glfw/include
|
||||
PUBLIC ${OMIM_ROOT}/3party/imgui/imgui
|
||||
PUBLIC .
|
||||
)
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 6982ce43f5b143c5dce5fab0ce07dd4867b705ae
|
|
@ -1 +1 @@
|
|||
Subproject commit caade5a28aad86b92a4b5337a9dc70c4ba73c5eb
|
||||
Subproject commit a0e064336317c9347a91224112af9933598714e9
|
|
@ -17,9 +17,6 @@ endif()
|
|||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC .)
|
||||
|
||||
if (PLATFORM_LINUX)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE VK_USE_PLATFORM_XLIB_KHR)
|
||||
endif()
|
||||
|
||||
# dlopen
|
||||
target_link_libraries(${PROJECT_NAME} $<$<BOOL:CMAKE_DL_LIBS>:${CMAKE_DL_LIBS}>)
|
||||
|
|
|
@ -22,20 +22,7 @@ extern "C" {
|
|||
#include <dlfcn.h>
|
||||
|
||||
int InitVulkan(void) {
|
||||
#if defined(__APPLE__)
|
||||
void* libvulkan = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||
if (!libvulkan) {
|
||||
libvulkan = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||
}
|
||||
if (!libvulkan) {
|
||||
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||
}
|
||||
#else
|
||||
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
||||
if (!libvulkan) {
|
||||
libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
|
||||
}
|
||||
#endif
|
||||
void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
|
||||
if (!libvulkan) return 0;
|
||||
|
||||
// Vulkan supported, set function addresses
|
||||
|
@ -558,10 +545,6 @@ int InitVulkan(void) {
|
|||
vkDestroyDebugReportCallbackEXT = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(dlsym(libvulkan, "vkDestroyDebugReportCallbackEXT"));
|
||||
vkDebugReportMessageEXT = reinterpret_cast<PFN_vkDebugReportMessageEXT>(dlsym(libvulkan, "vkDebugReportMessageEXT"));
|
||||
|
||||
#if defined(__APPLE__)
|
||||
vkCreateMacOSSurfaceMVK = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(dlsym(libvulkan, "vkCreateMacOSSurfaceMVK"));
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1154,10 +1137,6 @@ PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR;
|
|||
PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR;
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -25,10 +25,6 @@ extern "C" {
|
|||
#define VK_USE_PLATFORM_ANDROID_KHR 1
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#include <vulkan/vulkan_macos.h>
|
||||
#endif
|
||||
|
||||
/* Initialize the Vulkan function pointer variables declared in this header.
|
||||
* Returns 0 if vulkan is not available, non-zero if it is available.
|
||||
*/
|
||||
|
@ -504,10 +500,6 @@ extern PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
|
|||
extern PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
|
||||
extern PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
extern PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
cmake_minimum_required(VERSION 3.22.1)
|
||||
cmake_minimum_required(VERSION 3.18)
|
||||
project(omim C CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_C_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
# Our code does not rely on gnu extensions.
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
|
@ -26,7 +26,7 @@ if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
|
|||
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
||||
enable_language(OBJCXX)
|
||||
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
||||
set(CMAKE_OBJCXX_STANDARD 20)
|
||||
set(CMAKE_OBJCXX_STANDARD 17)
|
||||
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
||||
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
||||
endif()
|
||||
|
@ -90,19 +90,6 @@ else()
|
|||
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
|
||||
endif()
|
||||
|
||||
if(${PLATFORM_MAC})
|
||||
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
|
||||
|
||||
# Metal language support
|
||||
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
|
||||
include(CheckLanguage)
|
||||
include(MetalShaderSupport)
|
||||
check_language(Metal)
|
||||
if(CMAKE_Metal_COMPILER)
|
||||
enable_language(Metal)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Sanitizer
|
||||
if (PLATFORM_DESKTOP)
|
||||
# https://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
|
||||
|
@ -162,12 +149,6 @@ if (BUILD_DESIGNER)
|
|||
add_definitions(-DBUILD_DESIGNER)
|
||||
endif()
|
||||
|
||||
option(BUILD_STANDALONE "Build standalone application" OFF)
|
||||
if (BUILD_STANDALONE)
|
||||
message(STATUS "Standalone building is enabled")
|
||||
add_definitions(-DBUILD_STANDALONE)
|
||||
endif()
|
||||
|
||||
option(USE_ASAN "Enable Address Sanitizer" OFF)
|
||||
option(USE_TSAN "Enable Thread Sanitizer" OFF)
|
||||
option(USE_LIBFUZZER "Enable LibFuzzer" OFF)
|
||||
|
@ -176,7 +157,6 @@ option(SKIP_QT_GUI "Skip building of Qt GUI" OFF)
|
|||
option(USE_PCH "Use precompiled headers" OFF)
|
||||
option(NJOBS "Number of parallel processes" OFF)
|
||||
option(ENABLE_VULKAN_DIAGNOSTICS "Enable Vulkan diagnostics" OFF)
|
||||
option(ENABLE_TRACE "Enable Tracing" OFF)
|
||||
|
||||
if (NJOBS)
|
||||
message(STATUS "Number of parallel processes: ${NJOBS}")
|
||||
|
@ -186,9 +166,9 @@ if (NJOBS)
|
|||
set(CMAKE_JOB_POOL_PRECOMPILE_HEADER custom)
|
||||
endif()
|
||||
|
||||
# GCC 10.0 is required to support <charconv> header inclusion in base/string_utils.hpp
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
|
||||
message(FATAL_ERROR "Minimum supported g++ version is 10.0, yours is ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
# GCC 8.1 is required to support <charconv> header inclusion in base/string_utils.hpp, otherwise 7.0 is sufficient
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.1)
|
||||
message(FATAL_ERROR "Minimum supported g++ version is 8.1 yours is ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
|
@ -233,11 +213,6 @@ if (ENABLE_VULKAN_DIAGNOSTICS)
|
|||
add_definitions(-DENABLE_VULKAN_DIAGNOSTICS)
|
||||
endif()
|
||||
|
||||
if (ENABLE_TRACE)
|
||||
message(STATUS "Tracing is enabled")
|
||||
add_definitions(-DENABLE_TRACE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# Set environment variables
|
||||
|
@ -278,6 +253,16 @@ find_package(Threads REQUIRED)
|
|||
|
||||
# Scripts
|
||||
|
||||
if (NOT CMAKE_HOST_WIN32)
|
||||
execute_process(
|
||||
COMMAND "${OMIM_ROOT}/tools/unix/check_cert.sh"
|
||||
RESULT_VARIABLE CheckCertResult
|
||||
)
|
||||
if (CheckCertResult)
|
||||
message(FATAL_ERROR "Certificate check failed")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
|
||||
list(APPEND qt_components Core Network)
|
||||
if (NOT SKIP_QT_GUI OR NOT SKIP_TESTS OR PYBINDINGS)
|
||||
|
@ -288,13 +273,6 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
|
|||
endif()
|
||||
# PATHS are hard-coded hints where to look for qt6 in addition to other places.
|
||||
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
|
||||
|
||||
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
|
||||
if (Qt6Widgets_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
|
||||
message(FATAL_ERROR "Unsupported Qt version: ${Qt6Widgets_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
|
||||
else()
|
||||
message(STATUS "Found Qt version: ${Qt6Widgets_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# To allow #include "base/file_name.hpp" in all sources.
|
||||
|
@ -397,7 +375,6 @@ if (PLATFORM_DESKTOP)
|
|||
add_subdirectory(qt)
|
||||
omim_add_tool_subdirectory(skin_generator)
|
||||
endif()
|
||||
add_subdirectory(dev_sandbox)
|
||||
endif()
|
||||
|
||||
omim_add_test_subdirectory(qt_tstfrm)
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
|
150
CONTRIBUTORS
|
@ -1,150 +0,0 @@
|
|||
This file contains a list of people who have contributed to this project.
|
||||
Its not neccesarily comprehensive.
|
||||
Feel free to add yourself here along with your first contribution!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Organic Maps (formerly OMaps) contributors:
|
||||
(in alphabetic order)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Alexander Borsuk <me@alex.bio>
|
||||
Alexey Krasilnikov
|
||||
Andrew Shkrob
|
||||
Anton Makouski
|
||||
Arnaud Vergnet
|
||||
Arthur-GYT
|
||||
Atemu
|
||||
Caspar Nuël <casparnuel@yandex.com>
|
||||
cyber-toad
|
||||
David Martinez
|
||||
dbf
|
||||
Dzmitry Strekha
|
||||
Dzmitry Yarmolenka
|
||||
Fabian Wüthrich
|
||||
Ferenc Géczi
|
||||
Filip Czaplicki
|
||||
FinixFighter
|
||||
fparri
|
||||
Francesco Gazzetta
|
||||
gallegonovato
|
||||
Gonzalo Pesquero
|
||||
Harry Bond <me@hbond.xyz>
|
||||
Jaime Marquinez Ferrandiz
|
||||
Jean-Baptiste Charron
|
||||
Jenny Em
|
||||
Joan Montané
|
||||
Karina Kordon
|
||||
Kavi Khalique
|
||||
Kiryl Kaveryn
|
||||
Kiryl Razhdzestvenski
|
||||
Konstantin Pastbin
|
||||
Loïc Hernaut
|
||||
Lukas Hamm
|
||||
Lukas Kronberger
|
||||
Luna Rose
|
||||
map-per
|
||||
Markku Huotari
|
||||
Mateusz Konieczny
|
||||
Matheus Gomes
|
||||
MbTy1
|
||||
Meenbeese
|
||||
Metehan Özyürek
|
||||
Michał Brzozowski
|
||||
Nishant Bhandari <nishantbhandari0019@gmail.com>
|
||||
Ognjen Blagojevic
|
||||
Osyotr
|
||||
renderexpert
|
||||
Roman Kuznetsov
|
||||
Roman Tsisyk <roman@tsisyk.com>
|
||||
Rudo Kemper
|
||||
Sebastiao Sousa <sebastiao.sousa@tecnico.ulisboa.pt>
|
||||
Sergiy Kozyr
|
||||
Tobias G. <tobi.goergens@gmail.com>
|
||||
Veniamin Gvozdikov <g.veniamin@googlemail.com>
|
||||
Viktor Govako <viktor.govako@gmail.com>
|
||||
Will Bradley
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
MAPS.ME at Mail.Ru Group (prior to the Organic Maps (OMaps) fork in 2020/2021):
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Code contributions:
|
||||
Dmitry Yunitski
|
||||
Lev Dragunov
|
||||
Sergey Yershov <syershov@gmail.com>
|
||||
Vladimir Byko-Ianko <bykoianko@gmail.com>
|
||||
Yuri Gorshenin
|
||||
Maxim Pimenov <m@maps.me>
|
||||
Roman Kuznetsov
|
||||
Konstantin Shalnev <k.shalnev@gmail.com>
|
||||
Ilja Zverev <zverik@textual.ru>
|
||||
Vlad Mihaylenko
|
||||
Ilya Grechuhin
|
||||
Alexander Marchuk
|
||||
Sergey Magidovich
|
||||
Yury Rakhuba
|
||||
Kirill Zhdanovich
|
||||
Dmitry Kunin
|
||||
Denis Koronchik
|
||||
Darafei Praliaskouski <me@komzpa.net>
|
||||
Igor Khmurets
|
||||
Timur Bernikowich
|
||||
Roman Sorokin
|
||||
Alexander Gusak
|
||||
Alexei Vitenko
|
||||
Artem Polkovnikov <artyom.polkovnikov@gmail.com>
|
||||
Alex Gontmakher <gsasha@gmail.com>
|
||||
Dima Korolev <dmitry.korolev@gmail.com>
|
||||
Max Grigorev <forwidur@gmail.com>
|
||||
|
||||
Porting to Tizen platform:
|
||||
Sergey Pisarchik
|
||||
|
||||
Testing and automation:
|
||||
Timofey Danshin
|
||||
|
||||
Design and styles:
|
||||
Igor Tomko <igor.n.tomko@gmail.com>
|
||||
Urbica http://urbica.co
|
||||
Vasiliy Cherkasov
|
||||
Maksim Okala-Kulak <kaenoru@gmail.com>
|
||||
|
||||
Strings and translations:
|
||||
Nataliya Yakavenka
|
||||
Daria Terentieva
|
||||
Satoshi Iida
|
||||
Mathias Wittwer
|
||||
R3gi <regiprogi@gmail.com>
|
||||
Hidde Wieringa
|
||||
Vasily Korotkevich
|
||||
Mark N. Kuramochi
|
||||
Lidia Vasiljeva
|
||||
|
||||
Project management:
|
||||
Alexander Matveenko
|
||||
|
||||
Marketing & support:
|
||||
Sergey Ermilov
|
||||
Anna Mozheiko
|
||||
Alexander Bobko
|
||||
Marat Mukhamedov
|
||||
Alena Miranovich
|
||||
Polina Kovalchuk
|
||||
Ekaterina Sazonova
|
||||
Alesya Serada
|
||||
|
||||
Special thanks to:
|
||||
Yauheniya Melnichek
|
||||
Yuri Gurski
|
||||
Dmitry Matveev
|
||||
Anna Yakovleva
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
MAPS.ME (originally MapsWithMe) design and implementation at MapsWithMe GmbH
|
||||
(from 2010 till the acquisition by Mail.ru Group in 2014):
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Yury Melnichek <yury@melnichek.com>
|
||||
Alexander Borsuk <me@alex.bio>
|
||||
Viktor Govako <viktor.govako@gmail.com>
|
||||
Siarhei Rachytski <siarhei.rachytski@gmail.com>
|
9
LEGAL
|
@ -1,9 +0,0 @@
|
|||
Certain project resources, including but not limited to domain names, trademarks, hosting accounts, payment accounts, and others, are overseen and managed by Organic Maps OÜ. The governance of these digital assets is subject to policies established by Organic Maps OÜ, in compliance with applicable statutory laws.
|
||||
|
||||
Organic Maps OÜ is a legal entity established on 2021-05-01 under the laws of the Republic of Estonia and the European Union, with registration number 16225385. The primary purpose of the entity is to shield the project's members from personal liability and to ensure the legal protection of the project's assets. Official up-to-date information about the entity can be found in the Estonian Business Register:
|
||||
|
||||
https://ariregister.rik.ee/eng/company/16225385/Organic-Maps-O%C3%9C
|
||||
|
||||
Organic Maps OÜ does not require contributors to transfer copyright ownership and does not retain any copyright over the code contributed to the repository. See the NOTICE file and docs/DCO.md for additional information.
|
||||
|
||||
For any legal inquiries, feel free to contact legal@organicmaps.app.
|
5
NOTICE
|
@ -1,5 +1,4 @@
|
|||
Copyright 2020 My.com B.V. (Mail.Ru Group)
|
||||
Copyright 2024 Organic Maps Contributors
|
||||
Copyright 2024 rebus.tj (Rebus Group) Not really Rebus will be updated
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -13,10 +12,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
The app is based on Organic maps.
|
||||
Most libraries in the following directories made by other people and
|
||||
organizations and licensed in different ways:
|
||||
* `3party`
|
||||
* `tools`
|
||||
Please refer to their LICENCE, COPYING or NOTICE files for terms of use.
|
||||
Some icons files may be copyrighted by (C) 2020 My.com B.V. (Mail.Ru Group)
|
||||
See also `data/copyright.html` file for a full list of copyright notices.
|
||||
|
|
202
README.md
|
@ -1,30 +1,45 @@
|
|||
<div align="center">
|
||||
<img src="qt/res/logo.png" height="100"/>
|
||||
</div>
|
||||
<h1 align="center"">Organic Maps</h1>
|
||||
# Tourism Map Tajikistan
|
||||
|
||||
[Organic Maps](https://organicmaps.app) is a free Android & iOS offline maps app for travellers, tourists, drivers, hikers, and cyclists.
|
||||
It uses crowd-sourced [OpenStreetMap](https://www.openstreetmap.org) data and is developed with love by the creators of **MapsWithMe** (later renamed to **Maps.Me**) and by our community.
|
||||
No ads, no tracking, no data collection, no crapware. Your [donations](https://organicmaps.app/donate/) and positive reviews motivate and inspire us, thanks ❤️!
|
||||
This app is for Tajikistan tourists. It's based on open source app Organic map.
|
||||
|
||||
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/organic-maps/id1567437057)
|
||||
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.organicmaps)
|
||||
[<img src="docs/badges/huawei-appgallery.png" alt="AppGallery" width="160">](https://appgallery.huawei.com/#/app/C104325611)
|
||||
[<img src="docs/badges/obtainium.png" alt="Obtainium" width="160">](https://github.com/organicmaps/organicmaps/wiki/Installing-Organic-Maps-from-GitHub-using-Obtainium)
|
||||
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.organicmaps/)
|
||||
## Please Read all of this before continuing
|
||||
|
||||
<p float="left">
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="400" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.jpg" width="400" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.jpg" width="400" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.jpg" width="400" />
|
||||
</p>
|
||||
Don't forget make changes to this file, when you make significant changes to navigation.
|
||||
version of Android Studio I used: android-studio-2024.1.1.13-mac_arm.dmg
|
||||
version of XCode I used: 16.1
|
||||
|
||||
## Features
|
||||
## Navigation on Android
|
||||
|
||||
The first activity app starts is SplashActivity.java. There it navigates to MainActivity
|
||||
where all of the data about Tajikistan places are located,
|
||||
it has its own navigation system on Jetpack compose.
|
||||
There we navigateToAuthIfNotAuthed() and then navigateToMapToDownloadIfNotPresent().
|
||||
In AuthActivity we move Tajikistan map to app's internal storage and if it is successful,
|
||||
it won't navigate to map to download.
|
||||
When map download is finished it will go to MainActivity.
|
||||
When you sign in or up, it will navigate to MainActivity.
|
||||
|
||||
## Navigation on iOS
|
||||
|
||||
The first screen to be shown is Map screen (see MapsAppDelegate.mm). I (Emin) couldn't change it.
|
||||
There's such logic in MapsAppDelegate.mm:
|
||||
|
||||
```
|
||||
if (Tajikistan is loaded) {
|
||||
if (token is nil) navigate to Auth (note: token is cleared when user signs out)
|
||||
else navigate to TourismMain (Home)
|
||||
}
|
||||
```
|
||||
|
||||
In Auth when user signs in or up, it navigates to TourismMain
|
||||
In TourismMain goes to auth if not authorized
|
||||
|
||||
## Features of their map
|
||||
|
||||
Organic Maps is the ultimate companion app for travellers, tourists, hikers, and cyclists:
|
||||
|
||||
- Detailed offline maps with places that don't exist on other maps, thanks to [OpenStreetMap](https://openstreetmap.org)
|
||||
- Detailed offline maps with places that don't exist on other maps, thanks
|
||||
to [OpenStreetMap](https://openstreetmap.org)
|
||||
- Cycling routes, hiking trails, and walking paths
|
||||
- Contour lines, elevation profiles, peaks, and slopes
|
||||
- Turn-by-turn walking, cycling, and car navigation with voice guidance
|
||||
|
@ -34,152 +49,9 @@ Organic Maps is the ultimate companion app for travellers, tourists, hikers, and
|
|||
- Countries and regions don't take a lot of space
|
||||
- Free and open-source
|
||||
|
||||
## Why Organic?
|
||||
|
||||
Organic Maps is pure and organic, made with love:
|
||||
|
||||
- Respects your privacy
|
||||
- Saves your battery
|
||||
- No unexpected mobile data charges
|
||||
|
||||
Organic Maps is free from trackers and other bad stuff:
|
||||
|
||||
- No ads
|
||||
- No tracking
|
||||
- No data collection
|
||||
- No phoning home
|
||||
- No annoying registration
|
||||
- No mandatory tutorials
|
||||
- No noisy email spam
|
||||
- No push notifications
|
||||
- No crapware
|
||||
- ~~No pesticides~~ Purely organic!
|
||||
|
||||
The Android application is verified by the <a href="https://reports.exodus-privacy.eu.org/en/reports/app.organicmaps/latest/">Exodus Privacy Project:
|
||||
|
||||
<img src="docs/privacy/exodus.png" width="400">
|
||||
</a>
|
||||
|
||||
The iOS application is verified by <a href="https://ios.trackercontrol.org/analysis/app.organicmaps">TrackerControl for iOS:
|
||||
|
||||
<img src="docs/privacy/trackercontrol-ios.png" width="400">
|
||||
</a>
|
||||
|
||||
<br/>
|
||||
|
||||
Organic Maps doesn't request excessive permissions to spy on you:
|
||||
|
||||
<p float="left">
|
||||
<img src="docs/privacy/om.jpg" width="400">
|
||||
<img src="docs/privacy/mm.jpg" width="400">
|
||||
</p>
|
||||
|
||||
At Organic Maps, we believe that privacy is a fundamental human right:
|
||||
|
||||
- Organic Maps is an indie community-driven open-source project
|
||||
- We protect your privacy from Big Tech's prying eyes
|
||||
- Stay safe no matter where you are
|
||||
|
||||
Reject surveillance - embrace your freedom.
|
||||
|
||||
[**Give Organic Maps a try!**](#install)
|
||||
|
||||
## Who is paying for the development?
|
||||
|
||||
The app is free for everyone, so we rely on donations. Please donate at [organicmaps.app/donate](https://organicmaps.app/donate) to support us!
|
||||
|
||||
Beloved institutional sponsors below have provided targeted grants to cover some infrastructure costs and fund development of new selected features:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="https://nlnet.nl/"><img src="docs/sponsors/nlnet.svg" alt="The NLnet Foundation" width="200px"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/organicmaps/organicmaps/milestone/7">The Search & Fonts improvement project</a> has been <a href="https://nlnet.nl/project/OrganicMaps/">funded</a> through NGI0 Entrust Fund. <a href="https://nlnet.nl/entrust/">NGI0 Entrust Fund</a> is established by the <a href="https://nlnet.nl/">NLnet Foundation</a> with financial support from the European Commission's <a href="https://www.ngi.eu/">Next Generation Internet programme</a>, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101069594.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="https://summerofcode.withgoogle.com/"><img src="docs/sponsors/gsoc.svg" alt="Google Summer of Code" width="200px"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://summerofcode.withgoogle.com/">Google</a> backed 5 student's projects in the Google Summer of Code program during <a href="https://summerofcode.withgoogle.com/programs/2022/organizations/organic-maps">2022</a> and <a href="https://summerofcode.withgoogle.com/programs/2023/organizations/organic-maps">2023</a> programs. Noteworthy projects included Android Auto and Wikipedia Dump Extractor.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="https://www.mythic-beasts.com/"><img src="docs/sponsors/mythic-beasts.png" alt="Mythic Beasts" width="200px"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://www.mythic-beasts.com/">Mythic Beasts</a> ISP <a href="https://www.mythic-beasts.com/blog/2021/10/06/improving-the-world-bit-by-expensive-bit/">provides us</a> two virtual servers with 400 TB/month of free bandwidth to host and serve maps downloads and updates.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="https://44plus.vn"><img src="docs/sponsors/44plus.svg" alt="44+ Technologies" width="200px"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://44plus.vn">44+ Technologies</a> is <a href="https://44plus.vn/organicmaps">providing us </a>with a free dedicated server worth around $12,000/year to serve maps across Vietnam & Southeast Asia.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="https://futo.org"><img src="docs/sponsors/futo.svg" alt="FUTO" width="200px"></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://futo.org">FUTO</a> has <a href="https://www.youtube.com/watch?v=fJJclgBHrEw">awarded $1000 micro-grant</a> to Organic Maps in February 2023.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
The majority of all expenses have been funded by founders of the project since its inception. The project is far from achieving any sort of financial sustainability. The current level of voluntary donations falls significantly short of covering efforts needed to sustain the app. Any new developments of features are beyond the scope of possibility due to the absence of the necessary financial resources.
|
||||
|
||||
Please consider [donating](https://organicmaps.app/donate) if you want to see this open-source project thriving, not dying. There are [other ways how to support the project](#contributing). No coding skills required.
|
||||
|
||||
## Copyrights
|
||||
|
||||
Licensed under the Apache License, Version 2.0. See
|
||||
[LICENSE](https://github.com/organicmaps/organicmaps/blob/master/LICENSE),
|
||||
[NOTICE](https://github.com/organicmaps/organicmaps/blob/master/NOTICE)
|
||||
and [data/copyright.html](http://htmlpreview.github.io/?https://github.com/organicmaps/organicmaps/blob/master/data/copyright.html)
|
||||
[LICENSE](https://github.com/Ohpleaseman/tourism/blob/master/LICENSE),
|
||||
[NOTICE](https://github.com/Ohpleaseman/tourism/blob/master/NOTICE)
|
||||
for more information.
|
||||
|
||||
## Governance
|
||||
|
||||
See [docs/GOVERNANCE.md](docs/GOVERNANCE.md).
|
||||
|
||||
<a name="contributing">
|
||||
|
||||
## Contributing
|
||||
|
||||
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
|
||||
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can [help in many ways](https://organicmaps.app/support-us/), the ability to code is not necessary.
|
||||
|
||||
## Beta
|
||||
|
||||
Please join our beta program, suggest your features, and report bugs:
|
||||
|
||||
- [iOS Beta (TestFlight)](https://testflight.apple.com/join/lrKCl08I)
|
||||
- [Android Beta (Firebase)](https://appdistribution.firebase.dev/i/2f0fee463107b137)
|
||||
|
||||
## Feedback
|
||||
|
||||
- **Rate us on the [App Store](https://apps.apple.com/app/organic-maps/id1567437057)
|
||||
and [Google Play](https://play.google.com/store/apps/details?id=app.organicmaps)**.
|
||||
- **Star us on Forgejo**.
|
||||
- Report bugs or issues to [the issue tracker](https://git.omaps.dev/organicmaps/organicmaps/issues).
|
||||
- Subscribe to our [Telegram Channel](https://t.me/OrganicMapsApp) or to the [[matrix] space](https://matrix.to/#/#organicmaps:matrix.org) for updates.
|
||||
- Join our [Telegram Group](https://t.me/OrganicMaps) to discuss with other users.
|
||||
- Присоединяйтесь к нашей [русскоязычной группе в Telegram](https://t.me/OrganicMapsRu) для обратной связи и помощи.
|
||||
- Diğer kullanıcılarla tartışmak için [Telegram Grubumuza](https://t.me/OrganicMapsTR) katılın.
|
||||
- Rejoignez notre groupe [Telegram](https://t.me/OrganicMapsFR) pour obtenir de l'aide.
|
||||
- Contact us by [email](mailto:hello@organicmaps.app).
|
||||
- Follow our updates in
|
||||
[Mastodon](https://fosstodon.org/@organicmaps),
|
||||
[Facebook](https://facebook.com/OrganicMaps),
|
||||
[X (Twitter)](https://x.com/OrganicMapsApp),
|
||||
[Instagram](https://instagram.com/organicmaps.app/).
|
||||
- Güncellemelerimizi [Instagram](https://instagram.com/organicmapstr/) üzerinden takip edin.
|
||||
|
||||
The Organic Maps community abides by the CNCF [code of conduct](https://github.com/organicmaps/organicmaps/blob/master/docs/CODE_OF_CONDUCT.md).
|
||||
|
|
2
android/.gitignore
vendored
|
@ -22,5 +22,3 @@ local.properties
|
|||
lint.xml
|
||||
.gradletasknamecache
|
||||
|
||||
# Generated by Eclipse and JDTLS
|
||||
.settings/
|
||||
|
|
3
android/app/.gitignore
vendored
|
@ -31,3 +31,6 @@
|
|||
|
||||
# ignore autogenerated metadata (see prepareGoogleReleaseListing in build.gradle)
|
||||
/src/google/play/listings
|
||||
|
||||
# ignore google releases
|
||||
/google/release
|
||||
|
|
|
@ -12,28 +12,36 @@ buildscript {
|
|||
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||
def isFdroid = taskName.contains('fdroid')
|
||||
def isBeta = taskName.contains('beta')
|
||||
def isRelease = taskName.contains('release')
|
||||
|
||||
// Firebase Crashlytics compile-time feature flag: -Pfirebase=true|false
|
||||
def googleFirebaseServicesFlag = findProperty('firebase')
|
||||
// Enable Firebase for all beta flavors except fdroid only if google-services.json exists.
|
||||
def googleFirebaseServicesDefault = isBeta && !isFdroid && file("$projectDir/google-services.json").exists()
|
||||
ext.googleFirebaseServicesEnabled = googleFirebaseServicesFlag != null ?
|
||||
googleFirebaseServicesFlag == '' || googleFirebaseServicesFlag.toBoolean() :
|
||||
googleFirebaseServicesDefault
|
||||
|
||||
/*
|
||||
We want to use Firebase Crashlytics for Tourism. We can't use it for debug,
|
||||
because debug version has its own package_name, release doesn't, so I (Emin) changed
|
||||
the condition for ext.googleFirebaseServicesEnabled
|
||||
*/
|
||||
// ext.googleFirebaseServicesEnabled = googleFirebaseServicesFlag != null ?
|
||||
// googleFirebaseServicesFlag == '' || googleFirebaseServicesFlag.toBoolean() :
|
||||
// googleFirebaseServicesDefault
|
||||
ext.googleFirebaseServicesEnabled = isRelease
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:8.7.3'
|
||||
classpath 'com.android.tools.build:gradle:8.4.1'
|
||||
|
||||
if (googleFirebaseServicesEnabled) {
|
||||
println('Building with Google Firebase Services')
|
||||
classpath 'com.google.gms:google-services:4.4.2'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2'
|
||||
classpath 'com.google.firebase:firebase-appdistribution-gradle:5.0.0'
|
||||
classpath 'com.google.gms:google-services:4.4.1'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
|
||||
classpath 'com.google.firebase:firebase-appdistribution-gradle:4.2.0'
|
||||
} else {
|
||||
println('Building without Google Firebase Services')
|
||||
}
|
||||
|
||||
classpath('com.github.triplet.gradle:play-publisher:3.10.1')
|
||||
classpath('com.github.triplet.gradle:play-publisher:3.9.1')
|
||||
classpath('ru.cian:huawei-publish-gradle-plugin:1.4.2')
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +53,7 @@ repositories {
|
|||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply from: 'secure.properties'
|
||||
if (googleFirebaseServicesEnabled) {
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
apply plugin: 'com.google.firebase.crashlytics'
|
||||
|
@ -52,6 +61,11 @@ if (googleFirebaseServicesEnabled) {
|
|||
}
|
||||
apply plugin: 'com.github.triplet.play'
|
||||
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
||||
apply plugin: 'org.jetbrains.kotlin.android'
|
||||
apply plugin: 'kotlin-parcelize'
|
||||
apply plugin: 'org.jetbrains.kotlin.plugin.serialization'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'com.google.dagger.hilt.android'
|
||||
|
||||
def run(cmd) {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
|
@ -80,15 +94,14 @@ def getCommitMessage() {
|
|||
|
||||
def osName = System.properties['os.name'].toLowerCase()
|
||||
|
||||
project.ext.appId = 'app.organicmaps'
|
||||
project.ext.appName = 'Organic Maps'
|
||||
project.ext.appId = 'tj.tourism.rebus'
|
||||
project.ext.appName = 'Tourism Map Tajikistan'
|
||||
|
||||
// I have Java 21 installed, but this doesn't work on MacOS.
|
||||
//java {
|
||||
// toolchain {
|
||||
// languageVersion.set(JavaLanguageVersion.of(17))
|
||||
// }
|
||||
//}
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(JavaLanguageVersion.of(17))
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'app.organicmaps'
|
||||
|
@ -96,19 +109,20 @@ android {
|
|||
buildFeatures {
|
||||
dataBinding = true
|
||||
buildConfig = true
|
||||
compose true
|
||||
}
|
||||
// All properties are read from gradle.properties file
|
||||
compileSdk propCompileSdkVersion.toInteger()
|
||||
|
||||
ndkVersion '27.2.12479018'
|
||||
ndkVersion '26.3.11579264'
|
||||
|
||||
defaultConfig {
|
||||
// Default package name is taken from the manifest and should be app.organicmaps
|
||||
def ver = getVersion()
|
||||
versionCode = ver.V1
|
||||
versionName = ver.V2
|
||||
println('Version: ' + versionName)
|
||||
println('VersionCode: ' + versionCode)
|
||||
versionCode = 4
|
||||
versionName = "1.0.1"
|
||||
// println('Version: ' + versionName)
|
||||
// println('VersionCode: ' + versionCode)
|
||||
minSdk propMinSdkVersion.toInteger()
|
||||
targetSdk propTargetSdkVersion.toInteger()
|
||||
applicationId project.ext.appId
|
||||
|
@ -129,11 +143,6 @@ android {
|
|||
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.
|
||||
|
@ -141,8 +150,7 @@ android {
|
|||
'-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"
|
||||
"-DNJOBS=$njobs", "-DENABLE_VULKAN_DIAGNOSTICS=$enableVulkanDiagnostics"
|
||||
targets 'organicmaps'
|
||||
}
|
||||
}
|
||||
|
@ -172,6 +180,9 @@ android {
|
|||
}
|
||||
|
||||
setProperty('archivesBaseName', appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode)
|
||||
vectorDrawables {
|
||||
useSupportLibrary true
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions += 'default'
|
||||
|
@ -246,11 +257,6 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
def securityPropertiesFileExists = file('secure.properties').exists()
|
||||
if (securityPropertiesFileExists) {
|
||||
apply from: 'secure.properties'
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
debug {
|
||||
storeFile file('debug.keystore')
|
||||
|
@ -260,15 +266,10 @@ android {
|
|||
}
|
||||
|
||||
release {
|
||||
if (securityPropertiesFileExists) {
|
||||
println('The release signing keys are available')
|
||||
storeFile file(spropStoreFile)
|
||||
storePassword spropStorePassword
|
||||
keyAlias spropKeyAlias
|
||||
keyPassword spropKeyPassword
|
||||
} else {
|
||||
println('The release signing keys are unavailable')
|
||||
}
|
||||
storeFile file(spropStoreFile)
|
||||
storePassword spropStorePassword
|
||||
keyAlias spropKeyAlias
|
||||
keyPassword spropKeyPassword
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,10 +361,80 @@ android {
|
|||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = '17'
|
||||
}
|
||||
composeOptions {
|
||||
kotlinCompilerExtensionVersion '1.5.14'
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.7'
|
||||
implementation 'androidx.activity:activity-compose:1.9.3'
|
||||
implementation platform('androidx.compose:compose-bom:2024.12.01')
|
||||
implementation 'androidx.compose.ui:ui'
|
||||
implementation 'androidx.compose.ui:ui-graphics'
|
||||
implementation 'androidx.compose.ui:ui-tooling-preview'
|
||||
implementation 'androidx.compose.material3:material3'
|
||||
androidTestImplementation platform('androidx.compose:compose-bom:2024.12.01')
|
||||
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
|
||||
|
||||
debugImplementation 'androidx.compose.ui:ui-tooling'
|
||||
debugImplementation 'androidx.compose.ui:ui-test-manifest'
|
||||
|
||||
// hilt
|
||||
def hilt = '2.51.1'
|
||||
implementation "com.google.dagger:hilt-android:$hilt"
|
||||
kapt "com.google.dagger:hilt-compiler:$hilt"
|
||||
kapt "androidx.hilt:hilt-compiler:1.2.0"
|
||||
implementation 'androidx.hilt:hilt-navigation-compose:1.2.0'
|
||||
|
||||
// navigation
|
||||
implementation 'androidx.navigation:navigation-compose:2.8.5'
|
||||
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
|
||||
// countries
|
||||
implementation 'com.hbb20:ccp:2.7.3'
|
||||
// webview
|
||||
implementation "androidx.webkit:webkit:1.11.0"
|
||||
// compress
|
||||
implementation 'id.zelory:compressor:3.0.1'
|
||||
// restart app
|
||||
implementation 'com.jakewharton:process-phoenix:3.0.0'
|
||||
|
||||
//Background processing
|
||||
def coroutines = '1.8.1'
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
|
||||
// Coroutine Lifecycle Scopes
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7'
|
||||
|
||||
// region Network
|
||||
// Retrofit
|
||||
def retrofit = '2.11.0'
|
||||
implementation "com.squareup.retrofit2:retrofit:$retrofit"
|
||||
implementation "com.squareup.retrofit2:converter-gson:$retrofit"
|
||||
def okhttp = '5.0.0-alpha.14'
|
||||
implementation "com.squareup.okhttp3:okhttp:$okhttp"
|
||||
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp"
|
||||
implementation 'com.google.code.gson:gson:2.11.0'
|
||||
def coil_version = '2.7.0'
|
||||
implementation("io.coil-kt:coil-compose:$coil_version")
|
||||
implementation("io.coil-kt:coil-svg:$coil_version")
|
||||
// endregion
|
||||
|
||||
// Room
|
||||
def room = '2.6.1'
|
||||
implementation "androidx.room:room-ktx:$room"
|
||||
implementation "androidx.room:room-runtime:$room"
|
||||
kapt "androidx.room:room-compiler:$room"
|
||||
|
||||
// Google Play Location Services
|
||||
//
|
||||
|
@ -374,17 +445,14 @@ dependencies {
|
|||
// ls -la src/$flavor/java/app/organicmaps/location/GoogleFusedLocationProvider.java
|
||||
// ```
|
||||
//
|
||||
webImplementation 'com.google.android.gms:play-services-location:21.3.0'
|
||||
googleImplementation 'com.google.android.gms:play-services-location:21.3.0'
|
||||
huaweiImplementation 'com.google.android.gms:play-services-location:21.3.0'
|
||||
// This is the microG project's re-implementation which is permissible on
|
||||
// F-droid because it's Apache-2.0.
|
||||
fdroidImplementation 'org.microg.gms:play-services-location:0.3.6.244735'
|
||||
webImplementation 'com.google.android.gms:play-services-location:21.2.0'
|
||||
googleImplementation 'com.google.android.gms:play-services-location:21.2.0'
|
||||
huaweiImplementation 'com.google.android.gms:play-services-location:21.2.0'
|
||||
|
||||
// Google Firebase Services
|
||||
if (googleFirebaseServicesEnabled) {
|
||||
// Import the BoM for the Firebase platform
|
||||
implementation platform('com.google.firebase:firebase-bom:33.5.1')
|
||||
implementation platform('com.google.firebase:firebase-bom:32.8.0')
|
||||
// Add the dependencies for the Crashlytics and Analytics libraries
|
||||
// When using the BoM, you don't specify versions in Firebase library dependencies
|
||||
implementation 'com.google.firebase:firebase-crashlytics'
|
||||
|
@ -395,32 +463,36 @@ dependencies {
|
|||
// > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
|
||||
// We don't use Kotlin, but some dependencies are actively using it.
|
||||
// See https://stackoverflow.com/a/75719642
|
||||
implementation 'androidx.core:core:1.15.0'
|
||||
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.1.10'))
|
||||
implementation 'androidx.annotation:annotation:1.9.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'androidx.car.app:app:1.7.0-rc01'
|
||||
implementation 'androidx.car.app:app-projected:1.7.0-rc01'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
||||
implementation 'androidx.fragment:fragment:1.8.5'
|
||||
implementation 'androidx.core:core:1.13.1'
|
||||
implementation(platform('org.jetbrains.kotlin:kotlin-bom:1.9.23'))
|
||||
implementation 'androidx.annotation:annotation:1.8.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'androidx.car.app:app:1.7.0-alpha02'
|
||||
implementation 'androidx.car.app:app-projected:1.7.0-alpha02'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.fragment:fragment:1.7.1'
|
||||
implementation 'androidx.preference:preference:1.2.1'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.3.2'
|
||||
implementation 'androidx.work:work-runtime:2.10.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-process:2.8.7'
|
||||
implementation 'androidx.work:work-runtime:2.9.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-process:2.8.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||
implementation 'com.google.guava:guava:33.3.0-android'
|
||||
implementation 'com.google.guava:guava:33.1.0-android'
|
||||
implementation 'com.github.devnullorthrow:MPAndroidChart:3.2.0-alpha'
|
||||
implementation 'net.jcip:jcip-annotations:1.0'
|
||||
|
||||
// Test Dependencies
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.mockito:mockito-core:5.15.2'
|
||||
testImplementation 'org.mockito:mockito-core:5.11.0'
|
||||
testImplementation 'org.mockito:mockito-inline:5.2.0'
|
||||
}
|
||||
|
||||
kapt {
|
||||
correctErrorTypes true
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
||||
}
|
||||
|
@ -462,7 +534,7 @@ task prepareGoogleReleaseListing {
|
|||
|
||||
play {
|
||||
enabled.set(false)
|
||||
track.set('production')
|
||||
track.set('alpha')
|
||||
defaultToAppBundles.set(true)
|
||||
releaseStatus.set(ReleaseStatus.IN_PROGRESS)
|
||||
serviceAccountCredentials.set(file('google-play.json'))
|
||||
|
|
22
android/app/proguard-rules.pro
vendored
|
@ -28,3 +28,25 @@
|
|||
# R8 crypts the source line numbers in all log messages.
|
||||
# https://github.com/organicmaps/organicmaps/issues/6559#issuecomment-1812039926
|
||||
-dontoptimize
|
||||
|
||||
# For some unknown reason we couldn't find out, requests are not working properly
|
||||
# when the app is shrinked and/or minified, so we keep all of these things out from R8 effects.
|
||||
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
|
||||
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
|
||||
-keep,allowobfuscation,allowshrinking class retrofit2.Response
|
||||
|
||||
-if interface * { @retrofit2.http.* public *** *(...); }
|
||||
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
|
||||
|
||||
-keep class app.tourism.data.remote.** { *; }
|
||||
|
||||
-keep public class app.tourism.data.dto.** {
|
||||
public void set*(***);
|
||||
public *** get*();
|
||||
public protected private *;
|
||||
}
|
||||
-keep public class app.tourism.domain.models.** {
|
||||
public void set*(***);
|
||||
public *** get*();
|
||||
public protected private *;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package app.organicmaps;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest
|
||||
{
|
||||
@Test
|
||||
public void useAppContext()
|
||||
{
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("app.organicmaps", appContext.getPackageName());
|
||||
}
|
||||
}
|
BIN
android/app/src/debug/ic_launcher-playstore.png
Normal file
After Width: | Height: | Size: 59 KiB |
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
Before Width: | Height: | Size: 8.4 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 3.1 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.9 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 976 B |
Before Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 1.8 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 13 KiB |
BIN
android/app/src/debug/res/mipmap-xhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 4.5 KiB |
BIN
android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 24 KiB |
BIN
android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 8 KiB |
BIN
android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 8 KiB |
Before Width: | Height: | Size: 37 KiB |
BIN
android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 12 KiB |
BIN
android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#000000</color>
|
||||
</resources>
|
|
@ -1 +0,0 @@
|
|||
../../../../google/java/app/organicmaps/location
|
|
@ -0,0 +1,18 @@
|
|||
package app.organicmaps.location;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class LocationProviderFactory
|
||||
{
|
||||
public static boolean isGoogleLocationAvailable(@NonNull @SuppressWarnings("unused") Context context)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public static BaseLocationProvider getProvider(@NonNull Context context, @NonNull BaseLocationProvider.Listener listener)
|
||||
{
|
||||
return new AndroidNativeProvider(context, listener);
|
||||
}
|
||||
}
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• Новыя дадзеныя OpenStreetMap ад 27 лютага
|
||||
• Магчымасць уручную расстаўляць прамежкавыя кропкі маршруту
|
||||
• Экспарт аднаго абранага трэка са спісу
|
||||
• Палепшаная маршрутызацыя для веласіпедыстаў
|
||||
• Дададзена сістэмнае апавяшчэнне пры загрузцы карт, фонавыя загрузкі больш не перарываюцца
|
||||
• Дададзены мігатлівы віджэт запісу трэка
|
||||
• Сартаванне закладак і сцежак па імені
|
||||
• Дадзеныя OpenStreetMap па стане на 29 красавіка
|
||||
• Трэба ізноў залагініцца ў OSM
|
||||
• Складаныя паходныя сцежкі зараз карычневыя, а экспертныя шляхі чорныя
|
||||
• Веласіпедныя дарожкі цяпер цёмна-сінія, пункцірам там, дзе яны ідуць па пешаходных сцежках
|
||||
• Цяпер бачна дарогі пад напаўпразрыстымі мастамі
|
||||
• Выпраўлены імпарт GPX з прыкладання Google Files
|
||||
|
||||
…і шматлікае іншае на omaps.org/news
|
||||
… больш падрабязна на omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• Neue OpenStreetMap-Daten vom 27. Februar
|
||||
• Möglichkeit, Zwischenroutenpunkte manuell zu arrangieren
|
||||
• Einen einzelnen ausgewählten Track aus der Liste teilen
|
||||
• Verbesserte Routenführung für Fahrräder
|
||||
• Beim Herunterladen von Karten eine Systembenachrichtigung anzeigen und Hintergrunddownloads nicht unterbrechen
|
||||
• Ein blinkendes Trackaufzeichnungs-Widget hinzugefügt
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…weitere Details unter omaps.org/news
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 970 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.4 MiB |
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a Track Recording indicator on the main screen
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
• New OpenStreetMap data as of February 27
|
||||
• Ability to manually arrange intermediate route points
|
||||
• Share a single selected track from the list
|
||||
• Improved routing for bicycles
|
||||
• Display a system notification when downloading maps and don't interrupt background downloads
|
||||
• Added a flashing Track Recording widget
|
||||
• Sort bookmarks and tracks by name
|
||||
• Transitioned to the new OpenStreetMap authentication mechanism — all authenticated OSM users must re-login
|
||||
• OpenStreetMap data as of April 29
|
||||
• Difficult hiking trails are now brown-dotted, expert ones are black
|
||||
• Dark blue lines for dedicated cycleways, mixed with white/brown dashes for shared foot/cycle paths
|
||||
• Roads are now visible under semi-transparent bridges
|
||||
• Fixed GPX import from Google Files app
|
||||
|
||||
…more details at omaps.org/news
|
||||
|
|