mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-23 03:23:48 +00:00
Compare commits
2 Commits
x7z4w-patc
...
generate-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd102d1e74 | ||
|
|
17a6c34e7f |
@@ -1,55 +1,69 @@
|
||||
# All non-assigned.
|
||||
* @organicmaps/mergers
|
||||
# Visual design.
|
||||
/android/app/src/main/res/drawable*/ @comaps/design
|
||||
/android/app/src/main/res/font/ @comaps/design
|
||||
/android/app/src/main/res/mipmap*/ @comaps/design
|
||||
/data/*.ttf @comaps/design
|
||||
/data/resources-svg/ @comaps/design
|
||||
/data/search-icons/ @comaps/design
|
||||
/iphone/Maps/Images.xcassets/ @comaps/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/ @comaps/android
|
||||
/android/app/src/main/java/app/comaps/car/ @comaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @comaps/android
|
||||
/docs/JAVA_STYLE.md @comaps/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/ @comaps/ios
|
||||
/xcode/ @comaps/ios
|
||||
/docs/OBJC_STYLE.md @comaps/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/ @comaps/styles
|
||||
/data/types.txt @comaps/styles
|
||||
/data/visibility.txt @comaps/styles
|
||||
/data/mapcss-mapping.csv @comaps/styles
|
||||
/data/replaced_tags.txt @comaps/styles
|
||||
/data/classificator.txt @comaps/styles
|
||||
/data/drules_* @comaps/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/ @comaps/styles
|
||||
/tools/kothic/ @organicmaps/styles
|
||||
# DevOps.
|
||||
/.forgejo/workflows @comaps/devops
|
||||
/android/*gradle* @comaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @comaps/devops
|
||||
/xcode/fastlane/ @comaps/devops
|
||||
/tools/python/maps_generator/ @comaps/devops
|
||||
/generator/ @comaps/devops
|
||||
/topography_generator/ @comaps/devops
|
||||
/data/borders/ @comaps/devops
|
||||
/data/conf/isolines/ @comaps/devops
|
||||
/docs/SUBWAY_GENERATION.md @comaps/devops
|
||||
/docs/MAPS.md @comaps/devops
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @comaps/devops
|
||||
/.forgejo/workflows @organicmaps/devops
|
||||
/android/*gradle* @organicmaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
|
||||
/xcode/fastlane/ @organicmaps/devops
|
||||
# Growth.
|
||||
README.md @organicmaps/growth
|
||||
/.forgejo/FUNDING.yml @organicmaps/growth
|
||||
/android/app/src/fdroid/play/ @organicmaps/growth
|
||||
/android/app/src/google/play/ @organicmaps/growth
|
||||
/iphone/metadata/ @organicmaps/growth
|
||||
# Legal.
|
||||
LEGAL @comaps/admins
|
||||
LICENSE @comaps/admins
|
||||
NOTICE @comaps/admins
|
||||
CONTRIBUTORS @comaps/admins
|
||||
/docs/CODE_OF_CONDUCT.md @comaps/admins
|
||||
/docs/DCO.md @comaps/admins
|
||||
/docs/GOVERNANCE.md @comaps/admins
|
||||
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
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
|
||||
@@ -14,22 +14,22 @@ on:
|
||||
- LICENSE
|
||||
- NOTICE
|
||||
- README.md
|
||||
- android/app/src/fdroid/**
|
||||
- android/app/src/google/**
|
||||
- iphone/**
|
||||
- data/*-strings/**
|
||||
- data/strings/**
|
||||
- docs/**
|
||||
- generator/**
|
||||
- packaging/**
|
||||
- libs/platform/*apple*
|
||||
- libs/platform/*_ios*
|
||||
- libs/platform/*_linux*
|
||||
- libs/platform/*_mac*
|
||||
- libs/platform/*qt*
|
||||
- libs/platform/*_win*
|
||||
- libs/pyhelpers/**
|
||||
- platform/*apple*
|
||||
- platform/*_ios*
|
||||
- platform/*_linux*
|
||||
- platform/*_mac*
|
||||
- platform/*qt*
|
||||
- platform/*_win*
|
||||
- pyhelpers/**
|
||||
- qt*/**
|
||||
- skin_generator/**
|
||||
- tools/**
|
||||
- track_generator/**
|
||||
- xcode/**
|
||||
|
||||
jobs:
|
||||
|
||||
@@ -17,78 +17,36 @@ on:
|
||||
- android/app/src/fdroid/**
|
||||
- android/app/src/google/**
|
||||
- iphone/**
|
||||
- data/*-strings/**
|
||||
- data/strings/**
|
||||
- docs/**
|
||||
- generator/**
|
||||
- packaging/**
|
||||
- libs/platform/*apple*
|
||||
- libs/platform/*_ios*
|
||||
- libs/platform/*_linux*
|
||||
- libs/platform/*_mac*
|
||||
- libs/platform/*qt*
|
||||
- libs/platform/*_win*
|
||||
- libs/pyhelpers/**
|
||||
- platform/*apple*
|
||||
- platform/*_ios*
|
||||
- platform/*_linux*
|
||||
- platform/*_mac*
|
||||
- platform/*qt*
|
||||
- platform/*_win*
|
||||
- pyhelpers/**
|
||||
- qt*/**
|
||||
- skin_generator/**
|
||||
- tools/**
|
||||
- track_generator/**
|
||||
- xcode/**
|
||||
|
||||
env:
|
||||
SUBMODULE_CACHE_PATHS: |
|
||||
.git/modules
|
||||
3party/CMake-MetalShaderSupport
|
||||
3party/Vulkan-Headers
|
||||
3party/boost
|
||||
3party/expat
|
||||
3party/fast_double_parser
|
||||
3party/fast_obj
|
||||
3party/freetype/freetype
|
||||
3party/gflags
|
||||
3party/glaze
|
||||
3party/glfw
|
||||
3party/glm
|
||||
3party/googletest
|
||||
3party/harfbuzz/harfbuzz
|
||||
3party/icu/icu
|
||||
3party/imgui/imgui
|
||||
3party/jansson/jansson
|
||||
3party/just_gtfs
|
||||
3party/protobuf/protobuf
|
||||
3party/pugixml/pugixml
|
||||
3party/utfcpp
|
||||
tools/kothic
|
||||
tools/osmctools
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Android Lint
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: codeberg.org/comaps/docker-android-sdk:ubuntu-standalone-zy-docker
|
||||
options: --user root
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Cache world map
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: data/world_mwm
|
||||
key: world-mwm
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.SUBMODULE_CACHE_PATHS }}
|
||||
key: submodules-${{ hashFiles('.gitmodules') }}
|
||||
restore-keys: |
|
||||
submodules-
|
||||
|
||||
- name: Sync and update submodules
|
||||
- name: Parallel submodules checkout
|
||||
shell: bash
|
||||
run: |
|
||||
git submodule sync --recursive
|
||||
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Lint
|
||||
shell: bash
|
||||
@@ -98,9 +56,6 @@ jobs:
|
||||
android-check:
|
||||
name: Build Android Debug
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: codeberg.org/comaps/docker-android-sdk:ubuntu-standalone-zy-docker
|
||||
options: --user root
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -116,32 +71,23 @@ jobs:
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: Install build tools and dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y ninja-build
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 200 # enough to get all commits for the current day
|
||||
|
||||
- name: Cache world map
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: data/world_mwm
|
||||
key: world-mwm
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.SUBMODULE_CACHE_PATHS }}
|
||||
key: submodules-${{ hashFiles('.gitmodules') }}
|
||||
restore-keys: |
|
||||
submodules-
|
||||
|
||||
- name: Sync and update submodules
|
||||
- name: Parallel submodules checkout
|
||||
shell: bash
|
||||
run: |
|
||||
git submodule sync --recursive
|
||||
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure ccache
|
||||
uses: https://github.com/hendrikmuhs/ccache-action@v1.2
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
key: ${{ github.workflow }}-${{ matrix.flavor }}
|
||||
|
||||
@@ -151,11 +97,14 @@ jobs:
|
||||
env:
|
||||
CMAKE_C_COMPILER_LAUNCHER: ccache
|
||||
CMAKE_CXX_COMPILER_LAUNCHER: ccache
|
||||
run: ./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
run: |
|
||||
cmake --version
|
||||
ninja --version
|
||||
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
|
||||
- name: Upload ${{ matrix.flavor }} apk
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-${{ matrix.flavor }}
|
||||
path: android/app/build/outputs/apk/**/*.apk
|
||||
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
|
||||
if-no-files-found: error
|
||||
|
||||
@@ -15,12 +15,12 @@ on:
|
||||
- README.md
|
||||
- docs/**
|
||||
- packaging/**
|
||||
- libs/platform/*apple*
|
||||
- libs/platform/*_android*
|
||||
- libs/platform/*_ios*
|
||||
- libs/platform/*_mac*
|
||||
- libs/platform/*_win*
|
||||
- libs/pyhelpers/**
|
||||
- platform/*apple*
|
||||
- platform/*_android*
|
||||
- platform/*_ios*
|
||||
- platform/*_mac*
|
||||
- platform/*_win*
|
||||
- pyhelpers/**
|
||||
- tools/**
|
||||
- '!tools/python/test_server/**'
|
||||
- xcode/**
|
||||
|
||||
@@ -15,15 +15,15 @@ on:
|
||||
- README.md
|
||||
- android/**
|
||||
- iphone/**
|
||||
- data/*-strings/**
|
||||
- data/strings/**
|
||||
- docs/**
|
||||
- packaging/**
|
||||
- libs/platform/*apple*
|
||||
- libs/platform/*_android*
|
||||
- libs/platform/*_ios*
|
||||
- libs/platform/*_mac*
|
||||
- libs/platform/*_win*
|
||||
- libs/pyhelpers/**
|
||||
- platform/*apple*
|
||||
- platform/*_android*
|
||||
- platform/*_ios*
|
||||
- platform/*_mac*
|
||||
- platform/*_win*
|
||||
- pyhelpers/**
|
||||
- tools/**
|
||||
- '!tools/python/test_server/**'
|
||||
- xcode/**
|
||||
|
||||
@@ -105,17 +105,17 @@ jobs:
|
||||
run: |
|
||||
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
|
||||
cd ~
|
||||
git clone --depth 1 --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
|
||||
git clone --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
|
||||
- name: Checkout wikiparser repo
|
||||
shell: bash
|
||||
run: |
|
||||
cd ~
|
||||
git clone --depth 1 --single-branch https://codeberg.org/comaps/wikiparser.git
|
||||
git clone https://codeberg.org/comaps/wikiparser.git
|
||||
- name: Checkout subways repo
|
||||
shell: bash
|
||||
run: |
|
||||
cd ~
|
||||
git clone --depth 1 --single-branch https://codeberg.org/comaps/subways.git
|
||||
git clone https://codeberg.org/comaps/subways.git
|
||||
|
||||
copy-coasts:
|
||||
# if: inputs.run-copy-coasts
|
||||
|
||||
@@ -1,219 +0,0 @@
|
||||
name: compare_subways
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
inputs:
|
||||
subways-branch:
|
||||
description: 'Check out a different subways repo branch?'
|
||||
required: true
|
||||
type: string
|
||||
default: master
|
||||
schedule:
|
||||
# Run daily at 00:00 UTC
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
env:
|
||||
#PLANET: /home/planet/planet/planet-latest.pbf
|
||||
#TMPDIR: /tmp
|
||||
HTML_DIR: "/mnt/4tbexternal/osm-planet/subway/validator"
|
||||
#DUMP: "$HTML_DIR"
|
||||
#SKIP_PLANET_UPDATE: "1"
|
||||
SPREADSHEET_ID: "1SEW1-NiNOnA2qDwievcxYV1FOaQl1mb1fdeyqAxHu3k"
|
||||
DEBIAN_FRONTEND: nonnteractive
|
||||
TZ: Etc/UTC
|
||||
|
||||
# /var/www/html/subways is mapped as a volume on cdn-fi-1
|
||||
# as is /tmp/planet
|
||||
jobs:
|
||||
clone-repos:
|
||||
name: Clone Git Repos
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
||||
volumes:
|
||||
- /mnt/4tbexternal:/mnt/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-compare-subways-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: "~"
|
||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}}
|
||||
- name: Checkout main repo
|
||||
shell: bash
|
||||
run: |
|
||||
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
|
||||
cd ~
|
||||
git clone --depth 1 -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
|
||||
# --recurse-submodules --shallow-submodules
|
||||
- name: Checkout subways repo
|
||||
shell: bash
|
||||
run: |
|
||||
cd ~
|
||||
git clone --depth 1 -b ${{ inputs.subways-branch }} --single-branch https://codeberg.org/comaps/subways.git
|
||||
|
||||
update-planet-pbf:
|
||||
name: Update PBF Planet
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
||||
volumes:
|
||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-compare-subways-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Download Planet File if Absent
|
||||
shell: bash
|
||||
# TODO: replace wget2 with curl -Z
|
||||
run: |
|
||||
if [ ! -d /home/planet/planet/ ]; then
|
||||
mkdir -p /home/planet/planet/
|
||||
fi
|
||||
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
|
||||
cd /home/planet/planet/
|
||||
wget2 --verbose --progress=bar --continue https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
|
||||
else
|
||||
echo "planet-latest.osm.pbf was found, raw download not required."
|
||||
fi
|
||||
- name: Update PBF Planet
|
||||
shell: bash
|
||||
run: |
|
||||
cd /home/planet/planet/
|
||||
rm -f planet-latest-new.osm.pbf
|
||||
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --size 16384
|
||||
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
|
||||
- name: Notify Zulip
|
||||
run: |
|
||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
||||
--data-urlencode type=stream \
|
||||
--data-urlencode 'to="DevOps"' \
|
||||
--data-urlencode topic=codeberg-bot \
|
||||
--data-urlencode 'content=PBF planet update is done!'
|
||||
|
||||
update-planet-o5m:
|
||||
if: false
|
||||
name: Update O5M Planet
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
||||
volumes:
|
||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-compare-subways-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Check for O5M Planet File
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -f /home/planet/planet/planet.o5m ]; then
|
||||
echo "WARN: No file at /home/planet/planet/planet.o5m"
|
||||
|
||||
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
|
||||
echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
|
||||
ls -al /home/planet/
|
||||
ls -al /home/planet/planet/
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Converting planet-latest.osm.pbf to planet.o5m"
|
||||
cd /home/planet/planet/
|
||||
osmconvert -v --drop-author --drop-version --hash-memory=4000 planet-latest.osm.pbf -o=planet.o5m
|
||||
echo "Conversion is done."
|
||||
fi
|
||||
- name: Update O5M planet
|
||||
run: |
|
||||
echo "Starting..."
|
||||
cd /home/planet/planet/
|
||||
rm -f planet-new.o5m
|
||||
osmupdate -v --drop-author --drop-version --hash-memory=4000 --max-merge=32 --out-o5m planet.o5m planet-new.o5m
|
||||
mv planet-new.o5m planet.o5m
|
||||
echo "Done."
|
||||
- name: Notify Zulip
|
||||
run: |
|
||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
||||
--data-urlencode type=stream \
|
||||
--data-urlencode 'to="DevOps"' \
|
||||
--data-urlencode topic=codeberg-bot \
|
||||
--data-urlencode 'content=O5M planet update is done!'
|
||||
|
||||
compare-subways:
|
||||
name: Compare Subways
|
||||
runs-on: mapfilemaker
|
||||
needs:
|
||||
- clone-repos
|
||||
container:
|
||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
||||
volumes:
|
||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-compare-subways-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: "~"
|
||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
- name: Compare Subways
|
||||
shell: bash
|
||||
run: |
|
||||
cd ~/comaps/
|
||||
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
|
||||
./tools/unix/maps/generate_subways.sh
|
||||
- name: Notify Zulip
|
||||
run: |
|
||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
||||
--data-urlencode type=stream \
|
||||
--data-urlencode 'to="DevOps"' \
|
||||
--data-urlencode topic=codeberg-bot \
|
||||
--data-urlencode 'content=Subways are done!'
|
||||
- name: Compare with VK validation
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
cd ~/subways
|
||||
if [ -f "$HTML_DIR/cities.txt" ]; then
|
||||
echo "Comparing local validation with VK's validation..."
|
||||
python3 ./scripts/compare_html_validation.py "$HTML_DIR/cities.txt" \
|
||||
--remote-url "https://maps.vk.com/osm/tools/subways/latest/cities.txt"
|
||||
else
|
||||
echo "Local cities.txt not found at $HTML_DIR/cities.txt"
|
||||
exit 1
|
||||
fi
|
||||
- name: Compare Google Sheets Data
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
|
||||
# Download the Google Sheets data
|
||||
GOOGLE_SHEETS_URL="https://docs.google.com/spreadsheets/d/${SPREADSHEET_ID}/export?format=csv"
|
||||
echo "Downloading Google Sheets data from: $GOOGLE_SHEETS_URL"
|
||||
curl -sL "$GOOGLE_SHEETS_URL" -o /tmp/google_sheets.csv
|
||||
|
||||
# Normalize line endings to avoid spurious diffs
|
||||
sed 's/\r$//' source_data/Rapid.csv > /tmp/local_normalized.csv
|
||||
sed 's/\r$//' /tmp/google_sheets.csv > /tmp/google_normalized.csv
|
||||
|
||||
# Generate unified diff
|
||||
echo ""
|
||||
echo "Differences between local Rapid.csv and Google Sheets:"
|
||||
echo ""
|
||||
|
||||
if diff -u /tmp/local_normalized.csv /tmp/google_normalized.csv > /tmp/full_diff.txt; then
|
||||
echo "No differences found! Local Rapid.csv is in sync with Google Sheets."
|
||||
exit 0
|
||||
else
|
||||
cat /tmp/full_diff.txt
|
||||
|
||||
echo ""
|
||||
echo "The above diff can be saved as a patch and applied with:"
|
||||
echo " patch source_data/Rapid.csv < patch-file"
|
||||
echo "or by manually reviewing and applying the changes."
|
||||
exit 1
|
||||
fi
|
||||
3
.github/FUNDING.yml
vendored
3
.github/FUNDING.yml
vendored
@@ -1,3 +0,0 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
9
.github/workflows/android-check.yaml
vendored
9
.github/workflows/android-check.yaml
vendored
@@ -1,6 +1,9 @@
|
||||
name: Android Check
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-21-jdk-amd64 # Java 21 is required for Android Gradle 8 plugin
|
||||
@@ -12,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
@@ -75,7 +78,7 @@ jobs:
|
||||
pip install "protobuf<3.21" --break-system-packages
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 200 # enough to get all commits for the current day
|
||||
|
||||
@@ -100,7 +103,7 @@ jobs:
|
||||
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
|
||||
- name: Upload ${{ matrix.flavor }} apk
|
||||
uses: actions/upload-artifact@v6
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: android-${{ matrix.flavor }}
|
||||
path: android/app/build/outputs/apk/**/CoMaps-*.apk
|
||||
|
||||
2
.github/workflows/ios-check.yaml
vendored
2
.github/workflows/ios-check.yaml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
xcodebuild -downloadPlatform iOS
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Parallel submodules checkout
|
||||
shell: bash
|
||||
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -31,9 +31,10 @@ data/types.txt*
|
||||
data/visibility.txt*
|
||||
data/colors.txt*
|
||||
data/patterns.txt*
|
||||
data/symbols/*/design/
|
||||
data/colors_design.txt
|
||||
data/patterns_design.txt
|
||||
# TODO: designer is not used at the moment
|
||||
# data/symbols/*/design/
|
||||
# data/colors_design.txt
|
||||
# data/patterns_design.txt
|
||||
|
||||
# Auto-generated from data/categories-strings/* by tools/unix/generate_categories.sh
|
||||
data/categories.txt
|
||||
@@ -154,8 +155,6 @@ android/huawei-appgallery.json
|
||||
android/res/xml/network_security_config.xml
|
||||
./server/
|
||||
iphone/Maps/app.omaps/
|
||||
# Generated file
|
||||
libs/indexer/localized_types_map.cpp
|
||||
|
||||
*.li
|
||||
|
||||
|
||||
@@ -104,8 +104,7 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
||||
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
||||
add_definitions(-DRELEASE)
|
||||
if (NOT MSVC)
|
||||
add_compile_options(-O3)
|
||||
set (CMAKE_INTERPROCEDURAL_OPTIMIZATION True)
|
||||
add_compile_options(-O3 $<$<CXX_COMPILER_ID:GNU>:-flto=auto>)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
||||
@@ -117,6 +116,20 @@ endif()
|
||||
|
||||
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
||||
|
||||
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
||||
find_program(LLD_FOUND ld.lld)
|
||||
if (LLD_FOUND)
|
||||
message(STATUS "Using ld.lld linker")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld")
|
||||
else()
|
||||
find_program(GOLD_FOUND ld.gold)
|
||||
if (GOLD_FOUND)
|
||||
message(STATUS "Using ld.gold")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=gold")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT SKIP_TESTS)
|
||||
enable_testing()
|
||||
# Enables ctest -T memcheck with valgrind
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
This file contains a list of people who have contributed to this project.
|
||||
It is not necessarily comprehensive as contributors must manually add themselves.
|
||||
Its not neccesarily comprehensive.
|
||||
Feel free to add yourself here along with your first contribution!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
CoMaps contributors:
|
||||
(in alphabetical order)
|
||||
(in alphabetic order)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Bastian Greshake Tzovaras
|
||||
clover sage
|
||||
daxgar
|
||||
Harry Bond <me@hbond.xyz>
|
||||
NoelClick
|
||||
thesupertechie
|
||||
vikiawv
|
||||
Yannik Bloscheck
|
||||
|
||||
|
||||
2
NOTICE
2
NOTICE
@@ -1,6 +1,6 @@
|
||||
Copyright 2020 My.com B.V. (Mail.Ru Group)
|
||||
Copyright 2025 Organic Maps Contributors
|
||||
Copyright 2026 CoMaps Contributors
|
||||
Copyright 2025 CoMaps Contributors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
<a href="https://codeberg.org/comaps/comaps/src/branch/main/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License"/>
|
||||
</a>
|
||||
<a href="https://codeberg.org/comaps/comaps/actions?workflow=android-check.yaml">
|
||||
<img src="https://codeberg.org/comaps/comaps/badges/workflows/android-check.yaml/badge.svg?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge" alt="Android Build Status"/>
|
||||
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge" alt="Android Build Status"/>
|
||||
</a>
|
||||
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge" alt="iOS Build Status"/>
|
||||
|
||||
17
SECURITY.md
17
SECURITY.md
@@ -1,17 +0,0 @@
|
||||
## Reporting Vulnerabilities
|
||||
You can report a security vulnerability by creating an issue or send mail to security@comaps.app
|
||||
|
||||
## Verifying Fingerprints
|
||||
|
||||
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
|
||||
```
|
||||
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
|
||||
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
|
||||
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
|
||||
```
|
||||
|
||||
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
|
||||
```
|
||||
app.comaps
|
||||
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
|
||||
```
|
||||
@@ -254,20 +254,18 @@ android {
|
||||
androidResources {
|
||||
ignoreAssetsPattern = '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
||||
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
||||
// Some languages not supported by Android require to be specified here to be applied
|
||||
localeFilters += [
|
||||
"en",
|
||||
"af",
|
||||
"ar",
|
||||
"az",
|
||||
"be",
|
||||
"bg",
|
||||
"bn",
|
||||
"ca",
|
||||
"cs",
|
||||
"da",
|
||||
"de",
|
||||
"el",
|
||||
"en",
|
||||
"en-rGB",
|
||||
"es",
|
||||
"es-rMX",
|
||||
@@ -277,38 +275,28 @@ android {
|
||||
"fi",
|
||||
"fr",
|
||||
"fr-rCA",
|
||||
"gl",
|
||||
"gsw",
|
||||
"he",
|
||||
"iw",
|
||||
"hi",
|
||||
"hu",
|
||||
"id",
|
||||
"in",
|
||||
"is",
|
||||
"it",
|
||||
"iw",
|
||||
"ja",
|
||||
"kw",
|
||||
"ko",
|
||||
"lt",
|
||||
"lv",
|
||||
"mr",
|
||||
"mt",
|
||||
"nb",
|
||||
"nb-rNO",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt",
|
||||
"pt-rBR",
|
||||
"ro",
|
||||
"ru",
|
||||
"sl",
|
||||
"sk",
|
||||
"sr",
|
||||
"b+sr+Latn",
|
||||
"sv",
|
||||
"sw",
|
||||
"ta",
|
||||
"th",
|
||||
"tr",
|
||||
"uk",
|
||||
@@ -363,8 +351,6 @@ dependencies {
|
||||
implementation libs.androidx.recyclerview
|
||||
implementation libs.androidx.work.runtime
|
||||
implementation libs.androidx.lifecycle.process
|
||||
implementation libs.androidx.documentfile
|
||||
// 1.13 Material library version doesn't render properly alpha properties on map buttons
|
||||
implementation libs.android.material
|
||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
تطبيق خرائط مجاني ومفتوح المصدر تقوده المجتمع، مبني على بيانات OpenStreetMap ويعززه الالتزام بالشفافية والخصوصية وعدم الربح. CoMaps هو فرع/انبثاق من Organic Maps، والذي بدوره هو فرع من Maps.ME.
|
||||
|
||||
اقرأ المزيد عن أسباب المشروع واتجاهه على <b><i>codeberg.org/comaps</i></b>.
|
||||
انضم إلى المجتمع هناك وساعد في صنع أفضل تطبيق خرائط
|
||||
• استخدم التطبيق وانشر الكلمة عنه
|
||||
• قدم الملاحظات وأبلغ عن المشكلات
|
||||
• حدِّث بيانات الخرائط في التطبيق أو على موقع OpenStreetMap
|
||||
|
||||
‣ <b>مرتكز على وضع عدم الاتصال</b>: خطط وابحث عن طريقك في رحلتك بالخارج دون الحاجة إلى خدمة الهاتف الخلوي، ابحث عن نقاط الطريق أثناء التنزه البعيد، إلخ. جميع وظائف التطبيق مصممة للعمل دون اتصال.
|
||||
‣ <b>يحترم الخصوصية</b>: التطبيق مصمم مع مراعاة الخصوصية - لا يحدد هوية الأشخاص، لا يتتبع، ولا يجمع المعلومات الشخصية. خالٍ من الإعلانات.
|
||||
‣ <b>بسيط ومصقول</b>: ميزات أساسية سهلة الاستخدام تعمل ببساطة.
|
||||
‣ <b>يوفر بطاريتك ومساحتك</b>: لا يستنزف بطاريتك مثل تطبيقات الملاحة الأخرى. الخرائط المدمجة توفر مساحة ثمينة على هاتفك.
|
||||
‣ <b>مجاني ومبني من قبل المجتمع</b>: ساعد أشخاص مثلك في بناء التطبيق بإضافة أماكن إلى OpenStreetMap، واختبار الميزات وإبداء الملاحظات، والمساهمة بمهاراتهم التطويرية وأموالهم.
|
||||
‣ <b>قرارات ومالية مفتوحة وشفافة، غير ربحية ومفتوحة المصدر بالكامل.</b>
|
||||
|
||||
<b>الميزات الرئيسية</b>:
|
||||
• خرائط تفصيلية قابلة للتحميل تحتوي على أماكن غير متوفرة في خرائط Google
|
||||
• وضع خارجي مع مسارات المشي لمسافات طويلة المميزة، مواقع التخييم، مصادر المياه، القمم، خطوط الكنتور، إلخ
|
||||
• ممرات المشي ومسارات الدراجات
|
||||
• نقاط الاهتمام مثل المطاعم، محطات الوقود، الفنادق، المتاجر، المعالم السياحية والكثير غيرها
|
||||
• البحث بالاسم أو العنوان أو فئة نقطة الاهتمام
|
||||
• ملاحة مع إعلانات صوتية للمشي أو ركوب الدراجات أو القيادة
|
||||
• وضع إشارة على أماكنك المفضلة بنقرة واحدة
|
||||
• مقالات ويكيبيديا دون اتصال
|
||||
• طبقة مترو الأنفاق والتوجيهات
|
||||
• تسجيل المسار
|
||||
• تصدير واستيراد العلامات والمسارات بصيغ KML وKMZ وGPX
|
||||
• وضع الظلام للاستخدام أثناء الليل
|
||||
• تحسين بيانات الخرائط للجميع باستخدام محرر مدمج أساسي
|
||||
|
||||
<b>الحرية هنا</b>
|
||||
اكتشف رحلتك، ابحر في العالم مع وضع الخصوصية والمجتمع في المقدمة!
|
||||
@@ -1 +0,0 @@
|
||||
تنقل سهل في الخريطة - اكتشف المزيد من رحلتك - مدعوم من المجتمع
|
||||
@@ -1 +0,0 @@
|
||||
تنزه، تنقل، قُد بدون إتصال الإنترنت مع الخصوصية
|
||||
@@ -1,32 +0,0 @@
|
||||
Una aplicació de mapes gratuïta i de codi obert dirigida per la comunitat basada en dades d'OpenStreetMap i reforçada amb el compromís amb la transparència, la privadesa i la no ànim de lucre. CoMaps és una derivació/fork d'Organic Maps, que al seu torn és una derivació de Maps.ME.
|
||||
|
||||
Llegiu sobre els motius del projecte i la seva direcció a <b><i>codeberg.org/comaps</i></b>.
|
||||
Uneix-te a la comunitat i ajuda a crear la millor aplicació de mapes
|
||||
• Utilitza l'aplicació i difon-la
|
||||
• Dona comentaris i informa de problemes
|
||||
• Actualitza les dades del mapa a l'aplicació o al lloc web d'OpenStreetMap
|
||||
|
||||
‣ <b>Enfocat fora de línia</b>: Planifica i navega pel teu viatge a l'estranger sense necessitat de servei mòbil, cerca punts de referència mentre fas una excursió llunyana, etc. Totes les funcions de l'aplicació estan dissenyades per funcionar fora de línia.
|
||||
‣ <b>Respecte a la privadesa</b>: L'aplicació està dissenyada tenint en compte la privadesa: no identifica persones, no fa seguiment i no recopila informació personal. Sense anuncis.
|
||||
‣ <b>Senzill i polit</b>: funcions essencials fàcils d'utilitzar que simplement funcionen.
|
||||
‣ <b>Estalvia bateria i espai</b>: No consumeix bateria com altres aplicacions de navegació. Els mapes compactes estalvien espai preciós al telèfon.
|
||||
‣ <b>Gratuït i creat per la comunitat</b>: Gent com tu ha ajudat a crear l'aplicació afegint llocs a OpenStreetMap, provant i donant comentaris sobre les funcions i aportant les seves habilitats de desenvolupament i diners.
|
||||
‣ <b>Presa de decisions i finances obertes i transparents, sense ànim de lucre i de codi obert.</b>
|
||||
|
||||
<b>Característiques principals</b>:
|
||||
• Mapes detallats descarregables amb llocs que no estan disponibles amb Google Maps
|
||||
• Mode exterior amb rutes de senderisme destacades, càmpings, fonts d'aigua, pics, corbes de nivell, etc.
|
||||
• Senders per caminar i carrils bici
|
||||
• Punts d'interès com restaurants, gasolineres, hotels, botigues, llocs d'interès i molts més
|
||||
• Cerca per nom, adreça o categoria de punt d'interès
|
||||
• Navegació amb anuncis de veu per caminar, anar amb bicicleta o conduir
|
||||
• Marca els teus llocs preferits amb un sol toc
|
||||
• Articles de la Viquipèdia fora de línia
|
||||
• Capa i indicacions de trànsit de metro
|
||||
• Enregistrament de rutes
|
||||
• Exporta i importa marcadors i rutes en formats KML, KMZ i GPX
|
||||
• Un mode fosc per utilitzar durant la nit
|
||||
• Millora les dades del mapa per a tothom mitjançant un editor bàsic integrat
|
||||
|
||||
<b>La llibertat és aquí</b>
|
||||
Descobreix el teu viatge, navega pel món amb la privadesa i la comunitat al capdavant!
|
||||
@@ -1,6 +1,6 @@
|
||||
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
|
||||
|
||||
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b> (auf Englisch).
|
||||
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
|
||||
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
• Nutze die App und erzähle anderen davon
|
||||
• Gib Feedback und melde Probleme
|
||||
@@ -9,9 +9,9 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
‣ <b>Einfach und ausgereift</b>: Essenzielle, leicht zu bedienende Funktionen, die einfach funktionieren.
|
||||
‣ <b>Offline-orientiert</b>: Plane und navigiere im Ausland ohne Mobilfunkverbindung, finde Wegpunkte auf abgelegenen Wanderungen usw. Alle Funktionen sind für den Offline-Einsatz konzipiert.
|
||||
‣ <b>Datenschutzfreundlich</b>: Die App wurde mit Fokus auf Privatsphäre entwickelt – keine Personenidentifikation, kein Tracking, keine Erfassung persönlicher Daten, keine Werbung.
|
||||
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig viel Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf deinem Gerät.
|
||||
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf deinem Gerät.
|
||||
‣ <b>Kostenlos und von der Community entwickelt</b>: Menschen wie du haben geholfen, diese App zu entwickeln – durch das Hinzufügen von Orten zu OpenStreetMap, Testen von neuen Funktionen, Softwareentwicklung oder Spenden.
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source.</b>
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
|
||||
|
||||
<b>Hauptfunktionen</b>:
|
||||
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
||||
@@ -28,5 +28,5 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
• Dunkler Modus für die Nutzung bei Nacht
|
||||
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
|
||||
|
||||
<b>Freiheit beginnt hier</b>
|
||||
Entdecke deine Reise, wobei Datenschutz und Gemeinschaft im Vordergrund stehen!
|
||||
<b>Entdecke die Unabhängigkeit</b>
|
||||
Entdecke deine Reise – navigiere in der Welt mit Datenschutz!
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
• OSM-Daten vom 6. Januar
|
||||
• Editor: POI mit mehr als einem Tag, (z.B. Arten von Kunstwerken wie Skulpturen...), mehr POI können als leer/stillgelegt werden
|
||||
• Miniatureisenbahnen & Kläranlagen hinzugefügt
|
||||
• Material 3-Dialoge & dunklerer Hintergrund im Darkmode
|
||||
• Fiktive Geschwindigkeitsbegrenzungen für Verbindungsstraßen entfernt
|
||||
• Versatz der Kameraausschnitt in der Navigation behoben
|
||||
• Weniger empfindliches langes Antippen
|
||||
|
||||
Weitere Details unter codeberg.org/comaps/comaps/releases
|
||||
@@ -1 +1 @@
|
||||
Leichte Navigation – Erlebe mehr von deiner Reise – Community-unterstützt
|
||||
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
A community led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||
|
||||
Read on about reasons for the project and its direction at <b><i>codeberg.org/comaps</i></b>.
|
||||
Join the community there and help make the best maps app
|
||||
• Use the app and spread the word about it
|
||||
• Give feedback and report issues
|
||||
• Update map data in the app or on the OpenStreetMap website
|
||||
|
||||
‣ <b>Offline focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||
‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - it does not identify people, does not track, and does not collect personal information. Ad free.
|
||||
‣ <b>Simple and Polished</b>: essential easy to use features that just work.
|
||||
‣ <b>Saves Your Battery and Space</b>: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||
‣ <b>Free and Built by the Community</b>: People like you helped build the app by adding places to OpenStreetMap, testing and giving feedback on features and contributing their development skills and money.
|
||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||
|
||||
<b>Main Features</b>:
|
||||
• Downloadable detailed maps with places which are not available with Google Maps
|
||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
||||
• Walking paths and cycleways
|
||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeing and many more
|
||||
• Search by name or an address or by point of interest category
|
||||
• Navigation with voice announcements for walking, cycling, or driving
|
||||
• Bookmark your favorite places with a single tap
|
||||
• Offline Wikipedia articles
|
||||
• Subway transit layer and directions
|
||||
• Track recording
|
||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
||||
• A dark mode to use during the night
|
||||
• Improve map data for everyone using a basic built-in editor
|
||||
|
||||
<b>Freedom Is Here</b>
|
||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||
@@ -1,32 +0,0 @@
|
||||
A community-led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||
|
||||
Read on about reasons for the project and its direction at <b><i>codeberg.org/comaps</i></b>.
|
||||
Join the community there and help make the best maps app
|
||||
• Use the app and spread the word about it
|
||||
• Give feedback and report issues
|
||||
• Update map data in the app or on the OpenStreetMap website
|
||||
|
||||
‣ <b>Offline-focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||
‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
|
||||
‣ <b>Simple and Polished</b>: essential easy to use features that just work.
|
||||
‣ <b>Saves Your Battery and Space</b>: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||
‣ <b>Free and Built by the Community</b>: People like you helped build the app by adding places to OpenStreetMap, testing and giving feedback on features and contributing their development skills and money.
|
||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||
|
||||
<b>Main Features</b>:
|
||||
• Downloadable detailed maps with places which are not available with Google Maps
|
||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
||||
• Walking paths and cycleways
|
||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeing and many more
|
||||
• Search by name or an address or by point of interest category
|
||||
• Navigation with voice announcements for walking, cycling, or driving
|
||||
• Bookmark your favorite places with a single tap
|
||||
• Offline Wikipedia articles
|
||||
• Subway transit layer and directions
|
||||
• Track recording
|
||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
||||
• A dark mode to use during the night
|
||||
• Improve map data for everyone using a basic built-in editor
|
||||
|
||||
<b>Freedom Is Here</b>
|
||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||
@@ -1 +0,0 @@
|
||||
Easy map navigation - Discover more of your journey - Powered by the community
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Hike, Bike, Drive Offline with Privacy
|
||||
@@ -1,9 +1,13 @@
|
||||
• OpenStreetMap data as of January 6
|
||||
• Editor: add POI types with more than one OSM tag, e.g. artwork subtypes sculptures, paintings..; more POI types could be marked as vacant/disused
|
||||
• Added miniature railways and wastewater treatment plants
|
||||
• Use Material 3 dialogs and darker background in dark mode
|
||||
• Removed fictional speed limits for link roads
|
||||
• Fixed camera cutout offset in navigation
|
||||
• Less sensitive long tap (full-screen mode)
|
||||
• Fixed voice directions pronouncing weird symbols in the beginning
|
||||
• OpenStreetMap data as of November 23
|
||||
|
||||
More details on codeberg.org/comaps/comaps/releases
|
||||
Changes in the previous release:
|
||||
• Added trees
|
||||
• Made bus stop icons smaller and show up earlier
|
||||
• Reduce visibility of entrances
|
||||
• Added several other POI types
|
||||
• Show sand areas on the map
|
||||
• Add business is vacant option to the OSM editor
|
||||
• Improved road shields in Europe
|
||||
• Avoid paved roads routing option
|
||||
• Added icons to the settings page
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
• Datos OSM a 06/01
|
||||
• Editor: se añaden tipos de POI con más de una etiqueta, ej. esculturas, pinturas...; se podrán marcar más tipos como en desuso
|
||||
• Se añaden ferrocarriles mini y plantas de tratamiento de aguas
|
||||
• Se utilizan diálogos Material 3 y fondo más oscuro en el modo oscuro
|
||||
• Se eliminan límites de velocidad ficticios para enlaces
|
||||
• Se corrige desplazamiento en la navegación
|
||||
• Toque largo menos sensible (en pantalla completa)
|
||||
|
||||
Más detalles en codeberg.org/comaps/comaps/releases
|
||||
@@ -1,9 +0,0 @@
|
||||
• Données OpenStreetMap du 6 janvier
|
||||
• Éditeur : support des types de POI avec plus d’un tag OSM, par exemple types d’œuvres d’art sculptures, peintures..
|
||||
• Rendu des rails pour trains miniatures et des stations d'épuration
|
||||
• Utilisation des pop-ups Material 3 et d'un fond plus sombre en thème sombre
|
||||
• Suppression des limites de vitesse fictives sur les bretelles de routes
|
||||
• Correction des instructions de navigation sur les appareils avec des encoches
|
||||
• Appui long moins sensible (en mode plein écran)
|
||||
|
||||
Plus de détails sur codeberg.org/comaps/comaps/releases
|
||||
@@ -1,7 +0,0 @@
|
||||
• OpenStreetMap podaci od 6. siječnja
|
||||
• Uređivač: dodane točake interesa s više od jedne OSM oznake, npr. podtipovi umjetnina kao skulpture, slike...; više točaka interesa se sada može označiti kao upražnjene/napuštene
|
||||
• Dodane minijaturne željeznice i postrojenja za pročišćavanje otpadnih voda
|
||||
• Korištenje Material 3 dijaloga i tamnije pozadine u tamnom načinu rada
|
||||
• Uklonjena su izmišljena ograničenja brzine za spojne ceste
|
||||
|
||||
Više detalja na codeberg.org/comaps/comaps/releases
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps- Navigasi Offline dengan Privasi
|
||||
@@ -1,32 +0,0 @@
|
||||
Unn app mappys rydh hag ygor selys war an kemeneth, selys war data OpenStreetMap ha krefhys gans omrians dhe klerder, privetter, ha heb budh. CoMaps yw unn forgh a Organic Maps, unn forgh a Maps.ME.
|
||||
|
||||
Redya ma a-dro resons rag an ragdres hag y tu yn <b><i>codeberg.org/comaps</i></b>.
|
||||
Omjunya an kemeneth ena ha gweres gul an app mappys gwella
|
||||
• Devnydhya an app ha kevrenna y'n
|
||||
• Dasliva ha derivas kudynnow
|
||||
• Nowedhi data mappa yn an app po war an gwasiva OpenStreetMap
|
||||
|
||||
‣ <b>Fogellys war dhywarlinen</b>: Devisya ha viajya dha viaj tramor neb res rag gonis kellgowser, hwilas leow ha war unn gwandrans pell, h.e. Oll nasyow app yw desinys dhe oberi dhywarlinen.
|
||||
‣ <b>Ow Gul Revrons dhe Privetter</b>: An app yw desinys gans privetter yn brys - na aswon tus, na helerghi, ha na kuntel kedhlow personel. Heb argemynnow.
|
||||
‣ <b>Sempel ha Polsys</b>: nasyow es may oberi poran.
|
||||
‣ <b>Sawya dha Batri hag Efander</b>: Na gwakhe dha batri haval dhe appys navigacyon aral. Mappys kesstrothys sawya efander precyous war dha kellgowser.
|
||||
‣ <b>Rydh ha Byldys gans an Kemeneth</b>: Tus haval dhe ty gwerys byldya an app gans owth addya leos dhe OpenStreetMap, ow previ ha dasliva a-dro nasyow hag ow kevri aga sleynethow hag arghans i.
|
||||
‣ <b>Erviransow hag Arghansereth Ygor ha Treusweladow, Heb Budh, ha Kod Ygor yn Leun</b>
|
||||
|
||||
<b>Nasyow Chif</b>
|
||||
• Mappys manylys iskargadow gans leos ankavadow war Google Maps
|
||||
• Fordh Yn-Mes gans olow gwandrans, kampvaow, pennfentynnyow dowr, menydhyow, linennow kettres, h.e.
|
||||
• Hensyow kerdhyans ha diwrosyans
|
||||
• Leow kepar ha bostiow, petrolvaow, ostelyow, gwethjiow, troyll gwelyow, ha moy
|
||||
• Hwilas gans hanow po unn trigva po gans klass leow
|
||||
• Navigacyon gans gwarnyansow kewsys rag ow walkya, ow diwrosa, po ow lewa
|
||||
• Lyververkya dha leow drudh gans unn tava unnik
|
||||
• Artiklow dhywarlinen Wikipedya
|
||||
• Gwiskas metro ha tuyow
|
||||
• Helerghyans lerghow
|
||||
• Esperthi hag ynperthi lyververkys ha lerghow yn furvasow KML, KMZ, GPX
|
||||
• Unn fordh du rag an nos
|
||||
• Gwellhe data mappa rag peub ow devnydhya unn chanjyell selyek
|
||||
|
||||
<b>Rydhses Yw Omma</b>
|
||||
Trovya dha viaj, viajya an nor gans privetter ha kemeneth a-talenebek!
|
||||
@@ -1 +0,0 @@
|
||||
Navigacyon mappa es - Trovya moy a dha kerdh - Selys war an kemeneth
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Viajya gans Privetter
|
||||
@@ -1,32 +0,0 @@
|
||||
Bendruomenės vystoma nemokama atvirojo kodo žemėlapių programa, pagrįsta „OpenStreetMap“ duomenimis ir sustiprinta įsipareigojimu užtikrinti skaidrumą, privatumą ir pelno nesiekimą. „CoMaps“ programa yra kilusi iš „Organic Maps“, o pastaroji – iš programos „Maps.ME“.
|
||||
|
||||
Apie šio projekto kilmę, jos priežastis ir palaikomą kryptį galite paskaityti adresu <b><i>codeberg.org/comaps</i></b>.
|
||||
Prisijunkite prie bendruomenės ir padėkite sukurti geriausią žemėlapių programą
|
||||
• Naudokitės programa ir paskleiskite žinią apie ją
|
||||
• Teikite atsiliepimus ir praneškite apie problemas
|
||||
• Atnaujinkite žemėlapių duomenis programoje arba „OpenStreetMap“ svetainėje
|
||||
|
||||
‣ <b>Skirta naudoti neprisijungus prie interneto</b>: planuokite maršrutus ir keliaukite užsienyje be mobiliojo ryšio, ieškokite kelionės taškų tolimuose žygiuose ir pan. Visos programos funkcijos yra pritaikytos veikti be interneto ryšio.
|
||||
‣ <b>Gerbia privatumą</b>: programėlė sukurta, teikiant prioritetą privatumui: neidentifikuoja žmonių, neseka ir nerenka asmeninės informacijos. Be reklamų.
|
||||
‣ <b>Paprasta ir išbaigta</b>: esminės, lengvai naudojamos funkcijos, kurios tiesiog veikia.
|
||||
‣ <b>Taupo bateriją ir vietą</b>: neišsekina baterijos kaip kitos navigacijos programos. Kompaktiški žemėlapiai tausoja vietą jūsų telefone.
|
||||
‣ <b>Nemokama ir kuriama bendruomenės</b>: paprasti žmonės – kaip jūs – padėjo sukurti šią programą, pildydami „OpenStreetMap“ žemėlapį, išbandydami ir pateikdami atsiliepimus apie funkcijas bei prisidėdami savo programavimo įgūdžiais ir pinigais.
|
||||
‣ <b>Atviras ir skaidrus sprendimų priėmimas ir finansai, ne pelno siekianti ir visiškai atviro kodo programa.</b>
|
||||
|
||||
<b>Pagrindinės funkcijos</b>:
|
||||
• Atsisiunčiami išsamūs žemėlapiai su vietomis, kurių nėra „Google Maps“;
|
||||
• Žygių pėsčiomis veiksena su pažymėtais pėsčiųjų takais, stovyklavietėmis, vandens šaltiniais, kalnų viršūnėmis, reljefo linijomis ir kt.;
|
||||
• Pėsčiųjų ir dviračių takai;
|
||||
• Potencialūs kelionės taškai, kaip antai restoranai, degalinės, viešbučiai, parduotuvės, lankytinos vietos ir daugelis kitų;
|
||||
• Paieška pagal pavadinimą, adresą arba lankytinos vietos kategoriją;
|
||||
• Navigacija su balso instrukcijomis pėstiesiems, dviratininkams ir motorinio transporto vairuotojams;
|
||||
• Mėgstamų vietų įsiminimas vienu bakstelėjimu;
|
||||
• „Vikipedijos“ straipsniai, prieinami neprisijungus prie interneto;
|
||||
• Kelionių metro sluoksnis ir maršrutai;
|
||||
• Trasų įrašymas;
|
||||
• Žymių ir trasų eksportavimas ir importavimas KML, KMZ, GPX formatais;
|
||||
• Tamsaus žemėlapio veiksena, skirta naudoti naktį;
|
||||
• Galimybė papildyti žemėlapio duomenis visiems, naudojantis įtaisytuoju baziniu redaktoriumi.
|
||||
|
||||
<b>Laisvė yra čia</b>
|
||||
Atraskite savo kelionę ir keliaukite po pasaulį, kuriame privatumas ir bendruomenė yra svarbiausia!
|
||||
@@ -1 +0,0 @@
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps – keliaukite atsijungę ir privačiai
|
||||
@@ -1,9 +0,0 @@
|
||||
• Dados OSM de 6/1
|
||||
• Editor: adição de POIs com mais de uma etiqueta OSM, por exemplo esculturas e pinturas; mais tipos de POI podem ser marcados como vagos/desativados
|
||||
• Adição de ferrovias em miniatura e ETEs
|
||||
• Uso de diálogos Material 3 e fundo mais escuro no modo escuro
|
||||
• Remoção de limites de velocidade fictícios para vias de ligação
|
||||
• Correção de recorte da câmera na navegação
|
||||
• Toque longo menos sensível (modo tela cheia)
|
||||
|
||||
Mais detalhes em codeberg.org/comaps/comaps/releases
|
||||
@@ -1,8 +0,0 @@
|
||||
• Карты OpenStreetMap от 6 января
|
||||
• Редактор: возможность добавления POI, определяемых несколькими тегами, например церквей, мечетей, буддистских храмов..
|
||||
• Добавлены миниатюрные железные дороги и очистные сооружения
|
||||
• Использование диалогов Material 3 и более тёмного фона в тёмном режиме
|
||||
• Удалены фиктивные ограничения скорости для заездов / съездов с шоссе
|
||||
• Менее чувствительное длительное нажатие на экран (переход в полноэкранный режим)
|
||||
|
||||
Подробнее на codeberg.org/comaps/comaps/releases
|
||||
@@ -1,31 +1,31 @@
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nepridobitnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nedobičkonosnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
|
||||
Preberite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Preverite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Pridružite se skupnosti in pomagajte narediti najboljše zemljevidno orodje
|
||||
• Uporabljajte orodje in širite glas o njem
|
||||
• Dajajte povratne informacije in poročajte o napakah
|
||||
• Posodabljajte podatke zemljevida v tem orodju ali na spletni strani OpenStreetMap
|
||||
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potovanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potocanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Spoštovanje zasebnosti</b>: orodje je zasnovano z mislijo na zasebnost – ne prepoznava oseb, ne sledi in ne zbira osebnih podatkov. Brez oglasov.
|
||||
‣ <b>Preprosto in dodelano</b>: nujne zmogljivosti, enostavne za uporabo, ki preprosto delujejo.
|
||||
‣ <b>Prihrani vašo baterijo in prostor.</b>: ne izčrpava vaše baterije kakor druga usmerjevalna orodja. Strnjeni zemljevidi prihranijo dragocen prostor na vašem telefonu.
|
||||
‣ <b>Brezplačno in ustvarjeno v skupnosti</b>: ljudje kot ste vi pomagajo ustvarjati to orodje, tako da dodajajo kraje na OpenStreetMap, preizkušajo in dajejo povratne informacije o zmogljivostih in prispevajo svoje razvijalske sposobnosti in sredstva.
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nepridobitno in popolnoma odprtokodno.</b>
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nedobičkonosno in popolnoma odprtokodno.</b>
|
||||
|
||||
<b>Glavne zmogljivosti</b>:
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovih zemljevidih niso na voljo.
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovoh zemljevidih niso na voljo.
|
||||
• Prikaz za dejavnosti na prostem s poudarjenimi pohodniškimi potmi, tabornimi prostori, vodnimi viri, vrhovi, plastnicami itd.
|
||||
• Pešpoti in kolesarke poti
|
||||
• Kraji zanimanja, npr. restavracije, bencinske črpalke, hoteli, trgovine, znamenitosti in mnogo več
|
||||
• Iščite po imenu, hišnemu naslovu ali po vrsti
|
||||
• Usmerjanje z glasovnimi navodili za hojo, kolesarjenje ali vožnjo avtomobila.
|
||||
• Usmerjanje z glasovnimi obvestili za hojo, kolesarjenje ali vožnjo avtomobila.
|
||||
• Zaznamujte svoje najljubše kraje s preprostim dotikom
|
||||
• Wikipedijini članki brez povezave
|
||||
• Prometna plast podzemne železnice z usmerjanjem
|
||||
• Izvozite ali uvozite zaznamke in sledi v oblikah KML, KMZ, GPX
|
||||
• Temni prikaz za uporabo ponoči
|
||||
• Izboljšajte podatke zemljevida za vse z uporabo vgrajenega urejevalnika
|
||||
• Izboljšajtw podatke zemljevida za vse z uporabo vgrajenega urejevalnika
|
||||
|
||||
<b>Svoboda je tu</b>
|
||||
Odkijte več o vašem potovanju, usmerjajte se po svetu s poudarkom na zasebnosti in skupnostnem delovanju!
|
||||
|
||||
@@ -1 +1 @@
|
||||
Enostavno usmerjanje – Odkrijte več o svojem potovanju – Podprto v skupnosti
|
||||
Enostavno usmerjanje – Odkrij več o svojem potovanju – Podprto v skupnosti
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps – hodi in vozi brez povezave, zasebno
|
||||
CoMaps–Hodi, kolesari, vozi brez povezave, zasebno
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
Besplatna aplikacija otvorenog koda koju održava zajednica i koja se zasniva na OpenStreetMap podacima. Neprofitna, transparentna i ceni vašu privatnost. CoMaps je nastala od aplikacije Organic Maps, koja je nastala od aplikacije Maps.ME.
|
||||
|
||||
Pročitajte o razlozima projekta i njegovog pravca na <b><i>codeberg.org/comaps</i></b>
|
||||
Pridružite se otvorenoj zajednici i pomozite da napravimo najbolju aplikaciju za mape
|
||||
• Koristite aplikaciju i proširite glas o tome
|
||||
• Dajte povratne informacije i prijavite probleme
|
||||
• Ažurirajte podatke na mapi u aplikaciji ili na sajtu OpenStreetMap
|
||||
|
||||
‣ <b>Fokusirano na oflajn rad</b>: Planirajte i upravljajte putovanjem u inostranstvu bez potrebe za mobilnim internetom, tražite usputne tačke dok ste na zabačenom planinskom putu, itd. Sve funkcionalnosti su dizajnirane za rad bez interneta.
|
||||
‣ <b>Poštovanje privatnosti</b>: Aplikacija je osmišljena sa privatnošću korisnika na umu - ne identifikuje ljude, ne prati ili prikuplja lične podatke. Nema reklama.
|
||||
‣ <b>Jednostavno i elegantno</b>: Aplikacija je laka za upotrebu i jednostavno funkcioniše.
|
||||
‣ <b>Čuva vašu bateriju i prostor</b>: Ne troši bateriju kao ostale aplikacije za navigaciju. Kompaktne mape čuvaju dragoceni prostor na vašem telefonu.
|
||||
‣ <b>Otvoreno i napravljeno od strane zajednice</b>: Ljudi poput vas su doprineli razvoju aplikacije dodavanjem lokacija na OpenStreetMap, testiranjem, davanjem povratnih informacija o aplikaciji i pomogli su svojim programerskim veštinama i donacijama.
|
||||
‣ <b>Otvoreno i transparentno donošenje odluka i upotreba donacija, neprofitna i potpuno otvorenog koda.</b>
|
||||
|
||||
<b> Glavne karakteristike </b>:
|
||||
• Preuzmimanje detaljne mape sa lokacijama koje nisu dostupne sa Google mapama
|
||||
• Režim za izlete sa istaknutim planinarskim stazama, kampovima, izvorima vode, planinskim vrhovima, izohipsama itd.
|
||||
• Staze za planinarenje i bicikle
|
||||
• Tačke interesa kao što su restorani, benzinske pumpe, hoteli, prodavnice, znamenitosti i još mnogo toga
|
||||
• Pretraga po nazivu, adresi ili kategorijama
|
||||
• Navigacija sa glasovnim instrukcijama za hodanje, vožnju bicikla ili automobila
|
||||
• Označivanje omiljenih mesta jednim dodirom
|
||||
• Oflajn članci Vikipedije
|
||||
• Tranzitni sloj podzemne železnice sa navigacijom
|
||||
• Snimanje GPS putanja
|
||||
• Uvoz i uvoz markera i putanja u KML, KMZ, GPX formate
|
||||
• Tamni režim za upotrebu tokom noći
|
||||
• Poboljšajte kartu za sve korisnike, koristeći osnovni editor za mape
|
||||
|
||||
<b> Sloboda je ovde </b>
|
||||
Otkrijte svoje putovanje, krećete se sa svetom sa privatnošću i zajednicom na prvom mestu!
|
||||
@@ -1 +0,0 @@
|
||||
Jednostavna navigacija - Saznajte više o svom putovanju - Održava zajednica
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - pešačenje, bicikl, vožnja sa privatnošću
|
||||
@@ -1,36 +0,0 @@
|
||||
تطبيق خرائط مجاني ومفتوح المصدر تقوده المجتمع، مبني على بيانات OpenStreetMap ويعززه الالتزام بالشفافية والخصوصية وعدم الربحية.
|
||||
|
||||
انضم إلى المجتمع وساعد في صنع أفضل تطبيق خرائط
|
||||
• استخدم التطبيق وانشر الكلمة عنه
|
||||
• قدم ملاحظاتك وأبلغ عن المشاكل
|
||||
• حدِّث بيانات الخريطة في التطبيق أو على موقع OpenStreetMap
|
||||
|
||||
<i>ملاحظاتك وتقييماتك الخمس نجوم هي أفضل دعم لنا!</i>
|
||||
|
||||
‣ <b>بسيط ومصقول</b>: ميزات أساسية سهلة الاستخدام تعمل ببساطة.
|
||||
‣ <b>مركز على العمل دون اتصال</b>: خطط وابحث عن طريقك في رحلاتك بالخارج دون الحاجة لخدمة الهاتف، ابحث عن نقاط الطريق خلال رحلات المشي البعيدة، إلخ. جميع وظائف التطبيق مصممة للعمل دون اتصال.
|
||||
‣ <b>يحترم الخصوصية</b>: التطبيق مصمم مع مراعاة الخصوصية - لا يعرّف الأشخاص، لا يتتبع، ولا يجمع المعلومات الشخصية. خالٍ من الإعلانات.
|
||||
‣ <b>يوفر بطاريتك ومساحتك</b>: لا يستنزف بطاريتك مثل تطبيقات الملاحة الأخرى. الخرائط المدمجة توفر مساحة ثمينة على هاتفك.
|
||||
‣ <b>مجاني ومبني بواسطة المجتمع</b>: أشخاص مثلك ساعدوا في بناء التطبيق بإضافة أماكن إلى OpenStreetMap، واختبار الميزات وإعطاء ملاحظات، والمساهبة بمهاراتهم التطويرية وأموالهم.
|
||||
‣ <b>قرارات ومالية مفتوحة وشفافة، غير ربحية ومفتوحة المصدر بالكامل.</b>
|
||||
|
||||
<b>الميزات الرئيسية</b>:
|
||||
• خرائط مفصلة قابلة للتحميل تحتوي على أماكن غير متوفرة في خرائط جوجل
|
||||
• وضع خارجي مع مسارات المشي المميزة، مواقع التخييم، مصادر المياه، القمم، خطوط الكنتور، إلخ
|
||||
• مسارات المشي ومسارات الدراجات
|
||||
• نقاط الاهتمام مثل المطاعم، محطات الوقود، الفنادق، المتاجر، المعالم السياحية والكثير غيرها
|
||||
• البحث بالاسم أو العنوان أو فئة نقطة الاهتمام
|
||||
• ملاحة مع إعلانات صوتية للمشي، ركوب الدراجات، أو القيادة
|
||||
• وضع إشارة على أماكنك المفضلة بنقرة واحدة
|
||||
• مقالات ويكيبيديا دون اتصال
|
||||
• طبقة مترو الأنفاق وإرشادات الاتجاهات
|
||||
• تسجيل المسار
|
||||
• تصدير واستيراد العلامات والمسارات بصيغ KML، KMZ، GPX
|
||||
• وضع مظلم للاستخدام خلال الليل
|
||||
• تحسين بيانات الخريطة للجميع باستخدام محرر مدمج أساسي
|
||||
• دعم Android Auto
|
||||
|
||||
يرجى الإبلاغ عن مشاكل التطبيق، اقتراح أفكار والانضمام إلى مجتمعنا على موقع <b><i>comaps.app</i></b>.
|
||||
|
||||
<b>الحرية هنا</b>
|
||||
اكتشف رحلتك، ابحر في العالم مع وضع الخصوصية والمجتمع في المقدمة!
|
||||
@@ -1 +0,0 @@
|
||||
تنقل سهل في الخريطة - اكتشف المزيد من رحلتك - مدعوم من المجتمع
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - التنقل مع الخصوصية
|
||||
@@ -3,7 +3,7 @@ Eine von der Community betriebene, kostenlose Open-Source Karten App, die auf Op
|
||||
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
• Nutze die App und erzähle anderen davon
|
||||
• Gib Feedback und melde Probleme
|
||||
• Aktualisiere Kartendaten in der App oder auf der OpenStreetMap-Webseite
|
||||
• Aktualisiere Kartendaten in der App oder auf der OpenStreetMap Website
|
||||
|
||||
<i>Dein Feedback und deine 5-Sterne-Bewertung sind die beste Unterstützung für uns!</i>
|
||||
|
||||
@@ -12,7 +12,7 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
‣ <b>Datenschutz ist uns wichtig!</b>: Die App wurde mit Fokus auf Privatsphäre entwickelt – kein Tracking, keine Erfassung persönlicher Daten, keine Werbung.
|
||||
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf Deinem Gerät.
|
||||
‣ <b>Kostenlos und von der Community entwickelt</b>: Menschen wie du haben geholfen, die App zu entwickeln – durch das Hinzufügen von Orten zu OpenStreetMap, Testen von neuen Funktionen, Softwareentwicklung oder Spenden.
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open Source.</b>
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open Source</b>
|
||||
|
||||
<b>Hauptfunktionen</b>:
|
||||
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
||||
@@ -24,13 +24,13 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
• Lesezeichen mit einem einzigen Tippen speichern
|
||||
• Offline verfügbare Wikipedia-Artikel
|
||||
• U- und S-Bahn-Netze
|
||||
• Aufzeichnen von GPS-Tracks
|
||||
• Aufzeichnen von GPS Tracks
|
||||
• Import und Export von Favoriten und Routen im KML-, KMZ- oder GPX-Format
|
||||
• Dunkler Modus für die Nutzung bei Nacht
|
||||
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
|
||||
• Unterstützung für Android Auto
|
||||
|
||||
Bitte melde Probleme, schlage neue Funktionen vor und werde Teil der Community auf unserer Website: <b><i>comaps.app/de/</i></b>
|
||||
Bitte melde Probleme, schlage neue Funktionen vor und werde Teil der Community auf unserer Website: <b><i>comaps.app</i></b>
|
||||
|
||||
<b>Freiheit beginnt hier</b>
|
||||
Entdecke deine Reise, wobei Datenschutz und Gemeinschaft im Vordergrund stehen!
|
||||
<b>Entdecke die Unabhängigkeit</b>
|
||||
Entdecke deine Reise – navigiere in der Welt mit Datenschutz!
|
||||
|
||||
@@ -1 +1 @@
|
||||
Leichte Navigation – Erlebe mehr von deiner Reise – Community-unterstützt
|
||||
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
A community led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit.
|
||||
|
||||
Join the community and help make the best maps app
|
||||
• Use the app and spread the word about it
|
||||
• Give feedback and report issues
|
||||
• Update map data in the app or on the OpenStreetMap website
|
||||
|
||||
<i>Your feedback and 5-star reviews are the best support for us!</i>
|
||||
|
||||
‣ <b>Simple and Polished</b>: essential easy to use features that just work.
|
||||
‣ <b>Offline focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||
‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - it does not identify people, does not track, and does not collect personal information. Ad free.
|
||||
‣ <b>Saves Your Battery and Space</b>: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||
‣ <b>Free and Built by the Community</b>: People like you helped build the app by adding places to OpenStreetMap, testing and giving feedback on features and contributing their development skills and money.
|
||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||
|
||||
<b>Main Features</b>:
|
||||
• Downloadable detailed maps with places which are not available with Google Maps
|
||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
||||
• Walking paths and cycleways
|
||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
|
||||
• Search by name or an address or by point of interest category
|
||||
• Navigation with voice announcements for walking, biking, or driving
|
||||
• Bookmark your favorite places with a single tap
|
||||
• Offline Wikipedia articles
|
||||
• Subway transit layer and directions
|
||||
• Track recording
|
||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
||||
• A dark mode to use during the night
|
||||
• Improve map data for everyone using a basic built-in editor
|
||||
• Android Auto support
|
||||
|
||||
Please report app issues, suggest ideas and join our community at <b><i>comaps.app</i></b> website.
|
||||
|
||||
<b>Freedom Is Here</b>
|
||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||
@@ -68,4 +68,4 @@ Por favor, informa de errores, sugiere ideas y únete a nuestra comunidad en el
|
||||
|
||||
<b>La Libertad Está Aquí</b>
|
||||
|
||||
¡Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad!
|
||||
Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad.
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
Besplatna aplikacija za karte otvorenog koda koju vodi zajednica, a temelji se na podacima OpenStreetMapa, a pojačana je predanošću transparentnosti, privatnosti i neprofitnosti.
|
||||
Besplatna aplikacija otvorenog koda koju vodi zajednica i temelji se na podacima OpenStreetMap-a, usmjerana transparentnosti, privatnosti i neprofitnosti.
|
||||
|
||||
Pridružite se zajednici i pomozite u izradi najbolje aplikacije za karte
|
||||
• Koristite aplikaciju i širite vijest o njoj
|
||||
Pridružite se otvorenoj zajednici i pomozite izraditi najbolju aplikaciju za karte
|
||||
• Koristite aplikaciju i proširite glas o njoj
|
||||
• Dajte povratne informacije i prijavite probleme
|
||||
• Ažurirajte podatke karte u aplikaciji ili na web stranici OpenStreetMap
|
||||
• Ažurirajte podatke na karti u aplikaciji ili na web stranici OpenStreetMap-a
|
||||
|
||||
<i>Vaše povratne informacije i recenzije s 5 zvjezdica najbolja su nam podrška!</i>
|
||||
|
||||
‣ <b>Jednostavno i dotjerano</b>: bitne značajke koje su jednostavne za korištenje i jednostavno rade.
|
||||
‣ <b>Usmjereno na rad izvan mreže</b>: Planirajte i upravljajte svojim putovanjem u inozemstvo bez potrebe za mobilnom mrežom, pretražujte točke puta tijekom udaljenog planinarenja itd. Sve funkcije aplikacije dizajnirane su za rad izvan mreže.
|
||||
‣ <b>Poštivanje privatnosti</b>: Aplikacija je dizajnirana imajući na umu privatnost - ne identificira ljude, ne prati i ne prikuplja osobne podatke. Bez oglasa.
|
||||
‣ <b>Štedi bateriju i prostor</b>: Ne prazni bateriju kao druge navigacijske aplikacije. Kompaktne karte štede dragocjeni prostor na vašem telefonu.
|
||||
‣ <b>Besplatno i izrađeno od strane zajednice</b>: Ljudi poput vas pomogli su u izgradnji aplikacije dodavanjem mjesta u OpenStreetMap, testiranjem i davanjem povratnih informacija o značajkama te doprinosom svojim razvojnim vještinama i novcem.
|
||||
‣ <b>Otvoreno i transparentno donošenje odluka i financije, neprofitno i potpuno otvorenog koda.</b>
|
||||
‣ <b>Jednostavna i dotjerana</b>: aplikacija je trivijalna za korištenje i jednostavno radi.
|
||||
‣ <b>Fokusirana na Offline rad</b>: Planirajte i upravljajte svojim putovanjem u inozemstvo bez potrebe za mobilnom uslugom, tražite putne točke dok ste na udaljenom pješačenju itd. Sve funkcije aplikacije dizajnirane su za offline rad.
|
||||
‣ <b>Poštivanje privatnosti</b>: Aplikacija je dizajnirana imajući na umu privatnost - ne identificira ljude, ne prati i ne prikuplja osobne podatke. Bez reklama.
|
||||
‣ <b>Štedi vašu bateriju i prostor</b>: Ne troši bateriju kao druge navigacijske aplikacije. Kompaktne karte štede dragocjeni prostor na vašem telefonu.
|
||||
‣ <b>Otvorena i izrađena od strane zajednice</b>: Ljudi poput vas pomogli su izraditi aplikaciju dodavanjem lokacija na OpenStreetMap-u, testiranjem i davanjem povratnih informacija o aplikaciji te doprinoseći svojim razvojnim vještinama i novcem.
|
||||
‣ <b>Otvoreno i transparentno donošenje odluka i korištenja financija, Neprofitna i potpuno Otvorenog koda.</b>
|
||||
|
||||
<b>Glavne značajke</b>:
|
||||
• Detaljne karte za preuzimanje s mjestima koja nisu dostupna na Google kartama
|
||||
• Vanjski način rada s označenim planinarskim stazama, kampovima, izvorima vode, vrhovima, konturnim linijama itd.
|
||||
• Preuzimanje detaljnih karti s lokacijama koje nisu dostupne s Google kartama
|
||||
• Karte za izlete s istaknutim pješačkim stazama, kampovima, izvorima vode, planinskim vrhovima, konturnim linijama itd.
|
||||
• Pješačke i biciklističke staze
|
||||
• Znamenitosti poput restorana, benzinskih postaja, hotela, trgovina, znamenitosti i mnogih drugih
|
||||
• Pretraživanje po imenu ili adresi ili po kategoriji znamenitosti
|
||||
• Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili vožnju
|
||||
• Označavanje omiljenih mjesta jednim dodirom
|
||||
• Članci na Wikipediji izvan mreže
|
||||
• Sloj i upute za podzemnu željeznicu
|
||||
• Snimanje tragova
|
||||
• Izvoz i uvoz oznaka i tragova u KML, KMZ, GPX formatima
|
||||
• Točke interesa kao što su restorani, benzinske crpke, hoteli, trgovine, vidikovci i još mnogo toga
|
||||
• Pretražujte po nazivu ili adresi ili po kategoriji interesa
|
||||
• Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili automobilom
|
||||
• Obilježite svoja omiljena mjesta jednim dodirom
|
||||
• Offline članci Wikipedije
|
||||
• Tranzitni sloj podzemne željeznice sa navigacijom
|
||||
• Snimanje GPS tragova
|
||||
• Izvoz i uvoz oznaka i staza u KML, KMZ, i GPX formatima
|
||||
• Tamni način rada za korištenje tijekom noći
|
||||
• Poboljšajte podatke karte za sve pomoću osnovnog ugrađenog uređivača
|
||||
• Podrška za Android Auto
|
||||
• Poboljšajte kartu za sve korisnike, koristeći osnovni ugrađeni uređivač karte
|
||||
• Android Auto podrška
|
||||
|
||||
Prijavite probleme s aplikacijom, predložite ideje i pridružite se našoj zajednici na web stranici <b><i>comaps.app</i></b>.
|
||||
|
||||
<b>Sloboda je ovdje</b>
|
||||
Otkrijte svoje putovanje, snađite se u svijetu s privatnošću i zajednicom u prvom planu!
|
||||
Otkrijte svoje putovanje, navigirajte svijetom s privatnošću i zajednicom na prvom mjestu!
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
Bendruomenės vystoma nemokama atvirojo kodo žemėlapių programa, pagrįsta „OpenStreetMap“ duomenimis ir sustiprinta įsipareigojimu užtikrinti skaidrumą, privatumą ir pelno nesiekimą.
|
||||
|
||||
Prisijunkite prie bendruomenės ir padėkite sukurti geriausią žemėlapių programą
|
||||
• Naudokitės programa ir paskleiskite žinią apie ją
|
||||
• Teikite atsiliepimus ir praneškite apie problemas
|
||||
• Atnaujinkite žemėlapių duomenis programoje arba „OpenStreetMap“ svetainėje
|
||||
|
||||
<i>Jūsų atsiliepimai ir 5 žvaigždučių vertinimai yra geriausias palaikymas mums!</i>
|
||||
|
||||
‣ <b>Paprasta ir išbaigta</b>: esminės, lengvai naudojamos funkcijos, kurios tiesiog veikia.
|
||||
‣ <b>Skirta naudoti neprisijungus prie interneto</b>: planuokite maršrutus ir keliaukite užsienyje be mobiliojo ryšio, ieškokite kelionės taškų tolimuose žygiuose ir pan. Visos programos funkcijos yra pritaikytos veikti be interneto ryšio.
|
||||
‣ <b>Gerbia privatumą</b>: programėlė sukurta, teikiant prioritetą privatumui: neidentifikuoja žmonių, neseka ir nerenka asmeninės informacijos. Be reklamų.
|
||||
‣ <b>Taupo bateriją ir vietą</b>: neišsekina baterijos kaip kitos navigacijos programos. Kompaktiški žemėlapiai tausoja vietą jūsų telefone.
|
||||
‣ <b>Nemokama ir kuriama bendruomenės</b>: paprasti žmonės – kaip jūs – padėjo sukurti šią programą, pildydami „OpenStreetMap“ žemėlapį, išbandydami ir pateikdami atsiliepimus apie funkcijas bei prisidėdami savo programavimo įgūdžiais ir pinigais.
|
||||
‣ <b>Atviras ir skaidrus sprendimų priėmimas ir finansai, ne pelno siekianti ir visiškai atviro kodo programa.</b>
|
||||
|
||||
<b>Pagrindinės funkcijos</b>:
|
||||
• Atsisiunčiami išsamūs žemėlapiai su vietomis, kurių nėra „Google Maps“;
|
||||
• Žygių pėsčiomis veiksena su pažymėtais pėsčiųjų takais, stovyklavietėmis, vandens šaltiniais, kalnų viršūnėmis, reljefo linijomis ir kt.;
|
||||
• Pėsčiųjų ir dviračių takai;
|
||||
• Potencialūs kelionės taškai, kaip antai restoranai, degalinės, viešbučiai, parduotuvės, lankytinos vietos ir daugelis kitų;
|
||||
• Paieška pagal pavadinimą, adresą arba lankytinos vietos kategoriją;
|
||||
• Navigacija su balso instrukcijomis pėstiesiems, dviratininkams ir motorinio transporto vairuotojams;
|
||||
• Mėgstamų vietų įsiminimas vienu bakstelėjimu;
|
||||
• „Vikipedijos“ straipsniai, prieinami neprisijungus prie interneto;
|
||||
• Kelionių metro sluoksnis ir maršrutai;
|
||||
• Trasų įrašymas;
|
||||
• Žymių ir trasų eksportavimas ir importavimas KML, KMZ, GPX formatais;
|
||||
• Tamsaus žemėlapio veiksena, skirta naudoti naktį;
|
||||
• Galimybė papildyti žemėlapio duomenis visiems, naudojantis įtaisytuoju baziniu redaktoriumi;
|
||||
• „Android Auto“ palaikymas.
|
||||
|
||||
Praneškite apie programos problemas, siūlykite idėjas ir prisijunkite prie mūsų bendruomenės svetainėje <b><i>comaps.app</i></b>.
|
||||
|
||||
<b>Laisvė yra čia</b>
|
||||
Atraskite savo kelionę ir keliaukite po pasaulį, kuriame privatumas ir bendruomenė yra svarbiausia!
|
||||
@@ -1 +0,0 @@
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps – naviguokite privačiai
|
||||
@@ -1 +1 @@
|
||||
Enostavno usmerjanje – Odkrijte več o svojem potovanju – Podprto v skupnosti
|
||||
Enostavno usmerjanje – Odkrij več o svojem potovanju – Podprto v skupnosti
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Usmerjajte se zasebno
|
||||
CoMaps - Usmerjajte zasebno
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Проста навігація по мапі - Дізнайтеся більше про свою подорож - Розроблено спільнотою
|
||||
@@ -1 +0,0 @@
|
||||
Приватна навігація
|
||||
@@ -400,14 +400,8 @@
|
||||
android:name="app.organicmaps.settings.SettingsActivity"
|
||||
android:configChanges="orientation|screenLayout|screenSize"
|
||||
android:screenOrientation="fullUser"
|
||||
android:exported="true"
|
||||
android:label="@string/settings"
|
||||
android:parentActivityName="app.organicmaps.MwmActivity" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
android:parentActivityName="app.organicmaps.MwmActivity" />
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.help.HelpActivity"
|
||||
|
||||
@@ -18,7 +18,6 @@ import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.CallSuper;
|
||||
@@ -26,15 +25,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.progressindicator.LinearProgressIndicator;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.dialog.CustomMapServerDialog;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
import app.organicmaps.intent.Factory;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
@@ -47,7 +38,11 @@ import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.progressindicator.LinearProgressIndicator;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -59,7 +54,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
private MaterialTextView mTvMessage;
|
||||
private LinearProgressIndicator mProgress;
|
||||
private MaterialButton mBtnDownload;
|
||||
private MaterialButton mBtnAdvanced;
|
||||
private MaterialCheckBox mChbDownloadCountry;
|
||||
|
||||
private String mCurrentCountry;
|
||||
@@ -273,14 +267,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
mProgress = findViewById(R.id.progressbar);
|
||||
mBtnDownload = findViewById(R.id.btn_download_resources);
|
||||
mChbDownloadCountry = findViewById(R.id.chb_download_country);
|
||||
mBtnAdvanced = findViewById(R.id.btn_advanced);
|
||||
|
||||
mBtnAdvanced.setOnClickListener(v -> {
|
||||
CustomMapServerDialog.show(this, url -> {
|
||||
prepareFilesDownload(false);
|
||||
});
|
||||
});
|
||||
mBtnAdvanced.setEnabled(true);
|
||||
|
||||
mBtnListeners = new View.OnClickListener[BTN_COUNT];
|
||||
mBtnNames = new String[BTN_COUNT];
|
||||
@@ -305,11 +291,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
mBtnDownload.setOnClickListener(mBtnListeners[action]);
|
||||
mBtnDownload.setText(mBtnNames[action]);
|
||||
|
||||
// Allow changing server only when idle or after an error.
|
||||
boolean advancedEnabled = (action == DOWNLOAD || action == TRY_AGAIN || action == RESUME);
|
||||
mBtnAdvanced.setEnabled(advancedEnabled);
|
||||
mBtnAdvanced.setAlpha(advancedEnabled ? 1f : 0.5f);
|
||||
}
|
||||
|
||||
private void doDownload()
|
||||
@@ -378,9 +359,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void finishFilesDownload(int result)
|
||||
{
|
||||
mBtnAdvanced.setEnabled(true);
|
||||
mBtnAdvanced.setAlpha(1f);
|
||||
|
||||
if (result == ERR_NO_MORE_FILES)
|
||||
{
|
||||
// World and WorldCoasts has been downloaded, we should register maps again to correctly add them to the model.
|
||||
@@ -446,20 +424,16 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
default -> throw new AssertionError("Unexpected result code = " + result);
|
||||
};
|
||||
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this)
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(titleId)
|
||||
.setMessage(messageId)
|
||||
.setCancelable(true)
|
||||
.setOnCancelListener((dialog) -> setAction(RESUME))
|
||||
.setOnCancelListener((dialog) -> setAction(PAUSE))
|
||||
.setPositiveButton(R.string.try_again,
|
||||
(dialog, which) -> {
|
||||
setAction(TRY_AGAIN);
|
||||
onTryAgainClicked();
|
||||
})
|
||||
.setNegativeButton(R.string.cancel,
|
||||
(dialog, which) -> {
|
||||
setAction(RESUME);
|
||||
})
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
.show();
|
||||
}
|
||||
|
||||
@@ -107,7 +107,6 @@ import app.organicmaps.sdk.routing.RoutingOptions;
|
||||
import app.organicmaps.sdk.search.SearchEngine;
|
||||
import app.organicmaps.sdk.settings.RoadType;
|
||||
import app.organicmaps.sdk.settings.UnitLocale;
|
||||
import app.organicmaps.sdk.sound.TtsPlayer;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.LocationUtils;
|
||||
import app.organicmaps.sdk.util.PowerManagment;
|
||||
@@ -132,6 +131,8 @@ import app.organicmaps.widget.placepage.PlacePageViewModel;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -431,7 +432,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
|
||||
dismissLocationErrorDialog();
|
||||
mLocationErrorDialog = new MaterialAlertDialogBuilder(MwmActivity.this)
|
||||
mLocationErrorDialog = new MaterialAlertDialogBuilder(MwmActivity.this, R.style.MwmTheme_AlertDialog)
|
||||
.setMessage(R.string.unknown_current_position)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -654,7 +655,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
else
|
||||
{
|
||||
dismissAlertDialog();
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this)
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.message_invalid_feature_position)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
@@ -711,6 +712,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (!TextUtils.isEmpty(appName))
|
||||
{
|
||||
setTitle(appName);
|
||||
((MaterialTextView) mPointChooser.findViewById(R.id.title)).setText(appName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1153,7 +1155,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
if (type == IsolinesState.EXPIREDDATA)
|
||||
{
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this)
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_update_maps)
|
||||
.setMessage(R.string.isolines_activation_error_dialog)
|
||||
.setPositiveButton(
|
||||
@@ -1772,7 +1774,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
dismissAlertDialog();
|
||||
mAlertDialog =
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.unable_to_calc_alert_title)
|
||||
.setMessage(R.string.unable_to_calc_alert_subtitle)
|
||||
.setPositiveButton(R.string.settings,
|
||||
@@ -1795,7 +1797,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
builder.append(getString(resId)).append("\n\n");
|
||||
|
||||
dismissAlertDialog();
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this)
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.dialog_routing_disclaimer_title)
|
||||
.setMessage(builder.toString())
|
||||
.setCancelable(false)
|
||||
@@ -1811,26 +1813,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
return false;
|
||||
}
|
||||
|
||||
private void deliverTtsMessage()
|
||||
{
|
||||
if (Config.isTtsMessageDelivered())
|
||||
return;
|
||||
|
||||
String languageDisplayName = TtsPlayer.INSTANCE.getLanguageDisplayName();
|
||||
|
||||
if (languageDisplayName != null)
|
||||
{
|
||||
String navigationStartMessage = getResources().getString(R.string.navigation_start_tts_message);
|
||||
navigationStartMessage += languageDisplayName;
|
||||
Toast.makeText(this, navigationStartMessage, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
else
|
||||
Toast.makeText(this, getResources().getString(R.string.navigation_start_tts_disabled_message), Toast.LENGTH_LONG)
|
||||
.show();
|
||||
|
||||
Config.setTtsMessageDelivered();
|
||||
}
|
||||
|
||||
private boolean showStartPointNotice()
|
||||
{
|
||||
final RoutingController controller = RoutingController.get();
|
||||
@@ -1844,7 +1826,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
return true;
|
||||
|
||||
final MapObject endPoint = Objects.requireNonNull(controller.getEndPoint());
|
||||
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
|
||||
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.p2p_only_from_current)
|
||||
.setMessage(R.string.p2p_reroute_from_current)
|
||||
.setCancelable(false)
|
||||
@@ -2038,7 +2020,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
mPreciseLocationDialogShown = true;
|
||||
final MaterialAlertDialogBuilder builder =
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle("⚠ " + getString(R.string.limited_accuracy))
|
||||
.setMessage(R.string.precise_location_is_disabled_long_text)
|
||||
.setNegativeButton(R.string.close, (dialog, which) -> dialog.dismiss())
|
||||
@@ -2072,7 +2054,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
return;
|
||||
}
|
||||
|
||||
mLocationErrorDialog = new MaterialAlertDialogBuilder(this)
|
||||
mLocationErrorDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.enable_location_services)
|
||||
.setMessage(R.string.location_is_disabled_long_text)
|
||||
.setOnDismissListener(dialog -> mLocationErrorDialog = null)
|
||||
@@ -2165,7 +2147,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
return;
|
||||
}
|
||||
|
||||
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
|
||||
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.enable_location_services)
|
||||
.setMessage(R.string.location_is_disabled_long_text)
|
||||
.setOnDismissListener(dialog -> mLocationErrorDialog = null)
|
||||
@@ -2207,8 +2189,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (!showRoutingDisclaimer())
|
||||
return;
|
||||
|
||||
deliverTtsMessage();
|
||||
|
||||
closeFloatingPanels();
|
||||
setFullscreen(false);
|
||||
RoutingController.get().start();
|
||||
@@ -2251,7 +2231,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
dismissAlertDialog();
|
||||
final MaterialAlertDialogBuilder builder =
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.current_location_unknown_error_title)
|
||||
.setCancelable(true)
|
||||
.setMessage(R.string.power_save_dialog_summary)
|
||||
@@ -2276,7 +2256,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
dismissAlertDialog();
|
||||
mAlertDialog =
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.load_kmz_title)
|
||||
.setMessage(getString(R.string.unknown_file_type, uri))
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -2293,7 +2273,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
dismissAlertDialog();
|
||||
mAlertDialog =
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.load_kmz_title)
|
||||
.setMessage(getString(R.string.failed_to_open_file, uri, error))
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -2315,7 +2295,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
public void onBookmarksFileImportFailed()
|
||||
{
|
||||
dismissAlertDialog();
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this)
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.load_kmz_title)
|
||||
.setMessage(R.string.load_kmz_failed)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -2576,7 +2556,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void reportUnsupported()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(this)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setMessage(R.string.unsupported_phone)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.close, (dlg, which) -> this.moveTaskToBack(true))
|
||||
|
||||
@@ -120,7 +120,7 @@ public class SplashActivity extends AppCompatActivity
|
||||
private void showFatalErrorDialog(@StringRes int titleId, @StringRes int messageId, Exception error)
|
||||
{
|
||||
mCanceled = true;
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_M3_AlertDialog)
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(titleId)
|
||||
.setMessage(messageId)
|
||||
.setPositiveButton(
|
||||
|
||||
@@ -60,14 +60,14 @@ public enum BookmarksSharingHelper
|
||||
case BookmarkSharingResult.SUCCESS ->
|
||||
SharingUtils.shareBookmarkFile(context, launcher, result.getSharingPath(), result.getMimeType());
|
||||
case BookmarkSharingResult.EMPTY_CATEGORY ->
|
||||
new MaterialAlertDialogBuilder(context)
|
||||
new MaterialAlertDialogBuilder(context, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.bookmarks_error_title_share_empty)
|
||||
.setMessage(R.string.bookmarks_error_message_share_empty)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
case BookmarkSharingResult.ARCHIVE_ERROR, BookmarkSharingResult.FILE_ERROR ->
|
||||
{
|
||||
new MaterialAlertDialogBuilder(context)
|
||||
new MaterialAlertDialogBuilder(context, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.dialog_routing_system_error)
|
||||
.setMessage(R.string.bookmarks_error_message_share_general)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
|
||||
@@ -42,7 +42,6 @@ public class ChooseBookmarkCategoryFragment
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
|
||||
{
|
||||
View root = inflater.inflate(R.layout.choose_bookmark_category_fragment, container, false);
|
||||
getDialog().getWindow().setBackgroundDrawableResource(R.drawable.bg_transparent_dlg);
|
||||
mRecycler = root.findViewById(R.id.recycler);
|
||||
mRecycler.setLayoutManager(new LinearLayoutManager(requireActivity()));
|
||||
return root;
|
||||
|
||||
@@ -77,7 +77,6 @@ public class ChooseBookmarksSortingTypeFragment
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
getDialog().getWindow().setBackgroundDrawableResource(R.drawable.bg_transparent_dlg);
|
||||
|
||||
final Bundle args = getArguments();
|
||||
if (args == null)
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
package app.organicmaps.dialog;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
|
||||
public final class CustomMapServerDialog
|
||||
{
|
||||
public interface OnUrlAppliedListener
|
||||
{
|
||||
void onUrlApplied(@NonNull String url);
|
||||
}
|
||||
|
||||
private CustomMapServerDialog() {}
|
||||
|
||||
public static void show(@NonNull Context context,
|
||||
@Nullable OnUrlAppliedListener listener)
|
||||
{
|
||||
View dialogView = LayoutInflater.from(context)
|
||||
.inflate(R.layout.dialog_custom_map_server, null);
|
||||
TextInputLayout til = dialogView.findViewById(R.id.til_custom_map_server);
|
||||
TextInputEditText edit = dialogView.findViewById(R.id.edit_custom_map_server);
|
||||
|
||||
SharedPreferences prefs =
|
||||
PreferenceManager.getDefaultSharedPreferences(context);
|
||||
String current = prefs.getString(context.getString(R.string.pref_custom_map_download_url), "");
|
||||
edit.setText(current);
|
||||
|
||||
MaterialAlertDialogBuilder builder =
|
||||
new MaterialAlertDialogBuilder(context)
|
||||
.setTitle(R.string.download_resources_custom_url_title)
|
||||
.setMessage(R.string.download_resources_custom_url_message)
|
||||
.setView(dialogView)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.save, null);
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.setOnShowListener(dlg -> {
|
||||
Button ok = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||
ok.setOnClickListener(v -> {
|
||||
String url = edit.getText() != null ? edit.getText().toString().trim() : "";
|
||||
|
||||
if (!url.isEmpty()
|
||||
&& !url.startsWith("http://")
|
||||
&& !url.startsWith("https://"))
|
||||
{
|
||||
til.setError(context.getString(R.string.download_resources_custom_url_error_scheme));
|
||||
return;
|
||||
}
|
||||
|
||||
til.setError(null);
|
||||
|
||||
String normalizedUrl = Framework.normalizeServerUrl(url);
|
||||
|
||||
prefs.edit()
|
||||
.putString(context.getString(R.string.pref_custom_map_download_url), normalizedUrl)
|
||||
.apply();
|
||||
|
||||
// Apply to native
|
||||
Framework.applyCustomMapDownloadUrl(context, normalizedUrl);
|
||||
|
||||
if (listener != null)
|
||||
listener.onUrlApplied(normalizedUrl);
|
||||
|
||||
dialog.dismiss();
|
||||
});
|
||||
});
|
||||
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment
|
||||
negativeButtonText = args.getString(ARG_NEGATIVE_BUTTON);
|
||||
}
|
||||
|
||||
AlertDialog editTextDialog = new MaterialAlertDialogBuilder(requireActivity())
|
||||
AlertDialog editTextDialog = new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setView(buildView())
|
||||
.setNegativeButton(negativeButtonText, null)
|
||||
.setPositiveButton(positiveButtonText, null)
|
||||
@@ -152,7 +152,7 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment
|
||||
if (mInputValidator != null)
|
||||
{
|
||||
final String maybeError = mInputValidator.validate(activity, input);
|
||||
mEtInputLayout.setError(maybeError);
|
||||
mEtInputLayout.getEditText().setError(maybeError);
|
||||
mEtInputLayout.requestFocus();
|
||||
return maybeError == null;
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
{
|
||||
if (RoutingController.get().isNavigating())
|
||||
{
|
||||
new MaterialAlertDialogBuilder(adapter.mActivity)
|
||||
new MaterialAlertDialogBuilder(adapter.mActivity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_delete_map)
|
||||
.setMessage(R.string.downloader_delete_map_while_routing_dialog)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -133,7 +133,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
return;
|
||||
}
|
||||
|
||||
new MaterialAlertDialogBuilder(adapter.mActivity)
|
||||
new MaterialAlertDialogBuilder(adapter.mActivity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_delete_map)
|
||||
.setMessage(R.string.downloader_delete_map_dialog)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
||||
@@ -49,7 +49,7 @@ public class MapManagerHelper
|
||||
return;
|
||||
}
|
||||
|
||||
final AlertDialog dlg = new MaterialAlertDialogBuilder(activity)
|
||||
final AlertDialog dlg = new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.country_status_download_failed)
|
||||
.setMessage(getErrorCodeStrRes(errorData.errorCode))
|
||||
.setNegativeButton(R.string.cancel,
|
||||
@@ -72,7 +72,7 @@ public class MapManagerHelper
|
||||
|
||||
private static void notifyNoSpaceInternal(Activity activity)
|
||||
{
|
||||
new MaterialAlertDialogBuilder(activity)
|
||||
new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_no_space_title)
|
||||
.setMessage(R.string.downloader_no_space_message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
@@ -123,7 +123,7 @@ public class MapManagerHelper
|
||||
return false;
|
||||
}
|
||||
|
||||
new MaterialAlertDialogBuilder(activity)
|
||||
new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.download_over_mobile_header)
|
||||
.setMessage(R.string.download_over_mobile_message)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
||||
@@ -53,6 +53,7 @@ public class AdvancedTimetableFragment extends BaseMwmFragment implements View.O
|
||||
public void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
refreshTimetables();
|
||||
}
|
||||
|
||||
private void initViews(View view)
|
||||
|
||||
@@ -196,8 +196,10 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
{
|
||||
final Context context = mInputBuildingLevels.getContext();
|
||||
final boolean isValid = Editor.nativeIsLevelValid(s.toString());
|
||||
mInputBuildingLevels.setError(isValid ? null : context.getString(R.string.error_enter_correct_storey_number,
|
||||
Editor.nativeGetMaxEditableBuildingLevels()));
|
||||
UiUtils.setInputError(mInputBuildingLevels,
|
||||
isValid ? null
|
||||
: context.getString(R.string.error_enter_correct_storey_number,
|
||||
Editor.nativeGetMaxEditableBuildingLevels()));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -493,7 +495,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
}
|
||||
});
|
||||
|
||||
return new MaterialAlertDialogBuilder(requireActivity())
|
||||
return new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.editor_socket)
|
||||
.setView(dialogView)
|
||||
.setPositiveButton(R.string.save,
|
||||
@@ -946,7 +948,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
|
||||
|
||||
if (Editor.nativeAreSomeFeatureChangesUploaded())
|
||||
if (Editor.nativeIsMapObjectUploaded())
|
||||
{
|
||||
mReset.setText(R.string.editor_place_doesnt_exist);
|
||||
return;
|
||||
@@ -964,7 +966,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
private void reset()
|
||||
{
|
||||
if (Editor.nativeAreSomeFeatureChangesUploaded())
|
||||
if (Editor.nativeIsMapObjectUploaded())
|
||||
{
|
||||
placeDoesntExist();
|
||||
return;
|
||||
@@ -997,7 +999,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
message = R.string.editor_reset_edits_message;
|
||||
}
|
||||
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(message)
|
||||
.setPositiveButton(title,
|
||||
(dialog, which) -> {
|
||||
@@ -1020,7 +1022,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
private void placeDisused()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.editor_mark_business_vacant_title)
|
||||
.setMessage(R.string.editor_mark_business_vacant_description)
|
||||
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {
|
||||
|
||||
@@ -237,7 +237,6 @@ public class EditorHostFragment
|
||||
for (LocalizedName name : sNames)
|
||||
languages.add(name.lang);
|
||||
args.putStringArrayList(LanguagesFragment.EXISTING_LOCALIZED_NAMES, languages);
|
||||
args.putBoolean(LanguagesFragment.IS_MAP_LANGUAGE_SELECTION, false);
|
||||
editWithFragment(Mode.LANGUAGE, R.string.choose_language, args, LanguagesFragment.class, false);
|
||||
}
|
||||
|
||||
@@ -353,7 +352,7 @@ public class EditorHostFragment
|
||||
|
||||
private void processNoFeatures()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloader_no_space_title)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
@@ -387,7 +386,7 @@ public class EditorHostFragment
|
||||
|
||||
private void showNoobDialog()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.editor_share_to_all_dialog_title)
|
||||
.setMessage(getString(R.string.editor_share_to_all_dialog_message_1) + " "
|
||||
+ getString(R.string.editor_share_to_all_dialog_message_2))
|
||||
|
||||
@@ -155,7 +155,7 @@ public class FeatureCategoryFragment
|
||||
// Duplicate of showNoobDialog()
|
||||
private void showNoteConfirmationDialog(double lat, double lon, String noteText)
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.editor_share_to_all_dialog_title)
|
||||
.setMessage(getString(R.string.editor_share_to_all_dialog_message_1) + " "
|
||||
+ getString(R.string.editor_share_to_all_dialog_message_2))
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
package app.organicmaps.editor;
|
||||
|
||||
import static app.organicmaps.sdk.editor.data.Language.DEFAULT_LANG_CODE;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.os.ConfigurationCompat;
|
||||
import androidx.core.os.LocaleListCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseMwmRecyclerFragment;
|
||||
import app.organicmaps.sdk.editor.Editor;
|
||||
import app.organicmaps.sdk.editor.data.Language;
|
||||
@@ -25,7 +21,6 @@ import java.util.Set;
|
||||
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
|
||||
{
|
||||
final static String EXISTING_LOCALIZED_NAMES = "ExistingLocalizedNames";
|
||||
final static String IS_MAP_LANGUAGE_SELECTION = "IsMapLanguageSelection";
|
||||
|
||||
public interface Listener
|
||||
{
|
||||
@@ -39,8 +34,6 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
|
||||
protected LanguagesAdapter createAdapter()
|
||||
{
|
||||
Bundle args = getArguments();
|
||||
boolean isMapLanguageSelection =
|
||||
args != null ? args.getBoolean(IS_MAP_LANGUAGE_SELECTION) : true;
|
||||
Set<String> existingLanguages =
|
||||
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
|
||||
|
||||
@@ -52,14 +45,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
|
||||
for (int i = 0; i < systemLocales.size(); i++)
|
||||
systemLanguages.add(null);
|
||||
|
||||
// service languages are old_name, alt_name, ...
|
||||
boolean includeServiceLangs = !isMapLanguageSelection;
|
||||
|
||||
for (Language lang : Editor.nativeGetSupportedLanguages(includeServiceLangs))
|
||||
for (Language lang : Editor.nativeGetSupportedLanguages(false))
|
||||
{
|
||||
if (existingLanguages.contains(lang.code))
|
||||
continue;
|
||||
|
||||
// Separately extract system languages
|
||||
for (int i = 0; i < systemLocales.size(); i++)
|
||||
{
|
||||
@@ -71,7 +58,7 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
|
||||
}
|
||||
}
|
||||
|
||||
if (systemLanguages.contains(lang))
|
||||
if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang))
|
||||
continue;
|
||||
|
||||
languages.add(lang);
|
||||
@@ -81,12 +68,6 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
|
||||
|
||||
languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList());
|
||||
|
||||
if (isMapLanguageSelection) {
|
||||
String localLanguageLabel = getString(R.string.pref_maplanguage_local);
|
||||
Language localLanguage = new Language(DEFAULT_LANG_CODE, localLanguageLabel);
|
||||
languages.add(0, localLanguage);
|
||||
}
|
||||
|
||||
return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()]));
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment
|
||||
|
||||
private void onAuthFail()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.editor_login_error_dialog)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ProgressBar;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
@@ -22,7 +23,6 @@ import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.StackedButtonDialogFragment;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import java.text.NumberFormat;
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
private MaterialTextView mEditsSent;
|
||||
private MaterialTextView mProfileName;
|
||||
private ShapeableImageView mProfileImage;
|
||||
private CircularProgressIndicator mProfileInfoLoading;
|
||||
private ProgressBar mProfileInfoLoading;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
|
||||
@@ -66,7 +66,7 @@ public class FaqFragment extends BaseMwmFragment
|
||||
FloatingActionButton feedbackFab = root.findViewById(R.id.feedback_fab);
|
||||
feedbackFab.setOnClickListener(
|
||||
v
|
||||
-> new MaterialAlertDialogBuilder(requireActivity())
|
||||
-> new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.feedback)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setItems(new CharSequence[] {getString(R.string.feedback_general), getString(R.string.report_a_bug)},
|
||||
|
||||
@@ -296,7 +296,7 @@ public class MapButtonsController extends Fragment
|
||||
mBadgeDrawable.setMaxCharacterCount(0);
|
||||
mBadgeDrawable.setHorizontalOffset(verticalOffset);
|
||||
mBadgeDrawable.setVerticalOffset(dpToPx(9, context));
|
||||
mBadgeDrawable.setBackgroundColor(ContextCompat.getColor(context, R.color.active_track_recording));
|
||||
mBadgeDrawable.setBackgroundColor(ContextCompat.getColor(context, R.color.base_accent));
|
||||
mBadgeDrawable.setVisible(enable);
|
||||
BadgeUtils.attachBadgeDrawable(mBadgeDrawable, menuButton);
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback
|
||||
if (mDialog != null && mDialog.isShowing())
|
||||
return;
|
||||
|
||||
mDialog = new MaterialAlertDialogBuilder(mActivity)
|
||||
mDialog = new MaterialAlertDialogBuilder(mActivity, R.style.MwmTheme_AlertDialog)
|
||||
.setMessage(R.string.common_check_internet_connection_dialog)
|
||||
.setPositiveButton(R.string.ok, (dialog, which) -> TrafficManager.INSTANCE.setEnabled(false))
|
||||
.setCancelable(true)
|
||||
|
||||
@@ -56,7 +56,7 @@ abstract class BaseRoutingErrorDialogFragment extends BaseMwmDialogFragment
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState)
|
||||
{
|
||||
parseArguments();
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity())
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setCancelable(true)
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
beforeDialogCreated(builder);
|
||||
|
||||
@@ -98,11 +98,6 @@ public class NavigationController implements TrafficManager.TrafficCallback, Nav
|
||||
mSpeedLimit = topFrame.findViewById(R.id.nav_speed_limit);
|
||||
mCurrentSpeed = topFrame.findViewById(R.id.nav_current_speed);
|
||||
|
||||
View mTopbar = topFrame.findViewById(R.id.statutbar);
|
||||
ViewCompat.setOnApplyWindowInsetsListener(mTopbar,(v, windowInsets) -> {
|
||||
UiUtils.setViewNavigationTopInsetsMargin(v, windowInsets);
|
||||
return windowInsets;
|
||||
});
|
||||
// Show a blank view below the navbar to hide the menu content
|
||||
final View navigationBarBackground = mFrame.findViewById(R.id.nav_bottom_sheet_nav_bar);
|
||||
final View nextTurnContainer = mFrame.findViewById(R.id.nav_next_turn_container);
|
||||
|
||||
@@ -6,10 +6,12 @@ import android.view.View;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.XmlRes;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
|
||||
@@ -42,6 +44,7 @@ abstract class BaseXmlSettingsFragment extends PreferenceFragmentCompat
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
view.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.bg_cards));
|
||||
RecyclerView recyclerView = getListView();
|
||||
ViewCompat.setOnApplyWindowInsetsListener(recyclerView, new ScrollableContentInsetsListener(recyclerView));
|
||||
}
|
||||
|
||||
@@ -1,27 +1,19 @@
|
||||
package app.organicmaps.settings;
|
||||
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
|
||||
import static app.organicmaps.sdk.editor.data.Language.DEFAULT_LANG_CODE;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.dialog.CustomMapServerDialog;
|
||||
import app.organicmaps.downloader.OnmapDownloader;
|
||||
import app.organicmaps.editor.LanguagesFragment;
|
||||
import app.organicmaps.editor.ProfileActivity;
|
||||
@@ -43,7 +35,7 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
|
||||
import app.organicmaps.sdk.util.log.LogsManager;
|
||||
import app.organicmaps.util.ThemeSwitcher;
|
||||
import app.organicmaps.util.Utils;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -81,7 +73,6 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
initScreenSleepEnabledPrefsCallbacks();
|
||||
initShowOnLockScreenPrefsCallbacks();
|
||||
initLeftButtonPrefs();
|
||||
initCustomMapDownloadUrlPrefsCallbacks();
|
||||
}
|
||||
|
||||
private void initLeftButtonPrefs()
|
||||
@@ -141,13 +132,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
private void updateMapLanguageCodeSummary()
|
||||
{
|
||||
final Preference pref = getPreference(getString(R.string.pref_map_locale));
|
||||
String mapLanguageCode = MapLanguageCode.getMapLanguageCode();
|
||||
if (mapLanguageCode.equals(DEFAULT_LANG_CODE)) {
|
||||
pref.setSummary(R.string.pref_maplanguage_local);
|
||||
} else {
|
||||
Locale locale = new Locale(mapLanguageCode);
|
||||
pref.setSummary(locale.getDisplayLanguage());
|
||||
}
|
||||
Locale locale = new Locale(MapLanguageCode.getMapLanguageCode());
|
||||
pref.setSummary(locale.getDisplayLanguage());
|
||||
}
|
||||
|
||||
private void updateRoutingSettingsPrefsSummary()
|
||||
@@ -500,7 +486,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
if (MapManager.nativeIsDownloading())
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.downloading_is_active)
|
||||
.setMessage(R.string.cant_change_this_setting)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
@@ -549,34 +535,6 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
});
|
||||
}
|
||||
|
||||
private void initCustomMapDownloadUrlPrefsCallbacks()
|
||||
{
|
||||
Preference customUrlPref = getPreference(getString(R.string.pref_custom_map_download_url));
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext());
|
||||
|
||||
String current = prefs.getString(getString(R.string.pref_custom_map_download_url), "");
|
||||
String normalizedUrl = Framework.normalizeServerUrl(current);
|
||||
|
||||
// Initial summary
|
||||
customUrlPref.setSummary(normalizedUrl.isEmpty()
|
||||
? getString(R.string.download_resources_custom_url_summary_none)
|
||||
: normalizedUrl);
|
||||
|
||||
// Sync native
|
||||
Framework.applyCustomMapDownloadUrl(requireContext(), normalizedUrl);
|
||||
|
||||
// Show dialog
|
||||
customUrlPref.setOnPreferenceClickListener(preference -> {
|
||||
CustomMapServerDialog.show(requireContext(), url -> {
|
||||
preference.setSummary(url.isEmpty()
|
||||
? getString(R.string.download_resources_custom_url_summary_none)
|
||||
: url);
|
||||
});
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void removePreference(@NonNull String categoryKey, @NonNull Preference preference)
|
||||
{
|
||||
final PreferenceCategory category = getPreference(categoryKey);
|
||||
|
||||
@@ -97,7 +97,7 @@ public class StoragePathFragment extends BaseSettingsFragment
|
||||
final String oldPath = storages.get(currentIndex).mPath;
|
||||
final String newPath = storages.get(newIndex).mPath;
|
||||
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setCancelable(false)
|
||||
.setTitle(R.string.move_maps)
|
||||
.setPositiveButton(R.string.ok, (dlg, which) -> moveStorage(newPath, oldPath))
|
||||
@@ -133,7 +133,7 @@ public class StoragePathFragment extends BaseSettingsFragment
|
||||
|
||||
if (!result)
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity())
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(R.string.move_maps_error)
|
||||
.setPositiveButton(
|
||||
R.string.report_a_bug,
|
||||
|
||||
@@ -90,7 +90,8 @@ public enum ThemeSwitcher
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_YES);
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
|
||||
else
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
|
||||
|
||||
if (RoutingController.get().isVehicleNavigation())
|
||||
style = MapStyle.VehicleDark;
|
||||
@@ -103,7 +104,8 @@ public enum ThemeSwitcher
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_NO);
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
|
||||
else
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
|
||||
|
||||
if (RoutingController.get().isVehicleNavigation())
|
||||
style = MapStyle.VehicleClear;
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.WindowCompat;
|
||||
@@ -195,7 +196,7 @@ public final class UiUtils
|
||||
public static void showHomeUpButton(MaterialToolbar toolbar)
|
||||
{
|
||||
toolbar.setNavigationIcon(
|
||||
UiUtils.getStyledResourceId(toolbar.getContext(), androidx.appcompat.R.attr.homeAsUpIndicator));
|
||||
ThemeUtils.getResource(toolbar.getContext(), androidx.appcompat.R.attr.homeAsUpIndicator));
|
||||
}
|
||||
|
||||
// this method returns the total height of the display (in pixels) including notch and other touchable areas
|
||||
@@ -208,7 +209,15 @@ public final class UiUtils
|
||||
}
|
||||
public static void setInputError(@NonNull TextInputLayout layout, @StringRes int error)
|
||||
{
|
||||
layout.setError(error == 0 ? null : layout.getContext().getString(error));
|
||||
setInputError(layout, error == 0 ? null : layout.getContext().getString(error));
|
||||
}
|
||||
|
||||
public static void setInputError(@NonNull TextInputLayout layout, String error)
|
||||
{
|
||||
layout.getEditText().setError(error);
|
||||
layout.getEditText().setTextColor(error == null
|
||||
? ThemeUtils.getColor(layout.getContext(), android.R.attr.textColorPrimary)
|
||||
: ContextCompat.getColor(layout.getContext(), R.color.base_red));
|
||||
}
|
||||
|
||||
public static void setFullscreen(@NonNull Activity activity, boolean fullscreen)
|
||||
@@ -272,14 +281,6 @@ public final class UiUtils
|
||||
view.setPadding(systemInsets.left, systemInsets.top, systemInsets.right, view.getPaddingBottom());
|
||||
}
|
||||
|
||||
public static void setViewNavigationTopInsetsMargin(View view, WindowInsetsCompat windowInsets)
|
||||
{
|
||||
final Insets systemInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
lp.topMargin = systemInsets.top;
|
||||
view.setLayoutParams(lp);
|
||||
}
|
||||
|
||||
public static void setupNavigationIcon(@NonNull MaterialToolbar toolbar, @NonNull View.OnClickListener listener)
|
||||
{
|
||||
View customNavigationButton = toolbar.findViewById(R.id.back);
|
||||
|
||||
@@ -184,6 +184,20 @@ public class Utils
|
||||
}
|
||||
}
|
||||
|
||||
public static void showFacebookPage(Activity activity)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Exception is thrown if we don't have installed Facebook application.
|
||||
getPackageInfo(activity.getPackageManager(), Constants.Package.FB_PACKAGE, 0);
|
||||
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Constants.Url.FB_OM_COMMUNITY_NATIVE)));
|
||||
}
|
||||
catch (final Exception e)
|
||||
{
|
||||
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Constants.Url.FB_OM_COMMUNITY_HTTP)));
|
||||
}
|
||||
}
|
||||
|
||||
public static void openUrl(@NonNull Context context, @Nullable String url)
|
||||
{
|
||||
if (TextUtils.isEmpty(url))
|
||||
|
||||
@@ -65,6 +65,8 @@ public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder>
|
||||
iv.setImageResource(R.drawable.ic_track_recording_on);
|
||||
iv.setImageTintMode(null);
|
||||
viewHolder.getTitleTextView().setText(R.string.stop_track_recording);
|
||||
badge.setBackgroundResource(R.drawable.track_recorder_badge);
|
||||
badge.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ public class MenuBottomSheetFragment extends BottomSheetDialogFragment
|
||||
@Override
|
||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
return new BottomSheetDialog(requireContext(), R.style.MwmTheme_BottomSheetDialog) {
|
||||
return new BottomSheetDialog(requireContext(), getTheme()) {
|
||||
@Override
|
||||
public void onAttachedToWindow()
|
||||
{
|
||||
|
||||
@@ -61,7 +61,6 @@ public class StackedButtonsDialog extends AppCompatDialog implements View.OnClic
|
||||
setCancelable(mCancelable);
|
||||
setOnCancelListener(mCancelListener);
|
||||
setContentView(R.layout.dialog_stacked_buttons);
|
||||
getWindow().setBackgroundDrawableResource(R.drawable.bg_transparent_dlg);
|
||||
|
||||
TextView title = findViewById(R.id.tv__title);
|
||||
UiUtils.setTextAndHideIfEmpty(title, mTitle);
|
||||
|
||||
@@ -47,7 +47,7 @@ public class BookmarkColorDialogFragment extends BaseMwmDialogFragment
|
||||
mIconResId = getArguments().getInt(ICON_RES);
|
||||
}
|
||||
|
||||
return new MaterialAlertDialogBuilder(requireActivity())
|
||||
return new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.setView(buildView())
|
||||
.setTitle(R.string.choose_color)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
||||
@@ -464,7 +464,7 @@ public class PlacePageController
|
||||
mAlertDialog.show();
|
||||
return;
|
||||
}
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(requireContext())
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(requireContext(), R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(requireContext().getString(R.string.delete_track_dialog_title, mMapObject.getTitle()))
|
||||
.setCancelable(true)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
|
||||
@@ -154,7 +154,6 @@ public class PlacePageView extends Fragment
|
||||
private MaterialTextView mTvLastChecked;
|
||||
private View mEditPlace;
|
||||
private View mAddPlace;
|
||||
private View mMapTooOld;
|
||||
private View mEditTopSpace;
|
||||
private ShapeableImageView mColorIcon;
|
||||
private MaterialTextView mTvCategory;
|
||||
@@ -319,7 +318,6 @@ public class PlacePageView extends Fragment
|
||||
mTvLastChecked = mFrame.findViewById(R.id.place_page_last_checked);
|
||||
mEditPlace = mFrame.findViewById(R.id.ll__place_editor);
|
||||
mAddPlace = mFrame.findViewById(R.id.ll__place_add);
|
||||
mMapTooOld = mFrame.findViewById(R.id.cv__map_too_old);
|
||||
mEditTopSpace = mFrame.findViewById(R.id.edit_top_space);
|
||||
latlon.setOnLongClickListener(this);
|
||||
address.setOnLongClickListener(this);
|
||||
@@ -428,9 +426,8 @@ public class PlacePageView extends Fragment
|
||||
|
||||
private void updateBookmarkView()
|
||||
{
|
||||
boolean enabled = mMapObject.isBookmark() || mMapObject.isTrack();
|
||||
updateViewFragment(PlacePageBookmarkFragment.class, BOOKMARK_FRAGMENT_TAG, R.id.place_page_bookmark_fragment,
|
||||
enabled);
|
||||
mMapObject.isBookmark());
|
||||
}
|
||||
|
||||
private void updateTrackView()
|
||||
@@ -687,84 +684,39 @@ public class PlacePageView extends Fragment
|
||||
|
||||
if (RoutingController.get().isNavigating() || RoutingController.get().isPlanning())
|
||||
{
|
||||
UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace, mMapTooOld);
|
||||
UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace);
|
||||
}
|
||||
else
|
||||
{
|
||||
UiUtils.showIf(Editor.nativeShouldShowEditPlace(), mEditPlace);
|
||||
UiUtils.showIf(Editor.nativeShouldShowAddPlace(), mAddPlace);
|
||||
UiUtils.hide(mMapTooOld);
|
||||
MaterialButton mTvEditPlace = mEditPlace.findViewById(R.id.mb__place_editor);
|
||||
MaterialButton mTvAddPlace = mAddPlace.findViewById(R.id.mb__place_add);
|
||||
|
||||
boolean shouldEnableEditPlace = Editor.nativeShouldEnableEditPlace();
|
||||
|
||||
if (shouldEnableEditPlace)
|
||||
{
|
||||
mTvEditPlace.setEnabled(true);
|
||||
mTvAddPlace.setEnabled(true);
|
||||
mTvEditPlace.setOnClickListener(this);
|
||||
mTvAddPlace.setOnClickListener(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
String countryId = MapManager.nativeGetSelectedCountry();
|
||||
|
||||
if (countryId != null && MapManager.nativeIsMapTooOldToEdit(countryId))
|
||||
{
|
||||
// map editing is disabled because the map is too old
|
||||
mTvEditPlace.setEnabled(true);
|
||||
mTvAddPlace.setEnabled(true);
|
||||
mTvEditPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
mTvAddPlace.setOnClickListener((v) -> {
|
||||
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
|
||||
});
|
||||
|
||||
CountryItem map = CountryItem.fill(countryId);
|
||||
|
||||
if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE
|
||||
|| map.status == CountryItem.STATUS_FAILED)
|
||||
{
|
||||
UiUtils.show(mMapTooOld);
|
||||
|
||||
boolean canUpdateMap = map.status != CountryItem.STATUS_DONE;
|
||||
MaterialButton mTvUpdateTooOldMap = mMapTooOld.findViewById(R.id.mb__update_too_old_map);
|
||||
UiUtils.showIf(canUpdateMap, mTvUpdateTooOldMap);
|
||||
|
||||
MaterialTextView mapTooOldDescription = mMapTooOld.findViewById(R.id.tv__map_too_old_description);
|
||||
if (canUpdateMap)
|
||||
{
|
||||
mapTooOldDescription.setText(R.string.place_page_map_too_old_description);
|
||||
mTvUpdateTooOldMap.setOnClickListener((v) -> {
|
||||
MapManagerHelper.warn3gAndDownload(requireActivity(), map.id, null);
|
||||
UiUtils.hide(mMapTooOld);
|
||||
});
|
||||
}
|
||||
else
|
||||
mapTooOldDescription.setText(R.string.place_page_app_too_old_description);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// map editing is disabled for other reasons
|
||||
mTvEditPlace.setEnabled(false);
|
||||
mTvAddPlace.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
final int editButtonColor =
|
||||
shouldEnableEditPlace
|
||||
mTvEditPlace.setOnClickListener(this);
|
||||
mTvAddPlace.setOnClickListener(this);
|
||||
mTvEditPlace.setEnabled(Editor.nativeShouldEnableEditPlace());
|
||||
mTvAddPlace.setEnabled(Editor.nativeShouldEnableAddPlace());
|
||||
final int editTextButtonColor =
|
||||
Editor.nativeShouldEnableEditPlace()
|
||||
? ContextCompat.getColor(
|
||||
getContext(),
|
||||
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary))
|
||||
: ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled);
|
||||
|
||||
mTvEditPlace.setTextColor(editButtonColor);
|
||||
mTvAddPlace.setTextColor(editButtonColor);
|
||||
mTvEditPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
|
||||
mTvAddPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
|
||||
final ColorStateList editStrokeButtonColor = new ColorStateList(
|
||||
new int[][]{
|
||||
new int[]{android.R.attr.state_enabled}, // enabled
|
||||
new int[]{-android.R.attr.state_enabled} // disabled
|
||||
},
|
||||
new int[]{
|
||||
ContextCompat.getColor(
|
||||
getContext(),
|
||||
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary)),
|
||||
ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled)
|
||||
});
|
||||
mTvEditPlace.setTextColor(editTextButtonColor);
|
||||
mTvAddPlace.setTextColor(editTextButtonColor);
|
||||
mTvEditPlace.setStrokeColor(editStrokeButtonColor);
|
||||
mTvAddPlace.setStrokeColor(editStrokeButtonColor);
|
||||
UiUtils.showIf(
|
||||
UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace),
|
||||
mEditTopSpace);
|
||||
|
||||
@@ -23,7 +23,6 @@ import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.bookmarks.data.Bookmark;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||
import app.organicmaps.sdk.util.StringUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
@@ -42,7 +41,6 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
|
||||
private PlacePageViewModel mViewModel;
|
||||
|
||||
private Bookmark currentBookmark;
|
||||
private Track currentTrack;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -90,15 +88,7 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
|
||||
|
||||
private void updateBookmarkDetails()
|
||||
{
|
||||
String notes = null;
|
||||
if (currentBookmark != null)
|
||||
{
|
||||
notes = currentBookmark.getBookmarkDescription();
|
||||
}
|
||||
if (currentTrack != null)
|
||||
{
|
||||
notes = currentTrack.getTrackDescription();
|
||||
}
|
||||
final String notes = currentBookmark.getBookmarkDescription();
|
||||
if (TextUtils.isEmpty(notes))
|
||||
{
|
||||
UiUtils.hide(mTvBookmarkNote);
|
||||
@@ -130,16 +120,8 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
|
||||
public void onClick(View v)
|
||||
{
|
||||
final FragmentActivity activity = requireActivity();
|
||||
if (currentBookmark != null)
|
||||
{
|
||||
EditBookmarkFragment.editBookmark(currentBookmark.getCategoryId(), currentBookmark.getBookmarkId(), activity,
|
||||
getChildFragmentManager(), PlacePageBookmarkFragment.this);
|
||||
}
|
||||
else if (currentTrack != null)
|
||||
{
|
||||
EditBookmarkFragment.editBookmark(currentTrack.getCategoryId(), currentTrack.getTrackId(), activity,
|
||||
getChildFragmentManager(), PlacePageBookmarkFragment.this);
|
||||
}
|
||||
EditBookmarkFragment.editBookmark(currentBookmark.getCategoryId(), currentBookmark.getBookmarkId(), activity,
|
||||
getChildFragmentManager(), PlacePageBookmarkFragment.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,11 +152,6 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
|
||||
currentBookmark = (Bookmark) mapObject;
|
||||
updateBookmarkDetails();
|
||||
}
|
||||
if (mapObject != null && mapObject.isTrack())
|
||||
{
|
||||
currentTrack = (Track) mapObject;
|
||||
updateBookmarkDetails();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
25
android/app/src/main/res/drawable-night/ic_category_atm.xml
Normal file
25
android/app/src/main/res/drawable-night/ic_category_atm.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:width="40dp"
|
||||
android:height="40dp" />
|
||||
<solid android:color="#51585E" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<vector
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="28"
|
||||
android:viewportHeight="28">
|
||||
<group
|
||||
android:pivotX="12"
|
||||
android:pivotY="12">
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M20,8 C20.82725,8 21.5,8.67275 21.5,9.5 L21.5,18.5 C21.5,19.32725 20.82725,20 20,20 L8,20 C7.17275,20 6.5,19.32725 6.5,18.5 L6.5,9.5 C6.5,8.67275 7.17275,8 8,8 L20,8 Z M20.00075,14 L8,14 L8,18.5 L20.0015,18.5 L20.00075,14 Z M14,15.5 L14,17 L9.5,17 L9.5,15.5 L14,15.5 Z M20,9.5 L8,9.5 L8,11 L20,11 L20,9.5 Z" />
|
||||
</group>
|
||||
</vector>
|
||||
</item>
|
||||
</layer-list>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user