Compare commits

..

51 Commits

Author SHA1 Message Date
zyphlar
47fe00c76e Merge branch 'zy-docker-build' into zy-pano-build 2026-01-12 21:51:30 -08:00
zyphlar
b919186c9d cache pip and mwm too 2026-01-12 21:41:37 -08:00
zyphlar
f989e45f53 use a specific apk path for single-file artifact 2026-01-12 17:11:58 -08:00
zyphlar
c0373e4557 [ci] Cache .git/modules with submodules for proper restoration
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 16:53:02 -08:00
zyphlar
5fb56d9abd use upload-artifact v3 2026-01-12 15:51:12 -08:00
zyphlar
b2eae1aa24 [ci] Always run submodule update regardless of cache. Specify exact folders.
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 14:04:32 -08:00
zyphlar
3f89c75b87 [ci] Conditionally sync or checkout submodules based on cache
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 11:20:41 -08:00
zyphlar
3e224c666b [ci] Sync and reset submodules after cache restore
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 11:06:08 -08:00
zyphlar
b9e7b9b994 [ci] Consolidate apt packages list and add fallback install
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 09:51:27 -08:00
zyphlar
e7ad0f20b6 [ci] Add sudo wrapper for apt cache action
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 09:34:16 -08:00
zyphlar
401c4324d3 cache
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 08:36:09 -08:00
zyphlar
e72400760c cache apt, upload all
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 08:29:15 -08:00
zyphlar
a1e6cf9c60 cache
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 07:57:14 -08:00
zyphlar
37846bc6b1 cmake and paths
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 07:19:14 -08:00
zyphlar
e086920086 [ci] Add daily 3party cache and configure.sh
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-12 00:51:29 -08:00
zyphlar
838fa4a288 run configure
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-11 21:57:35 -08:00
zyphlar
c305c2e580 [ci] Set Java 21 as default for Android builds
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-11 21:41:35 -08:00
zyphlar
fccda2d8b9 add java at runtime
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-11 00:46:23 -08:00
zyphlar
75439b5d89 [ci] Use Docker Android SDK container for builds
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-11 00:18:52 -08:00
Yannik Bloscheck
4a64bf05be [ios] Add missing speedcamera icon version
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-07 12:28:51 +01:00
Dobri Dabar
381c1e3979 [desktop] Added Local Language option
Signed-off-by: Dobri Dabar <dobridabar@noreply.codeberg.org>
2026-01-07 12:12:32 +01:00
Chris H. Meyer
aa9ee3cbbf [styles] Add tactile maps
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-07 11:02:50 +01:00
matheusgomesms
20d9185c79 Removing maxspeed estimate from generator
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2026-01-06 14:54:00 +01:00
Chris H. Meyer
90c18f4983 [types] Add miniature railway
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-06 14:47:40 +01:00
Viktor Govako
fe5d4f5286 [classifier] Added railway=miniature.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
Co-authored-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-06 14:47:40 +01:00
Yannik Bloscheck
13d7def519 [ios] Fix file path
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-06 00:31:44 +01:00
zyphlar
083a364d4a panoramax regen logic
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-05 14:15:44 -08:00
zyphlar
9a16e3f69c panoramax path
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-05 13:50:20 -08:00
Chris H. Meyer
93b35454eb [styles] Fix missing comma
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-05 18:26:16 +01:00
Chris H. Meyer
de1c0a061d [styles] Set text color of fortress and other castles
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-05 18:24:48 +01:00
gedankenstuecke
18ce55afa3 incorp review feedback 2026-01-05 13:27:42 +01:00
gedankenstuecke
43ffd199a4 [docs] Update CB teams description
Keeps the docs up to date on the currently existing teams

Signed-off-by: gedankenstuecke <gedankenstuecke@noreply.codeberg.org>
2026-01-05 13:23:29 +01:00
thesupertechie
3e75e5e802 [core] Add Tamil TTS support
This PR adds TTS voice instruction support for the Tamil language.

Co-authored-by: thesupertechie <thesupertechie1@gmail.com>
Co-committed-by: thesupertechie <thesupertechie1@gmail.com>
2026-01-05 10:42:53 +01:00
zyphlar
9e45e04d03 fix polygons
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-04 16:38:53 -08:00
Jean-Baptiste
fc96d17ed7 [android] Remove background apply on item phone view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-04 19:33:18 +01:00
Jean-Baptiste
e869fe1da1 [android] Fix custom dialog styles
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-04 19:32:11 +01:00
matheusgomesms
f38953458d [ios] Fix project.pbxproj
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-authored-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-committed-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2026-01-04 19:31:56 +01:00
zyphlar
e9406c0f36 update parquet schema
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-04 00:19:44 -08:00
zyphlar
4d862b0a8b add file to cmake, improve cleanup script, don't install pip
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-03 23:14:58 -08:00
zyphlar
01cdc24512 consolidate inputs, handle http500
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-03 22:50:33 -08:00
zyphlar
7722cc7d46 add missing files, add map build cleanup, temporarily build only one region
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-03 22:17:05 -08:00
zyphlar
5eeeaeb288 initial attempt at panoramax layer
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-03 16:44:29 -08:00
Jean-Baptiste
5e8d2e1a59 [android] Use Material Cardview foreach item phone
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 22:53:00 +01:00
Jean-Baptiste
07e42c0626 [android] Add comment about issues with Material library
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 22:43:15 +01:00
Jean-Baptiste
14e45aa6db [android] Use Material 3 alert dialogs
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 22:34:15 +01:00
Jean-Baptiste
8bd7f9d59a [android] Use M3 dark background in the app
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 22:32:51 +01:00
Radek Olsak
ead092af79 [desktop] Added Void dependencies
Signed-off-by: Radek Olsak <radek@olsak.net>
2026-01-03 22:25:36 +01:00
Chris H. Meyer
c3f5986f12 [styles] render man_made=wastewater_plant like landuse=industrial
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-03 22:24:11 +01:00
Jean-Baptiste
143e0562e6 [android] Remove stroke border on cardview in navigation view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 22:22:09 +01:00
Konstantin Pastbin
89cfc6f8e6 [search] Enable Lithuanian for search categories/synonyms
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2026-01-03 21:13:45 +01:00
Jean-Baptiste
4788956720 [android] Simplify some views to improve performance
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-03 20:50:11 +01:00
150 changed files with 3966 additions and 2984 deletions

View File

@@ -34,28 +34,155 @@ on:
- track_generator/**
- xcode/**
env:
APT_PACKAGES: >-
cmake
ninja-build
qt6-base-dev
qt6-declarative-dev
qt6-positioning-dev
libqt6svg6-dev
optipng
libfreetype-dev
libharfbuzz-dev
libxrandr-dev
libxinerama-dev
libxcursor-dev
libxi-dev
python3-pip
zlib1g-dev
git
ccache
openjdk-21-jdk
PIP_PACKAGES: protobuf<3.21
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:latest
options: --user root
env:
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
steps:
- name: Get date for cache key
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Create sudo wrapper
shell: bash
run: |
echo '#!/bin/bash' > /usr/local/bin/sudo
echo 'exec "$@"' >> /usr/local/bin/sudo
chmod +x /usr/local/bin/sudo
- name: Apt update
shell: bash
run: |
apt update -y
- name: Install and cache apt packages
uses: https://github.com/awalsh128/cache-apt-pkgs-action@v1.6.0
with:
packages: ${{ env.APT_PACKAGES }}
version: "${{ steps.date.outputs.date }}"
- name: Fallback manual apt install
shell: bash
run: |
if ! command -v pip &> /dev/null; then
echo "pip not found, cache action failed, installing packages manually"
apt install -y $APT_PACKAGES
fi
- name: Generate pip cache key
id: pip-cache-key
run: echo "key=pip-$(echo '${{ env.PIP_PACKAGES }}' | md5sum | cut -d' ' -f1)" >> $GITHUB_OUTPUT
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ steps.pip-cache-key.outputs.key }}
- name: Install build dependencies
shell: bash
run: |
pip install "${{ env.PIP_PACKAGES }}" --break-system-packages
update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
- name: Install Android SDK components
shell: bash
run: |
yes | sdkmanager --licenses || true
sdkmanager "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358"
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Parallel submodules checkout
- name: Cache world map
uses: actions/cache@v4
with:
path: 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
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
run: |
git submodule sync --recursive
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Lint
shell: bash
working-directory: android
run: ./gradlew -Pandroidauto=true lint
run: |
cd ..
./configure.sh
cd android
./gradlew -Pandroidauto=true lint
android-check:
name: Build Android Debug
runs-on: ubuntu-latest
container:
image: codeberg.org/comaps/docker-android-sdk:latest
options: --user root
env:
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
strategy:
fail-fast: false
matrix:
@@ -71,23 +198,84 @@ jobs:
cancel-in-progress: true
steps:
- name: Install build tools and dependencies
- name: Get date for cache key
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Create sudo wrapper
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y ninja-build
echo '#!/bin/bash' > /usr/local/bin/sudo
echo 'exec "$@"' >> /usr/local/bin/sudo
chmod +x /usr/local/bin/sudo
- name: Apt update
shell: bash
run: |
apt update -y
- name: Install and cache apt packages
uses: https://github.com/awalsh128/cache-apt-pkgs-action@v1.6.0
with:
packages: ${{ env.APT_PACKAGES }}
version: "${{ steps.date.outputs.date }}"
- name: Fallback manual apt install
shell: bash
run: |
if ! command -v pip &> /dev/null; then
echo "pip not found, cache action failed, installing packages manually"
apt install -y $APT_PACKAGES
fi
- name: Generate pip cache key
id: pip-cache-key
run: echo "key=pip-$(echo '${{ env.PIP_PACKAGES }}' | md5sum | cut -d' ' -f1)" >> $GITHUB_OUTPUT
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ steps.pip-cache-key.outputs.key }}
- name: Install build dependencies
shell: bash
run: |
pip install "${{ env.PIP_PACKAGES }}" --break-system-packages
update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
- name: Install Android SDK components
shell: bash
run: |
yes | sdkmanager --licenses || true
sdkmanager "platforms;android-36" "build-tools;36.0.0" "ndk;28.2.13676358"
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 200 # enough to get all commits for the current day
- name: Parallel submodules checkout
- name: Cache world map
uses: actions/cache@v4
with:
path: 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
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
run: |
git submodule sync --recursive
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Configure ccache
uses: hendrikmuhs/ccache-action@v1.2
uses: https://github.com/hendrikmuhs/ccache-action@v1.2
with:
key: ${{ github.workflow }}-${{ matrix.flavor }}
@@ -98,13 +286,22 @@ jobs:
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
run: |
cmake --version
ninja --version
cd ..
./configure.sh
cd android
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
- name: Find built APK
id: find-apk
shell: bash
run: |
APK_PATH=$(find android/app/build/outputs/apk/**/ -name "*.apk" -type f | head -n 1)
echo "apk_path=$APK_PATH" >> $GITHUB_OUTPUT
echo "Found APK: $APK_PATH"
- name: Upload ${{ matrix.flavor }} apk
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: android-${{ matrix.flavor }}
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
path: ${{ steps.find-apk.outputs.apk_path }}
if-no-files-found: error

View File

@@ -17,12 +17,22 @@ on:
required: false
default: false
type: boolean
run-panoramax:
description: 'Update Panoramax imagery?'
required: false
default: true
type: boolean
# run-cleanup:
# description: 'Clean up old build files?'
# required: false
# default: true
# type: boolean
run-tiger:
description: 'Update TIGER address data?'
required: false
default: true
type: boolean
run-planet-pbf:
run-planet:
description: 'Update PBF planet (for Wiki & subways)?'
required: false
default: true
@@ -37,11 +47,11 @@ on:
required: false
default: true
type: boolean
run-planet-o5m:
description: 'Update O5M planet (for mapgen)?'
required: false
default: true
type: boolean
# run-planet-o5m:
# description: 'Update O5M planet (for mapgen)?'
# required: false
# default: true
# type: boolean
run-mapgen:
description: 'Run maps generation?'
required: false
@@ -80,11 +90,54 @@ env:
ZULIP_API_KEY: ${{ secrets.ZULIP_API_KEY }}
MWMTEST: ${{ inputs.map-generator-test }}
MWMCONTINUE: ${{ inputs.map-generator-continue }}
# MWMCOUNTRIES: ${{ inputs.map-generator-countries }}
#TODO: undo inputs.map-generator-countries
MWMCOUNTRIES: US_Oregon_Portland
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
jobs:
cleanup-old-files:
# if: inputs.run-cleanup
name: Clean Up Old Files
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 }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Remove intermediate data
shell: bash
run: |
echo "Checking for intermediate map build data in /mnt/4tbexternal/osm-maps..."
cd /mnt/4tbexternal/osm-maps/
# List all dated directories, sort by name (newest first)
ls -1d */ 2>/dev/null | grep -E '^[0-9]{4}_[0-9]{2}_[0-9]{2}__[0-9]{2}_[0-9]{2}_[0-9]{2}/$' | while read dir; do
if [ -d "$dir/intermediate_data" ]; then
echo "Removing $dir/intermediate_data"
fi
if [ -d "$dir/osm2ft" ]; then
echo "Removing $dir/osm2ft"
fi
if [ -f "$dir/world_roads.o5m" ]; then
echo "Removing $dir/world_roads.o5m"
fi
done
echo "Intermediate data cleaned up."
- name: Remove old map builds (keep last 6)
shell: bash
run: |
echo "Checking for old map builds in /mnt/4tbexternal/osm-maps..."
cd /mnt/4tbexternal/osm-maps/
# List all dated directories, sort by name (newest first), skip first 6, delete the rest
ls -1d */ 2>/dev/null | grep -E '^[0-9]{4}_[0-9]{2}_[0-9]{2}__[0-9]{2}_[0-9]{2}_[0-9]{2}/$' | sort -r | tail -n +7 | while read dir; do
echo "Removing old build: $dir"
rm -rf "$dir"
done
echo "Old map builds cleaned up."
clone-repos:
name: Clone Git Repos
runs-on: mapfilemaker
@@ -209,6 +262,130 @@ jobs:
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Isolines are done!'
update-panoramax:
if: inputs.run-panoramax
name: Update Panoramax
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 }}-map-generator-${{ 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: Install Python dependencies
shell: bash
run: |
pip install pyarrow duckdb shapely
- name: Download Panoramax Geoparquet
shell: bash
run: |
mkdir -p /home/planet/panoramax
cd /home/planet/panoramax
PARQUET_UPDATED=false
# Download the global Panoramax geoparquet file (20GB)
if [ ! -f panoramax.parquet ]; then
echo "panoramax.parquet does not exist, will download"
PARQUET_UPDATED=true
else
# Check if file is older than 7 days
FILE_AGE_DAYS=$(( ($(date +%s) - $(stat -c %Y panoramax.parquet)) / 86400 ))
echo "panoramax.parquet is $FILE_AGE_DAYS days old"
if [ $FILE_AGE_DAYS -gt 7 ]; then
echo "File is older than 7 days, will re-download"
PARQUET_UPDATED=true
else
echo "File is recent (< 7 days), skipping download"
fi
fi
if [ "$PARQUET_UPDATED" = "true" ]; then
echo "Downloading Panoramax geoparquet..."
curl -L -o panoramax.parquet.tmp https://api.panoramax.xyz/data/geoparquet/panoramax.parquet
mv panoramax.parquet.tmp panoramax.parquet
fi
# Export to GitHub environment for next step
echo "PARQUET_UPDATED=$PARQUET_UPDATED" >> $GITHUB_ENV
- name: Process Panoramax to per-country files
shell: bash
run: |
cd ~/comaps
mkdir -p /home/planet/panoramax/countries
SHOULD_PROCESS=false
# Check if parquet was just updated in this workflow run
if [ "$PARQUET_UPDATED" = "true" ]; then
echo "Parquet file was just updated, will process"
SHOULD_PROCESS=true
# Check if country files don't exist
elif [ ! "$(ls -A /home/planet/panoramax/countries/*.panoramax 2>/dev/null)" ]; then
echo "No country files exist, will process"
SHOULD_PROCESS=true
# Check if planet file is newer than last processing marker
elif [ -f /home/planet/planet/planet.o5m ] && [ -f /home/planet/panoramax/countries/.last_processed ]; then
if [ /home/planet/planet/planet.o5m -nt /home/planet/panoramax/countries/.last_processed ]; then
echo "Planet file is newer than last processing, will process"
SHOULD_PROCESS=true
else
echo "Country files are up-to-date, skipping processing"
fi
elif [ -f /home/planet/planet/planet.o5m ]; then
echo "No processing marker exists but planet file does, will process"
SHOULD_PROCESS=true
else
echo "Country files are up-to-date, skipping processing"
fi
if [ "$SHOULD_PROCESS" = "true" ]; then
echo "Processing panoramax data to per-country files..."
python3 tools/python/maps_generator/panoramax_preprocessor.py \
--input /home/planet/panoramax/panoramax.parquet \
--output /home/planet/panoramax/countries \
--borders-dir ~/comaps/data/borders
# Mark when processing completed (persists in /home/planet for timestamp comparison)
touch /home/planet/panoramax/countries/.last_processed
fi
# Export to GitHub environment for notification step
echo "PANORAMAX_PROCESSED=$SHOULD_PROCESS" >> $GITHUB_ENV
- name: Check panoramax files
shell: bash
run: |
NUMPANO=$(ls -1 /home/planet/panoramax/countries/*.panoramax 2>/dev/null | wc -l)
echo "Found $NUMPANO panoramax country files"
if [ $NUMPANO -lt 5 ]; then
echo "ERROR: Did generation fail? Expected at least 5 country files"
exit 1
fi
- name: Notify Zulip
shell: bash
run: |
# Only notify if processing actually happened in this workflow run
if [ "$PANORAMAX_PROCESSED" = "true" ]; then
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=Panoramax processing is done!'
else
echo "No processing occurred in this run, skipping notification"
fi
update-tiger:
if: inputs.run-tiger
name: Update TIGER
@@ -247,7 +424,7 @@ jobs:
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | ~/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
update-planet-pbf:
if: inputs.run-planet-pbf
if: inputs.run-planet
name: Update PBF Planet
runs-on: mapfilemaker
container:
@@ -431,7 +608,7 @@ jobs:
--data-urlencode 'content=Wiki update is done!'
update-planet-o5m:
if: inputs.run-planet-o5m
if: inputs.run-planet
name: Update O5M Planet
runs-on: mapfilemaker
container:
@@ -574,4 +751,3 @@ jobs:
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Upload is done!'

View File

@@ -352,6 +352,7 @@ dependencies {
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

View File

@@ -446,7 +446,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
default -> throw new AssertionError("Unexpected result code = " + result);
};
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(titleId)
.setMessage(messageId)
.setCancelable(true)

View File

@@ -9,8 +9,7 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE;
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_RECORD_TRACK_CODE;
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
import static app.organicmaps.sdk.location.LocationState.FOLLOW;
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_COMPASS;
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_ROUTE;
import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE;
import static app.organicmaps.sdk.location.LocationState.LOCATION_TAG;
import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG;
import static app.organicmaps.sdk.util.Utils.dimen;
@@ -433,7 +432,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
dismissLocationErrorDialog();
mLocationErrorDialog = new MaterialAlertDialogBuilder(MwmActivity.this, R.style.MwmTheme_AlertDialog)
mLocationErrorDialog = new MaterialAlertDialogBuilder(MwmActivity.this)
.setMessage(R.string.unknown_current_position)
.setCancelable(true)
.setPositiveButton(R.string.ok, null)
@@ -656,7 +655,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
else
{
dismissAlertDialog();
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.message_invalid_feature_position)
.setPositiveButton(R.string.ok, null)
.setOnDismissListener(dialog -> mAlertDialog = null)
@@ -1156,7 +1155,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
if (type == IsolinesState.EXPIREDDATA)
{
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.downloader_update_maps)
.setMessage(R.string.isolines_activation_error_dialog)
.setPositiveButton(
@@ -1775,7 +1774,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
dismissAlertDialog();
mAlertDialog =
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setTitle(R.string.unable_to_calc_alert_title)
.setMessage(R.string.unable_to_calc_alert_subtitle)
.setPositiveButton(R.string.settings,
@@ -1798,7 +1797,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
builder.append(getString(resId)).append("\n\n");
dismissAlertDialog();
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.dialog_routing_disclaimer_title)
.setMessage(builder.toString())
.setCancelable(false)
@@ -1847,7 +1846,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
return true;
final MapObject endPoint = Objects.requireNonNull(controller.getEndPoint());
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.p2p_only_from_current)
.setMessage(R.string.p2p_reroute_from_current)
.setCancelable(false)
@@ -1901,8 +1900,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
locationHelper.restartWithNewMode();
if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE_ROUTE || newMode == FOLLOW_AND_ROTATE_COMPASS)
&& !LocationUtils.checkFineLocationPermission(this))
if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE) && !LocationUtils.checkFineLocationPermission(this))
{
// Try to optimistically request FINE permission for FOLLOW and FOLLOW_AND_ROTATE modes.
Logger.i(LOCATION_TAG, "Requesting ACCESS_FINE_LOCATION permission for " + LocationState.nameOf(newMode));
@@ -2042,7 +2040,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
mPreciseLocationDialogShown = true;
final MaterialAlertDialogBuilder builder =
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setTitle("" + getString(R.string.limited_accuracy))
.setMessage(R.string.precise_location_is_disabled_long_text)
.setNegativeButton(R.string.close, (dialog, which) -> dialog.dismiss())
@@ -2076,7 +2074,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
return;
}
mLocationErrorDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mLocationErrorDialog = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.enable_location_services)
.setMessage(R.string.location_is_disabled_long_text)
.setOnDismissListener(dialog -> mLocationErrorDialog = null)
@@ -2169,7 +2167,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
return;
}
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.enable_location_services)
.setMessage(R.string.location_is_disabled_long_text)
.setOnDismissListener(dialog -> mLocationErrorDialog = null)
@@ -2255,7 +2253,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
dismissAlertDialog();
final MaterialAlertDialogBuilder builder =
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setTitle(R.string.current_location_unknown_error_title)
.setCancelable(true)
.setMessage(R.string.power_save_dialog_summary)
@@ -2280,7 +2278,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
dismissAlertDialog();
mAlertDialog =
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setTitle(R.string.load_kmz_title)
.setMessage(getString(R.string.unknown_file_type, uri))
.setPositiveButton(R.string.ok, null)
@@ -2297,7 +2295,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
dismissAlertDialog();
mAlertDialog =
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setTitle(R.string.load_kmz_title)
.setMessage(getString(R.string.failed_to_open_file, uri, error))
.setPositiveButton(R.string.ok, null)
@@ -2319,7 +2317,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
public void onBookmarksFileImportFailed()
{
dismissAlertDialog();
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.load_kmz_title)
.setMessage(R.string.load_kmz_failed)
.setPositiveButton(R.string.ok, null)
@@ -2580,7 +2578,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
private void reportUnsupported()
{
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(this)
.setMessage(R.string.unsupported_phone)
.setCancelable(false)
.setPositiveButton(R.string.close, (dlg, which) -> this.moveTaskToBack(true))

View File

@@ -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_AlertDialog)
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_M3_AlertDialog)
.setTitle(titleId)
.setMessage(messageId)
.setPositiveButton(

View File

@@ -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, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(context)
.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, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.dialog_routing_system_error)
.setMessage(R.string.bookmarks_error_message_share_general)
.setPositiveButton(R.string.ok, null)

View File

@@ -42,6 +42,7 @@ 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(android.R.color.transparent);
mRecycler = root.findViewById(R.id.recycler);
mRecycler.setLayoutManager(new LinearLayoutManager(requireActivity()));
return root;

View File

@@ -77,6 +77,7 @@ public class ChooseBookmarksSortingTypeFragment
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
final Bundle args = getArguments();
if (args == null)

View File

@@ -183,16 +183,11 @@ public final class UiHelpers
drawableRes = R.drawable.ic_follow;
tintColor = Colors.LOCATION_TINT;
}
case LocationState.FOLLOW_AND_ROTATE_COMPASS ->
case LocationState.FOLLOW_AND_ROTATE ->
{
drawableRes = R.drawable.ic_follow_and_rotate;
tintColor = Colors.LOCATION_TINT;
}
case LocationState.FOLLOW_AND_ROTATE_ROUTE ->
{
drawableRes = R.drawable.ic_follow_route;
tintColor = Colors.LOCATION_TINT;
}
default -> throw new IllegalArgumentException("Invalid button mode: " + locationMode);
}

View File

@@ -42,7 +42,7 @@ public final class CustomMapServerDialog
edit.setText(current);
MaterialAlertDialogBuilder builder =
new MaterialAlertDialogBuilder(context, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.download_resources_custom_url_title)
.setMessage(R.string.download_resources_custom_url_message)
.setView(dialogView)

View File

@@ -113,7 +113,7 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment
negativeButtonText = args.getString(ARG_NEGATIVE_BUTTON);
}
AlertDialog editTextDialog = new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
AlertDialog editTextDialog = new MaterialAlertDialogBuilder(requireActivity())
.setView(buildView())
.setNegativeButton(negativeButtonText, null)
.setPositiveButton(positiveButtonText, null)

View File

@@ -119,7 +119,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
{
if (RoutingController.get().isNavigating())
{
new MaterialAlertDialogBuilder(adapter.mActivity, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(adapter.mActivity)
.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, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(adapter.mActivity)
.setTitle(R.string.downloader_delete_map)
.setMessage(R.string.downloader_delete_map_dialog)
.setNegativeButton(R.string.cancel, null)

View File

@@ -49,7 +49,7 @@ public class MapManagerHelper
return;
}
final AlertDialog dlg = new MaterialAlertDialogBuilder(activity, R.style.MwmTheme_AlertDialog)
final AlertDialog dlg = new MaterialAlertDialogBuilder(activity)
.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, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(activity)
.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, R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(activity)
.setTitle(R.string.download_over_mobile_header)
.setMessage(R.string.download_over_mobile_message)
.setNegativeButton(R.string.cancel, null)

View File

@@ -493,7 +493,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
}
});
return new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
return new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.editor_socket)
.setView(dialogView)
.setPositiveButton(R.string.save,
@@ -997,7 +997,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
message = R.string.editor_reset_edits_message;
}
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(message)
.setPositiveButton(title,
(dialog, which) -> {
@@ -1020,7 +1020,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private void placeDisused()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {

View File

@@ -352,7 +352,7 @@ public class EditorHostFragment
private void processNoFeatures()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.downloader_no_space_title)
.setPositiveButton(R.string.ok, null)
.show();
@@ -386,7 +386,7 @@ public class EditorHostFragment
private void showNoobDialog()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.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))

View File

@@ -155,7 +155,7 @@ public class FeatureCategoryFragment
// Duplicate of showNoobDialog()
private void showNoteConfirmationDialog(double lat, double lon, String noteText)
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.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))

View File

@@ -79,7 +79,7 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment
private void onAuthFail()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.editor_login_error_dialog)
.setPositiveButton(R.string.ok, null)
.show();

View File

@@ -66,7 +66,7 @@ public class FaqFragment extends BaseMwmFragment
FloatingActionButton feedbackFab = root.findViewById(R.id.feedback_fab);
feedbackFab.setOnClickListener(
v
-> new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
-> new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.feedback)
.setNegativeButton(R.string.cancel, null)
.setItems(new CharSequence[] {getString(R.string.feedback_general), getString(R.string.report_a_bug)},

View File

@@ -107,7 +107,7 @@ public class TrafficButtonController implements TrafficManager.TrafficCallback
if (mDialog != null && mDialog.isShowing())
return;
mDialog = new MaterialAlertDialogBuilder(mActivity, R.style.MwmTheme_AlertDialog)
mDialog = new MaterialAlertDialogBuilder(mActivity)
.setMessage(R.string.common_check_internet_connection_dialog)
.setPositiveButton(R.string.ok, (dialog, which) -> TrafficManager.INSTANCE.setEnabled(false))
.setCancelable(true)

View File

@@ -56,7 +56,7 @@ abstract class BaseRoutingErrorDialogFragment extends BaseMwmDialogFragment
public Dialog onCreateDialog(Bundle savedInstanceState)
{
parseArguments();
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity())
.setCancelable(true)
.setNegativeButton(android.R.string.cancel, null);
beforeDialogCreated(builder);

View File

@@ -494,7 +494,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
pref.setOnPreferenceClickListener(preference -> {
if (MapManager.nativeIsDownloading())
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.downloading_is_active)
.setMessage(R.string.cant_change_this_setting)
.setPositiveButton(R.string.ok, null)

View File

@@ -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(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.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(), R.style.MwmTheme_AlertDialog)
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.move_maps_error)
.setPositiveButton(
R.string.report_a_bug,

View File

@@ -61,6 +61,7 @@ public class StackedButtonsDialog extends AppCompatDialog implements View.OnClic
setCancelable(mCancelable);
setOnCancelListener(mCancelListener);
setContentView(R.layout.dialog_stacked_buttons);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
TextView title = findViewById(R.id.tv__title);
UiUtils.setTextAndHideIfEmpty(title, mTitle);

View File

@@ -49,8 +49,8 @@ public class MyPositionButton
int colorAttr = R.attr.iconTint;
@DimenRes
int sizeDimen = R.dimen.map_button_icon_size;
if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE_ROUTE
|| mode == LocationState.FOLLOW_AND_ROTATE_COMPASS || mode == LocationState.PENDING_POSITION)
if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE
|| mode == LocationState.PENDING_POSITION)
{
colorAttr = com.google.android.material.R.attr.colorSecondary;
if (mode == LocationState.PENDING_POSITION)
@@ -69,8 +69,7 @@ public class MyPositionButton
case LocationState.NOT_FOLLOW_NO_POSITION -> R.drawable.ic_location_off;
case LocationState.NOT_FOLLOW -> R.drawable.ic_location_crosshair;
case LocationState.FOLLOW -> R.drawable.ic_follow;
case LocationState.FOLLOW_AND_ROTATE_COMPASS -> R.drawable.ic_follow_and_rotate;
case LocationState.FOLLOW_AND_ROTATE_ROUTE -> R.drawable.ic_follow_route;
case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate;
default -> throw new IllegalArgumentException("Invalid button mode: " + mode);
};
image = ResourcesCompat.getDrawable(resources, drawableRes, context.getTheme());

View File

@@ -47,7 +47,7 @@ public class BookmarkColorDialogFragment extends BaseMwmDialogFragment
mIconResId = getArguments().getInt(ICON_RES);
}
return new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
return new MaterialAlertDialogBuilder(requireActivity())
.setView(buildView())
.setTitle(R.string.choose_color)
.setNegativeButton(R.string.cancel, null)

View File

@@ -74,6 +74,11 @@ public class PlacePageButtonFactory
titleId = R.string.avoid_ferry;
yield R.drawable.ic_avoid_ferry;
}
case PANORAMAX ->
{
titleId = R.string.panoramax;
yield R.drawable.ic_camera;
}
case MORE ->
{
titleId = R.string.placepage_more_button;

View File

@@ -144,6 +144,7 @@ public final class PlacePageButtons extends Fragment implements Observer<List<Pl
ROUTE_AVOID_TOLL,
ROUTE_AVOID_FERRY,
ROUTE_AVOID_UNPAVED,
PANORAMAX,
MORE
}

View File

@@ -428,6 +428,7 @@ public class PlacePageController
case ROUTE_AVOID_TOLL -> onAvoidTollBtnClicked();
case ROUTE_AVOID_UNPAVED -> onAvoidUnpavedBtnClicked();
case ROUTE_AVOID_FERRY -> onAvoidFerryBtnClicked();
case PANORAMAX -> onPanoramaxBtnClicked();
}
}
@@ -464,7 +465,7 @@ public class PlacePageController
mAlertDialog.show();
return;
}
mAlertDialog = new MaterialAlertDialogBuilder(requireContext(), R.style.MwmTheme_AlertDialog)
mAlertDialog = new MaterialAlertDialogBuilder(requireContext())
.setTitle(requireContext().getString(R.string.delete_track_dialog_title, mMapObject.getTitle()))
.setCancelable(true)
.setNegativeButton(R.string.cancel, null)
@@ -499,6 +500,19 @@ public class PlacePageController
requireActivity().finish();
}
private void onPanoramaxBtnClicked()
{
if (mMapObject == null)
return;
String url = Framework.nativeGetPanoramaxUrl();
if (!TextUtils.isEmpty(url))
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(android.net.Uri.parse(url));
startActivity(intent);
}
}
private void onRouteFromBtnClicked()
{
if (mMapObject == null)
@@ -637,6 +651,10 @@ public class PlacePageController
buttons.add(mapObject.isBookmark() ? PlacePageButtons.ButtonType.BOOKMARK_DELETE
: PlacePageButtons.ButtonType.BOOKMARK_SAVE);
}
// Add Panoramax button if imagery is available
if (Framework.nativeHasPanoramax())
buttons.add(PlacePageButtons.ButtonType.PANORAMAX);
}
mViewModel.setCurrentButtons(buttons);
}

View File

@@ -4,7 +4,7 @@
android:color="?colorControlHighlight">
<item>
<shape>
<solid android:color="?cardBackground" />
<solid android:color="?appBackground" />
</shape>
</item>
<item android:id="@android:id/mask">

View File

@@ -1,30 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:strokeColor="@android:color/white"
android:fillColor="@android:color/white"
android:pathData="M15.15 16.92l-7.04 2.8v0.4l2.63 1.07 0.98 2.67h0.39z"/>
<path
android:strokeColor="@android:color/white"
android:strokeWidth="2"
android:strokeLineJoin="miter"
android:pathData="m 16.25,15.95 c 2.29,-2.29 1.91,-3.87 -4.06,-3.87"/>
<path
android:strokeColor="@android:color/white"
android:strokeWidth="2"
android:strokeLineJoin="miter"
android:pathData="M8.98 7.43c-2.97 2.96-2.72 4.66 3.24 4.66"/>
<path
android:strokeColor="@android:color/white"
android:strokeWidth="2"
android:strokeLineJoin="miter"
android:pathData="M8.89 7.51l8.83-8.79"/>
<path
android:strokeColor="@android:color/white"
android:strokeWidth="2"
android:strokeLineJoin="miter"
android:pathData="M9.2 22.83c-0.64 0.57-2.9 2.5-3.56 3.13"/>
</vector>

View File

@@ -1,12 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
android:background="?cardBackground">
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
@@ -49,3 +55,4 @@
tools:text="Do not Use Today"/>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -22,12 +22,9 @@
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical"
android:baselineAligned="false"
android:orientation="horizontal"
tools:ignore="ScrollViewSize">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
@@ -111,6 +108,5 @@
android:text="@string/register_at_openstreetmap" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@@ -17,6 +17,7 @@
android:id="@+id/street_frame"
android:layout_width="500dp"
android:layout_height="wrap_content"
style="@style/Widget.Material3.CardView.Filled"
android:layout_marginEnd="@dimen/margin_quarter"
app:cardCornerRadius="@dimen/margin_half"
android:elevation="@dimen/nav_elevation"

View File

@@ -11,8 +11,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:backgroundTint="?menuBackground"
android:background="@drawable/onmap_downloader_background"
android:background="?menuBackground"
android:padding="@dimen/margin_base"
android:clipToPadding="false"
android:clipChildren="false"

View File

@@ -1,9 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.Material3.CardView.Filled"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
<LinearLayout
android:orientation="vertical"
android:background="?cardBackground"
android:minWidth="@dimen/bookmark_purchase_img_width"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -21,9 +27,11 @@
android:layout_marginEnd="@dimen/margin_base_plus"
android:layout_marginStart="@dimen/margin_base_plus"
tools:text="Select list"/>
<include
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_marginTop="@dimen/margin_base"
android:layout_height="wrap_content"
android:layout_width="match_parent"
layout="@layout/recycler_default"/>
android:scrollbars="vertical"/>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -1,13 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_double_and_half"
android:background="?cardBackground"
android:minWidth="@dimen/dialog_min_width"
android:minHeight="@dimen/dialog_min_height"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/margin_base_plus">
@@ -77,3 +82,4 @@
app:buttonTint="@null"/>
</RadioGroup>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -1,12 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
android:background="?cardBackground">
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
@@ -41,3 +47,4 @@
style="@style/MwmWidget.Button.StackedButtonsDialog"
tools:text="Do not Use Today"/>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -13,7 +13,6 @@
android:paddingTop="@dimen/margin_half"
android:paddingBottom="@dimen/margin_half"
android:layout_marginEnd="@dimen/margin_base"
android:background="?cardBackground"
android:textAppearance="@style/MwmTextAppearance.Caption"
tools:text="Downloaded"
tools:background="#80FF0000"/>

View File

@@ -6,7 +6,7 @@
android:id="@+id/rl__bookmark_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?cardBackground"
android:background="?appBackground"
android:padding="@dimen/margin_half">
<LinearLayout
android:id="@+id/ll__bookmark_name"

View File

@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="?cardBackground"
android:background="?appBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
@@ -69,7 +69,6 @@
android:inputType="textMultiLine"/>
</com.google.android.material.textfield.TextInputLayout>
<View
android:background="?cardBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

View File

@@ -11,5 +11,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:fadeScrollbars="false" />
android:fadeScrollbars="false"
android:background="?appBackground"/>
</LinearLayout>

View File

@@ -4,7 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/MwmWidget.Floating"
android:background="?cardBackground"
android:background="?appBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/toolbar_with_search"/>
@@ -17,10 +17,12 @@
style="@style/MwmWidget.Button.Primary"
tools:text="@string/downloader_update_all_button"/>
<include
layout="@layout/recycler_default"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?appBackground"
android:scrollbars="vertical"
android:layout_below="@id/toolbar"
android:layout_above="@id/action"/>

View File

@@ -4,7 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?cardBackground">
android:background="?appBackground">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/MwmWidget.ToolbarStyle"

View File

@@ -5,6 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?windowBackgroundForced"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar

View File

@@ -10,7 +10,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frameLayout"
android:background="?cardBackground">
android:background="?windowBackgroundForced">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/phones_recycler"

View File

@@ -61,12 +61,12 @@
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true"
android:background="?cardBackground">
android:background="?appBackground">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:clipToPadding="false"
android:background="?cardBackground"
android:background="?appBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

View File

@@ -4,6 +4,10 @@
style="@style/MwmWidget.FrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
layout="@layout/recycler_default"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?appBackground"
android:scrollbars="vertical"/>
</FrameLayout>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -13,36 +13,12 @@
android:orientation="vertical"
android:padding="@dimen/margin_half">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/MwmWidget.M3.Editor.CardView"
card_view:cardBackgroundColor="?cardBackground"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et__timetable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@null"
android:gravity="top|start"
android:inputType="textMultiLine"
android:padding="@dimen/margin_base"
android:textAppearance="@style/MwmTextAppearance.Body3"
tools:hint="hint"
tools:text="trololo \ntrololo \ntrololo"/>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half"
card_view:cardBackgroundColor="?cardBackground"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="4dp">
style="@style/MwmWidget.M3.Editor.CardView"
app:cardBackgroundColor="?cardBackground">
<LinearLayout
android:id="@+id/examples"
@@ -50,6 +26,26 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:animateLayoutChanges="true">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/margin_half"
android:layout_marginBottom="@dimen/margin_half"
app:hintEnabled="false">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et__timetable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@null"
android:gravity="top|start"
android:inputType="textMultiLine"
android:padding="@dimen/margin_base"
android:textAppearance="@style/MwmTextAppearance.Body3"
tools:hint="hint"
tools:text="trololo \ntrololo \ntrololo"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__examples_title"

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?appBackground"
android:padding="@dimen/margin_base">
<LinearLayout

View File

@@ -5,7 +5,7 @@
style="@style/MwmTextAppearance.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?windowBackgroundForced"
android:background="?appBackground"
android:gravity="start|center_vertical"
android:paddingStart="@dimen/margin_base"
android:paddingTop="@dimen/margin_base_plus"

View File

@@ -6,7 +6,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center"
android:orientation="vertical"
android:background="?cardBackground"
android:background="?appBackground"
android:padding="@dimen/margin_base">
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"

View File

@@ -7,7 +7,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?colorSurfaceContainerHigh"
android:minHeight="@dimen/height_item_oneline"
android:paddingStart="@dimen/margin_base_plus"
android:paddingEnd="@dimen/margin_base_plus">

View File

@@ -7,7 +7,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?colorSurfaceContainerHigh"
android:minHeight="@dimen/height_item_oneline"
android:paddingStart="@dimen/margin_base_plus"
android:paddingEnd="@dimen/margin_base_plus">

View File

@@ -1,11 +1,14 @@
<androidx.constraintlayout.widget.ConstraintLayout
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/MwmWidget.M3.Editor.CardView"
android:layout_width="match_parent"
android:layout_height="@dimen/height_item_oneline"
android:background="?clickableBackground"
android:layout_marginTop="@dimen/margin_half"
android:layout_margin="@dimen/margin_eighth"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/margin_half"
android:paddingStart="@dimen/margin_half_plus"
android:paddingEnd="@dimen/margin_half_plus">
@@ -25,7 +28,6 @@
android:layout_marginStart="@dimen/margin_half"
android:layout_marginEnd="@dimen/margin_half"
android:layout_toStartOf="@id/delete_icon"
android:textColorHint="?android:textColorSecondary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/delete_icon"
app:layout_constraintStart_toEndOf="@+id/phone_icon"
@@ -41,7 +43,6 @@
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/delete_icon"
style="@style/MwmWidget.Editor.MetadataIcon"
android:layout_marginStart="@dimen/margin_half"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -49,3 +50,4 @@
app:srcCompat="@drawable/ic_delete" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -17,6 +17,7 @@
android:id="@+id/street_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.Material3.CardView.Filled"
android:layout_marginStart="@dimen/nav_street_left"
android:layout_marginEnd="@dimen/margin_quarter"
app:cardCornerRadius="@dimen/margin_half"

View File

@@ -4,7 +4,7 @@
android:id="@+id/menu_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?appBackground"
android:clickable="true"
android:visibility="gone"
tools:visibility="visible">

View File

@@ -2,7 +2,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="?cardBackground"
android:background="?appBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content">

View File

@@ -29,7 +29,7 @@
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?appBackground"
android:padding="@dimen/margin_base"
android:text="@string/editor_focus_map_on_location"
app:layout_constraintTop_toBottomOf="@+id/toolbar_point_chooser" />

View File

@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/height_block_base"
android:background="?cardBackground"
android:background="?appBackground"
android:baselineAligned="false">
<LinearLayout
android:id="@+id/btn__search_point"

View File

@@ -146,16 +146,13 @@
android:foreground="@drawable/shadow_top"
android:visibility="gone"
tools:visibility="visible">
<RelativeLayout
<LinearLayout
android:id="@+id/driving_options_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:gravity="center"
android:minHeight="@dimen/height_block_base">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/driving_options_btn_img"
android:layout_width="@dimen/margin_base_plus"
@@ -174,8 +171,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/text_light"
tools:text="test" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</FrameLayout>
<FrameLayout
style="@style/MwmWidget.FrameLayout.Elevation"

View File

@@ -11,7 +11,7 @@
<item name="android:textColorPrimary">@color/text_light</item>
<item name="android:textColorPrimaryInverse">@color/text_dark</item>
<item name="android:textColorSecondary">@color/text_light_subtitle</item>
<item name="android:windowBackground">?windowBackgroundForced</item>
<item name="android:windowBackground">?appBackground</item>
<item name="android:colorPrimaryDark">@color/bg_primary_dark</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:fontFamily">@string/robotoRegular</item>
@@ -21,7 +21,7 @@
<item name="android:statusBarColor">?colorPrimary</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="alertDialogTheme">@style/MwmTheme.AlertDialog</item>
<item name="alertDialogTheme">@style/MwmTheme.M3.AlertDialog</item>
<item name="windowBackgroundForced">@color/bg_window</item>
<item name="cardBackground">@color/bg_cards</item>
<item name="titleDialogTheme">@color/white_primary</item>

View File

@@ -120,7 +120,7 @@
<dimen name="nav_frame_padding">@dimen/margin_half</dimen>
<dimen name="zoom_buttons_margin">58dp</dimen>
<dimen name="map_buttons_bottom_margin">184dp</dimen>
<dimen name="map_buttons_bottom_margin">136dp</dimen>
<dimen name="map_buttons_bottom_max_width">300dp</dimen>
<dimen name="appbar_elevation">4dp</dimen>

View File

@@ -12,7 +12,7 @@
<item name="android:textColorPrimary">@color/text_dark</item>
<item name="android:textColorPrimaryInverse">@color/text_light</item>
<item name="android:textColorSecondary">@color/text_dark_subtitle</item>
<item name="android:windowBackground">?windowBackgroundForced</item>
<item name="android:windowBackground">?appBackground</item>
<item name="android:colorPrimaryDark">@color/bg_primary_dark</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:fontFamily">@string/robotoRegular</item>
@@ -20,7 +20,7 @@
<item name="android:windowActionBarOverlay">true</item>
<item name="clickableBackground">?selectableItemBackground</item>
<item name="android:statusBarColor">?colorPrimary</item>
<item name="alertDialogTheme">@style/MwmTheme.AlertDialog</item>
<item name="alertDialogTheme">@style/MwmTheme.M3.AlertDialog</item>
<item name="windowBackgroundForced">@color/bg_window</item>
<item name="cardBackground">@color/bg_cards</item>
<item name="titleDialogTheme">@color/black_primary</item>
@@ -185,11 +185,11 @@
</style>
<style name="MwmTheme.CardBg">
<item name="android:windowBackground">@color/bg_cards</item>
<item name="android:windowBackground">?appBackground</item>
</style>
<style name="MwmTheme.WindowBg">
<item name="android:windowBackground">@color/bg_window</item>
<item name="android:windowBackground">?appBackground</item>
</style>
<style name="MwmTheme.AlertDialog" parent="Theme.Material3.DayNight.Dialog.Alert">
@@ -243,7 +243,7 @@
<style name="MwmTheme.FullScreenDialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowBackground">?appBackground</item>
</style>
<style name="MwmTheme.MaterialTimePicker" parent="ThemeOverlay.MaterialComponents.TimePicker">
@@ -281,4 +281,11 @@
<style name="PopupMenu" parent="ThemeOverlay.Material3">
<item name="android:popupBackground">?windowBackgroundForced</item>
</style>
<!-- Theme required to apply M3 dialog style on preference screen -->
<style name="MwmTheme.M3.AlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="dialogCornerRadius">28dp</item>
<item name="cornerFamily">rounded</item>
<item name="android:colorBackground">?attr/colorSurfaceContainerHigh</item>
<item name="android:layout">@layout/m3_alert_dialog</item>
</style>
</resources>

View File

@@ -1764,6 +1764,16 @@ JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_Framework_nativeHasPlacePage
return static_cast<jboolean>(frm()->HasPlacePageInfo());
}
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_Framework_nativeHasPanoramax(JNIEnv *, jclass)
{
return static_cast<jboolean>(g_framework->GetPlacePageInfo().HasPanoramax());
}
JNIEXPORT jstring JNICALL Java_app_organicmaps_sdk_Framework_nativeGetPanoramaxUrl(JNIEnv * env, jclass)
{
return jni::ToJavaString(env, g_framework->GetPlacePageInfo().GetPanoramaxUrl());
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeMemoryWarning(JNIEnv *, jclass)
{
return frm()->MemoryWarning();

View File

@@ -349,6 +349,8 @@ public class Framework
* @return true if c++ framework has initialized internal place page object, otherwise - false.
*/
public static native boolean nativeHasPlacePageInfo();
public static native boolean nativeHasPanoramax();
public static native String nativeGetPanoramaxUrl();
public static native void nativeMemoryWarning();
public static native void nativeSaveRoute();

View File

@@ -27,8 +27,6 @@ import app.organicmaps.sdk.util.NetworkPolicy;
import app.organicmaps.sdk.util.log.Logger;
import org.chromium.base.ObserverList;
import java.util.HashMap;
public class LocationHelper implements BaseLocationProvider.Listener
{
private static final long INTERVAL_MS = 500;
@@ -58,12 +56,6 @@ public class LocationHelper implements BaseLocationProvider.Listener
private Handler mHandler;
private Runnable mLocationTimeoutRunnable = this::notifyLocationUpdateTimeout;
private static final double INTERVAL_PROVIDER_DECISION = 3.0; // seconds
private final HashMap<String, Integer> mProviderLocationCounts = new HashMap<>();
private final HashMap<String, Float> mProviderAccuracyMeans = new HashMap<>();
private double mTimeAtLastProviderChange = Double.NaN;
private String mCurrentProvider = null;
@NonNull
private final GnssStatusCompat.Callback mGnssStatusCallback = new GnssStatusCompat.Callback() {
@Override
@@ -195,6 +187,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
@Override
public void onLocationChanged(@NonNull Location location)
{
Logger.d(TAG, "provider = " + mLocationProvider.getClass().getSimpleName() + " location = " + location);
if (!isActive())
{
@@ -208,59 +201,21 @@ public class LocationHelper implements BaseLocationProvider.Listener
return;
}
updateProviderDecision(location);
if(mCurrentProvider != null && !mCurrentProvider.equals(location.getProvider())) {
Logger.d(TAG, "REJECTED: provider = " + mLocationProvider.getClass().getSimpleName() + " location = " + location);
if (mSavedLocation != null)
{
if (!LocationUtils.isLocationBetterThanLast(location, mSavedLocation))
{
Logger.d(TAG, "The new " + location + " is worse than the last " + mSavedLocation);
return;
}
}
Logger.d(TAG, "provider = " + mLocationProvider.getClass().getSimpleName() + " location = " + location);
mSavedLocation = location;
mMyPosition = null;
notifyLocationUpdated();
}
private void updateProviderDecision(Location location) {
if(Double.isNaN(mTimeAtLastProviderChange))
mTimeAtLastProviderChange = location.getElapsedRealtimeNanos() * 1.0E-9;
String provider = location.getProvider();
int count = mProviderLocationCounts.getOrDefault(provider, 0);
float average = mProviderAccuracyMeans.getOrDefault(provider, 0.0f);
float accuracy = location.getAccuracy();
float newAverage = (count * average + accuracy) / (count + 1);
mProviderLocationCounts.put(provider, count + 1);
mProviderAccuracyMeans.put(provider, newAverage);
double currentTime = location.getElapsedRealtimeNanos();
double timeDiff = (currentTime - mTimeAtLastProviderChange) * 1.0E-9;
if(timeDiff > INTERVAL_PROVIDER_DECISION) {
mCurrentProvider = getMinAccuracyProvider();
Logger.d(TAG, "Selected: " + mCurrentProvider + ", with acc. " + mProviderAccuracyMeans.get(mCurrentProvider));
mTimeAtLastProviderChange = currentTime;
mProviderLocationCounts.clear();
mProviderAccuracyMeans.clear();
}
}
private String getMinAccuracyProvider() {
String minAccuracyProvider = null;
float minAccuracy = Float.MAX_VALUE;
for(String p : mProviderAccuracyMeans.keySet()) {
float pAccuracy = mProviderAccuracyMeans.get(p);
if(pAccuracy < minAccuracy) {
minAccuracy = pAccuracy;
minAccuracyProvider = p;
}
}
return minAccuracyProvider;
}
// Used by GoogleFusedLocationProvider.
// Used by GoogleFusedLocationProvider.
@SuppressWarnings("unused")
@Override
@UiThread

View File

@@ -20,8 +20,7 @@ public final class LocationState
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE_COMPASS,
FOLLOW_AND_ROTATE_ROUTE})
@IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE})
@interface Value
{}
@@ -30,8 +29,7 @@ public final class LocationState
public static final int NOT_FOLLOW_NO_POSITION = 1;
public static final int NOT_FOLLOW = 2;
public static final int FOLLOW = 3;
public static final int FOLLOW_AND_ROTATE_COMPASS = 4;
public static final int FOLLOW_AND_ROTATE_ROUTE = 5;
public static final int FOLLOW_AND_ROTATE = 4;
// These constants should correspond to values defined in platform/location.hpp
// Leave 0-value as no any error.
@@ -71,8 +69,7 @@ public final class LocationState
case NOT_FOLLOW_NO_POSITION -> "NOT_FOLLOW_NO_POSITION";
case NOT_FOLLOW -> "NOT_FOLLOW";
case FOLLOW -> "FOLLOW";
case FOLLOW_AND_ROTATE_COMPASS -> "FOLLOW_AND_ROTATE_COMPASS";
case FOLLOW_AND_ROTATE_ROUTE -> "FOLLOW_AND_ROTATE_ROUTE";
case FOLLOW_AND_ROTATE -> "FOLLOW_AND_ROTATE";
default -> "Unknown: " + mode;
};
}

View File

@@ -81,6 +81,20 @@ public class LocationUtils
return location.getAccuracy() > 0.0f;
}
public static boolean isLocationBetterThanLast(@NonNull Location newLocation, @NonNull Location lastLocation)
{
if (newLocation.getElapsedRealtimeNanos() < lastLocation.getElapsedRealtimeNanos())
return false;
// As described in isAccuracySatisfied, GPS may have zero accuracy "for some reasons".
if (isFromGpsProvider(lastLocation) && lastLocation.getAccuracy() == 0.0f)
return true;
double speed = Math.max(DEFAULT_SPEED_MPS, (newLocation.getSpeed() + lastLocation.getSpeed()) / 2.0);
double lastAccuracy = lastLocation.getAccuracy() + speed * LocationUtils.getTimeDiff(lastLocation, newLocation);
return newLocation.getAccuracy() < lastAccuracy;
}
public static boolean areLocationServicesTurnedOn(@NonNull Context context)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)

View File

@@ -947,6 +947,9 @@
<string name="type.railway.monorail">Monorail</string>
<string name="type.railway.monorail.bridge">Monorail Bridge</string>
<string name="type.railway.monorail.tunnel">Monorail Tunnel</string>
<string name="type.railway.miniature">Miniature Railway</string>
<string name="type.railway.miniature.bridge">Miniature Railway Bridge</string>
<string name="type.railway.miniature.tunnel">Miniature Railway Tunnel</string>
<string name="type.railway.narrow_gauge">Narrow Gauge Rail</string>
<string name="type.railway.narrow_gauge.bridge">Narrow Gauge Rail Bridge</string>
<string name="type.railway.narrow_gauge.tunnel">Narrow Gauge Rail Tunnel</string>
@@ -1421,6 +1424,7 @@
<string name="type.tourism.information.board">Information Board</string>
<string name="type.tourism.information.guidepost">Guidepost</string>
<string name="type.tourism.information.map">Tourist Map</string>
<string name="type.tourism.information.tactile_map">Tactile Map</string>
<string name="type.tourism.information.office">Tourist Office</string>
<string name="type.tourism.information.visitor_centre">Visitor Centre</string>
<string name="type.amenity.ranger_station">Ranger Station</string>

View File

@@ -402,6 +402,7 @@
"tourism-chalet|@category_hotel": "5Holiday Cottage|5vacation home|4Chalet",
"tourism-information-board": "Information Board",
"tourism-information-map": "Tourist map|map|4Information",
"tourism-information-tactile_map": "Tactile map|map|4Information",
"tourism-information-guidepost": "Guidepost",
"aerialway-station": "Aerialway Station|5Cable car station",
"aeroway-helipad": "4Helipad",

File diff suppressed because it is too large Load Diff

View File

@@ -518,7 +518,7 @@ piste:type|sled;402;
leisure|beach_resort;403;
leisure|dog_park;404;
aerialway|gondola;405;
deprecated:historic|museum:10.2021;[historic=museum];x;name;int_name;406;tourism|museum
tourism|information|tactile_map;[tourism=information][information=tactile_map];;name;int_name;406;
highway|living_street|bridge;[highway=living_street][bridge?];;name;int_name;407;
leisure|track|area;[leisure=track][area?];;name;int_name;408;
railway|monorail;409;
@@ -757,9 +757,9 @@ highway|track|grade5|permissive;[highway=track][tracktype=grade5][access=permiss
lateral|port;[seamark:buoy_lateral:category=port],[seamark:beacon_lateral:category=port][seamark:beacon_lateral:shape=tower],[seamark:beacon_lateral:category=port][seamark:beacon_lateral:shape=lattice],[seamark:beacon_lateral:category=port][seamark:beacon_lateral:shape=pile],[seamark:beacon_lateral:category=port][seamark:beacon_lateral:shape=buoyant];;;;632;
lateral|starboard;[seamark:buoy_lateral:category=starboard],[seamark:beacon_lateral:category=starboard][seamark:beacon_lateral:shape=tower],[seamark:beacon_lateral:category=starboard][seamark:beacon_lateral:shape=lattice],[seamark:beacon_lateral:category=starboard][seamark:beacon_lateral:shape=pile],[seamark:beacon_lateral:category=starboard][seamark:beacon_lateral:shape=buoyant];;;;633;
highway|tertiary_link|tunnel;[highway=tertiary_link][tunnel?];;name;int_name;634;
deprecated|deprecated;635;x
deprecated|deprecated;636;x
deprecated|deprecated;637;x
railway|miniature;635;
railway|miniature|bridge;[railway=miniature][bridge?];;name;int_name;636;
railway|miniature|tunnel;[railway=miniature][tunnel?];;name;int_name;637;
deprecated|deprecated;638;x
deprecated|deprecated;639;x
deprecated|deprecated;640;x
@@ -1758,3 +1758,4 @@ amenity|luggage_locker;1629;
building|guardhouse;[building=guardhouse],[amenity=security_booth],[amenity=checkpoint];;;;1630;
office|security;1631;
shop|lighting;1632;
panoramax|image;1633;
Can't render this file because it contains an unexpected character in line 7 and column 16.

View File

@@ -449,6 +449,7 @@ area|z13-[landuse=quarry],
area|z13-[power=plant],
area|z13-[power=substation],
area|z13-[power=generator],
area|z13-[man_made=wastewater_plant]
{fill-opacity: 1; fill-color: @industrial;}
area|z13-[landuse=construction],

View File

@@ -592,6 +592,7 @@ area|z15-[landuse=industrial],
area|z15-[landuse=construction],
area|z15-[landuse=railway],
area|z15-[landuse=quarry],
area|z15-[man_made=wastewater_plant],
node|z15-[landuse=industrial],
node|z15-[landuse=construction],
node|z15-[landuse=landfill],

View File

@@ -766,7 +766,8 @@ node|z16-[tourism=information][information=board]
{icon-image: board.svg;text-offset: 1;icon-min-distance: 10;}
node|z16-[tourism=information][information=guidepost]
{icon-image: guidepost.svg;text-offset: 1;icon-min-distance: 10;}
node|z16-[tourism=information][information=map]
node|z16-[tourism=information][information=map],
node|z16-[tourism=information][information=tactile_map],
{icon-image: map.svg;text-offset: 1;icon-min-distance: 10;}
node|z15-[amenity=ranger_station],

View File

@@ -70,8 +70,16 @@ node[amenity=arts_centre],
node[amenity=community_centre],
node[amenity=conference_centre],
node[amenity=exhibition_centre],
node[amenity=place_of_worship]
node[amenity=place_of_worship],
node[amenity=social_facility],
node[historic=castle][castle_type=castrum],
node[historic=castle][castle_type=defensive],
node[historic=castle][castle_type=fortified_church],
node[historic=castle][castle_type=fortress],
node[historic=castle][castle_type=hillfort],
node[historic=castle][castle_type=kremlin],
node[historic=castle][castle_type=shiro],
node[historic=fortress],
node[historic=ship],
node[leisure=hackerspace],
node[social_facility],

View File

@@ -1195,6 +1195,7 @@ line|z14-[railway=monorail],
line|z15-[railway=narrow_gauge],
line|z15-[railway=construction],
line|z15-[railway=preserved],
line|z16-[railway=miniature],
line|z16-[railway=disused],
line|z16-[railway=abandoned],
{color: @railway; opacity: 0.7;}
@@ -1214,12 +1215,14 @@ line|z13-[railway=rail][bridge?]::bridgewhite,
line|z13-[railway=subway][bridge?]::bridgewhite,
line|z13-[railway=light_rail][bridge?]::bridgewhite,
line|z15-[railway=preserved][bridge?]::bridgewhite,
line|z16-[railway=miniature][bridge?]::bridgewhite,
line|z16-[railway=abandoned][bridge?]::bridgewhite,
{casing-linecap: butt;casing-color:@bridge_background;casing-opacity: 0.8;}
line|z16-[railway=rail][bridge?]::bridgeblack,
line|z16-[railway=subway][bridge?]::bridgeblack,
line|z16-[railway=light_rail][bridge?]::bridgeblack,
line|z16-[railway=preserved][bridge?]::bridgeblack,
line|z16-[railway=miniature][bridge?]::bridgeblack,
line|z16-[railway=abandoned][bridge?]::bridgeblack,
{casing-linecap: butt;casing-color:@bridge_casing;casing-opacity: 0.7;}
@@ -1370,6 +1373,7 @@ line|z18-[railway=light_rail][!tunnel]::dash,
line|z15-[railway=preserved],
line|z16-[railway=miniature],
line|z16-[railway=abandoned],
{width: 1.6;dashes: 6.3,6.3;}
@@ -1419,23 +1423,27 @@ line|z13-15[railway=rail][bridge?]::bridgewhite,
line|z13-15[railway=subway][bridge?]::bridgewhite,
line|z13-15[railway=light_rail][bridge?]::bridgewhite,
line|z15[railway=preserved][bridge?]::bridgewhite,
line|z16[railway=miniature][bridge?]::bridgewhite,
{casing-width-add: 1.2;}
line|z16[railway=rail][bridge?]::bridgewhite,
line|z16[railway=subway][bridge?]::bridgewhite,
line|z16[railway=light_rail][bridge?]::bridgewhite,
line|z16[railway=preserved][bridge?]::bridgewhite,
line|z16[railway=miniature][bridge?]::bridgewhite,
line|z16[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 1.6;}
line|z17[railway=rail][bridge?]::bridgewhite,
line|z17[railway=subway][bridge?]::bridgewhite,
line|z17[railway=light_rail][bridge?]::bridgewhite,
line|z17[railway=preserved][bridge?]::bridgewhite,
line|z17[railway=miniature][bridge?]::bridgewhite,
line|z17[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 2.3;}
line|z18-[railway=rail][bridge?]::bridgewhite,
line|z18-[railway=subway][bridge?]::bridgewhite,
line|z18-[railway=light_rail][bridge?]::bridgewhite,
line|z18-[railway=preserved][bridge?]::bridgewhite,
line|z18-[railway=miniature][bridge?]::bridgewhite,
line|z18-[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 3.5;}
@@ -1443,18 +1451,21 @@ line|z16[railway=rail][bridge?]::bridgeblack,
line|z16[railway=subway][bridge?]::bridgeblack,
line|z16[railway=light_rail][bridge?]::bridgeblack,
line|z16[railway=preserved][bridge?]::bridgeblack,
line|z16[railway=miniature][bridge?]::bridgeblack,
line|z16[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 2.2;}
line|z17[railway=rail][bridge?]::bridgeblack,
line|z17[railway=subway][bridge?]::bridgeblack,
line|z17[railway=light_rail][bridge?]::bridgeblack,
line|z17[railway=preserved][bridge?]::bridgeblack,
line|z17[railway=miniature][bridge?]::bridgeblack,
line|z17[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 3;}
line|z18-[railway=rail][bridge?]::bridgeblack,
line|z18-[railway=subway][bridge?]::bridgeblack,
line|z18-[railway=light_rail][bridge?]::bridgeblack,
line|z18-[railway=preserved][bridge?]::bridgeblack,
line|z18-[railway=miniature][bridge?]::bridgeblack,
line|z18-[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 4.4;}

View File

@@ -208,6 +208,7 @@ landuse-industrial # area z13- (also has captio
landuse-industrial-mine # area z13- (also has icon z15-, caption(optional) z15-)
landuse-quarry # area z13- (also has icon z15-, caption(optional) z15-)
landuse-railway # area z13- (also has caption z15-)
man_made-wastewater_plant # area z13- (also has caption z15-)
man_made-works # area z13- (also has icon z16-, caption(optional) z17-)
power-generator # area z13- (also has icon z17-)
power-generator-gas # area z13- (also has icon z17-)

View File

@@ -299,6 +299,9 @@ railway-abandoned-bridge # line z16- (also has line::
railway-abandoned-tunnel # line z16-
railway-construction # line z15-
railway-disused # line z16-
railway-miniature # line z16-
railway-miniature-bridge # line z16- (also has line::bridgeblack z16-, line::bridgewhite z16-)
railway-miniature-tunnel # line z16-
railway-preserved # line z15-
railway-preserved-bridge # line z15- (also has line::bridgeblack z16-, line::bridgewhite z15-)
railway-preserved-tunnel # line z15-
@@ -352,6 +355,7 @@ highway-trunk_link-bridge::bridgewhite # line::bridgewhite z14- (al
highway-unclassified-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z13-)
railway-abandoned-bridge::bridgewhite # line::bridgewhite z16- (also has line z16-, line::bridgeblack z16-)
railway-light_rail-bridge::bridgewhite # line::bridgewhite z13- (also has line z13-, line::bridgeblack z16-, line::dash z16-)
railway-miniature-bridge::bridgewhite # line::bridgewhite z16- (also has line z16-, line::bridgeblack z16-)
railway-preserved-bridge::bridgewhite # line::bridgewhite z15- (also has line z15-, line::bridgeblack z16-)
railway-rail-branch-bridge::bridgewhite # line::bridgewhite z13- (also has line z11-, line::bridgeblack z16-, line::dash z16-)
railway-rail-bridge::bridgewhite # line::bridgewhite z13- (also has line z11-, line::bridgeblack z16-, line::dash z16-)
@@ -388,6 +392,7 @@ highway-trunk_link-bridge::bridgeblack # line::bridgeblack z14- (al
highway-unclassified-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z13-)
railway-abandoned-bridge::bridgeblack # line::bridgeblack z16- (also has line z16-, line::bridgewhite z16-)
railway-light_rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z13-, line::dash z16-)
railway-miniature-bridge::bridgeblack # line::bridgeblack z16- (also has line z16-, line::bridgewhite z16-)
railway-preserved-bridge::bridgeblack # line::bridgeblack z16- (also has line z15-, line::bridgewhite z15-)
railway-rail-branch-bridge::bridgeblack # line::bridgeblack z16- (also has line z11-, line::bridgewhite z13-, line::dash z16-)
railway-rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z11-, line::bridgewhite z13-, line::dash z16-)

View File

@@ -1374,6 +1374,7 @@ leisure-slipway # icon z17- (also has captio
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z17- (also has caption(optional) z18-)
man_made-wastewater_plant # caption z15- (also has area z13-)
power-generator # icon z17- (also has area z13-)
power-generator-gas # icon z17- (also has area z13-)
power-generator-hydro # icon z17- (also has area z13-)
@@ -2386,6 +2387,7 @@ tourism-information # icon z16- (also has captio
tourism-information-board # icon z16- (also has caption(optional) z16-)
tourism-information-guidepost # icon z16- (also has caption(optional) z16-)
tourism-information-map # icon z16- (also has caption(optional) z16-)
tourism-information-tactile_map # icon z16- (also has caption(optional) z16-)
=== -9940
amenity # caption z19-
@@ -2477,4 +2479,5 @@ entrance-service # icon z19- (also has captio
# tourism-information-board # caption(optional) z16- (also has icon z16-)
# tourism-information-guidepost # caption(optional) z16- (also has icon z16-)
# tourism-information-map # caption(optional) z16- (also has icon z16-)
# tourism-information-tactile_map # caption(optional) z16- (also has icon z16-)
=== -10000

View File

@@ -353,6 +353,7 @@ node|z15-[tourism=information][information=board],
node|z15-[tourism=information][information=guidepost],
{icon-image: guidepost.svg;}
node|z15-[tourism=information][information=map],
node|z15-[tourism=information][information=tactile_map],
{icon-image: map.svg;}
node|z13-[amenity=ranger_station],

View File

@@ -552,14 +552,17 @@ line|z18-[railway=rail][service=service]::dash,
line|z13-[railway=construction],
line|z13-[railway=preserved],
line|z13-[railway=miniature],
line|z13-[railway=disused],
line|z13-[railway=abandoned],
{color: @railway; opacity:1;}
line|z13-[railway=preserved],
line|z13-[railway=miniature],
line|z13-[railway=abandoned]
{width: 1.6; dashes: 6.3,6.3;}
line|z16-[railway=preserved],
line|z16-[railway=miniature],
line|z16-[railway=abandoned]
{width: 2.2; dashes: 8,8;}

View File

@@ -208,6 +208,7 @@ landuse-industrial # area z13- (also has captio
landuse-industrial-mine # area z13- (also has icon z15-, caption(optional) z15-)
landuse-quarry # area z13- (also has icon z15-, caption(optional) z15-)
landuse-railway # area z13- (also has caption z15-)
man_made-wastewater_plant # area z13- (also has caption z15-)
man_made-works # area z13- (also has icon z16-, caption(optional) z17-)
power-generator # area z13- (also has icon z17-)
power-generator-gas # area z13- (also has icon z17-)

View File

@@ -301,6 +301,9 @@ railway-abandoned-bridge # line z13- (also has line::
railway-abandoned-tunnel # line z13-
railway-construction # line z13-
railway-disused # line z13-
railway-miniature # line z13-
railway-miniature-bridge # line z13- (also has line::bridgeblack z16-, line::bridgewhite z16-)
railway-miniature-tunnel # line z13-
railway-preserved # line z13-
railway-preserved-bridge # line z13- (also has line::bridgeblack z16-, line::bridgewhite z15-)
railway-preserved-tunnel # line z13-
@@ -354,6 +357,7 @@ highway-trunk_link-bridge::bridgewhite # line::bridgewhite z14- (al
highway-unclassified-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z13-)
railway-abandoned-bridge::bridgewhite # line::bridgewhite z16- (also has line z13-, line::bridgeblack z16-)
railway-light_rail-bridge::bridgewhite # line::bridgewhite z13- (also has line z13-, line::bridgeblack z16-, line::dash z16-)
railway-miniature-bridge::bridgewhite # line::bridgewhite z16- (also has line z13-, line::bridgeblack z16-)
railway-preserved-bridge::bridgewhite # line::bridgewhite z15- (also has line z13-, line::bridgeblack z16-)
railway-rail-branch-bridge::bridgewhite # line::bridgewhite z13- (also has line z10-, line::bridgeblack z16-, line::dash z15-)
railway-rail-bridge::bridgewhite # line::bridgewhite z13- (also has line z10-, line::bridgeblack z16-, line::dash z15-)
@@ -390,6 +394,7 @@ highway-trunk_link-bridge::bridgeblack # line::bridgeblack z14- (al
highway-unclassified-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z13-)
railway-abandoned-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z16-)
railway-light_rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z13-, line::dash z16-)
railway-miniature-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z16-)
railway-preserved-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z15-)
railway-rail-branch-bridge::bridgeblack # line::bridgeblack z16- (also has line z10-, line::bridgewhite z13-, line::dash z15-)
railway-rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z10-, line::bridgewhite z13-, line::dash z15-)

View File

@@ -1377,6 +1377,7 @@ leisure-slipway # icon z17- (also has captio
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z14- (also has caption(optional) z18-)
man_made-wastewater_plant # caption z15- (also has area z13-)
power-generator # icon z17- (also has area z13-)
power-generator-gas # icon z17- (also has area z13-)
power-generator-hydro # icon z17- (also has area z13-)
@@ -2392,6 +2393,7 @@ tourism-information # icon z15- (also has captio
tourism-information-board # icon z15- (also has caption(optional) z15-)
tourism-information-guidepost # icon z15- (also has caption(optional) z15-)
tourism-information-map # icon z15- (also has caption(optional) z15-)
tourism-information-tactile_map # icon z15- (also has caption(optional) z15-)
=== -9940
amenity # caption z19-
@@ -2483,4 +2485,5 @@ entrance-service # icon z19- (also has captio
# tourism-information-board # caption(optional) z15- (also has icon z15-)
# tourism-information-guidepost # caption(optional) z15- (also has icon z15-)
# tourism-information-map # caption(optional) z15- (also has icon z15-)
# tourism-information-tactile_map # caption(optional) z15- (also has icon z15-)
=== -10000

View File

@@ -310,6 +310,7 @@ area|z15-[landuse=quarry],
area|z15-[power=plant],
area|z15-[power=substation],
area|z15-[power=generator],
area|z15-[man_made=wastewater_plant],
{fill-opacity: 1; fill-color: @industrial;}
area|z15-[landuse=construction],

View File

@@ -720,6 +720,7 @@ line|z15-[railway=narrow_gauge],
line|z16-[railway=construction],
line|z16-[railway=disused],
line|z16-[railway=preserved],
line|z16-[railway=miniature],
line|z16-[railway=abandoned],
{color: @railway; opacity: 0.6;}
@@ -740,6 +741,7 @@ line|z14-[railway=rail][bridge?]::bridgewhite,
line|z14-[railway=subway][bridge?]::bridgewhite,
line|z14-[railway=light_rail][bridge?]::bridgewhite,
line|z16-[railway=preserved][bridge?]::bridgewhite,
line|z16-[railway=miniature][bridge?]::bridgewhite,
line|z16-[railway=abandoned][bridge?]::bridgewhite,
line|z16-[railway=tram][bridge?]::bridgewhite,
{casing-linecap: butt;casing-color:@bridge_background; opacity: 0.8;}
@@ -747,6 +749,7 @@ line|z16-[railway=rail][bridge?]::bridgeblack,
line|z16-[railway=subway][bridge?]::bridgeblack,
line|z16-[railway=light_rail][bridge?]::bridgeblack,
line|z16-[railway=preserved][bridge?]::bridgeblack,
line|z16-[railway=miniature][bridge?]::bridgeblack,
line|z16-[railway=abandoned][bridge?]::bridgeblack,
line|z16-[railway=tram][bridge?]::bridgeblack,
{casing-linecap: butt;casing-color:@bridge_casing; opacity: 0.6;}
@@ -910,6 +913,7 @@ line|z19-[railway=light_rail][!tunnel]::dash,
line|z16-[railway=preserved],
line|z16-[railway=miniature],
line|z16-[railway=abandoned]
{width: 1.6;dashes: 6.3,6.3;}
@@ -945,18 +949,21 @@ line|z16[railway=rail][bridge?]::bridgewhite,
line|z16[railway=subway][bridge?]::bridgewhite,
line|z16[railway=light_rail][bridge?]::bridgewhite,
line|z16[railway=preserved][bridge?]::bridgewhite,
line|z16[railway=miniature][bridge?]::bridgewhite,
line|z16[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 1.6;}
line|z17[railway=rail][bridge?]::bridgewhite,
line|z17[railway=subway][bridge?]::bridgewhite,
line|z17[railway=light_rail][bridge?]::bridgewhite,
line|z17[railway=preserved][bridge?]::bridgewhite,
line|z17[railway=miniature][bridge?]::bridgewhite,
line|z17[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 2.3;}
line|z18-[railway=rail][bridge?]::bridgewhite,
line|z18-[railway=subway][bridge?]::bridgewhite,
line|z18-[railway=light_rail][bridge?]::bridgewhite,
line|z18-[railway=preserved][bridge?]::bridgewhite,
line|z18-[railway=miniature][bridge?]::bridgewhite,
line|z18-[railway=abandoned][bridge?]::bridgewhite,
{casing-width-add: 3.5;}
@@ -964,18 +971,21 @@ line|z16[railway=rail][bridge?]::bridgeblack,
line|z16[railway=subway][bridge?]::bridgeblack,
line|z16[railway=light_rail][bridge?]::bridgeblack,
line|z16[railway=preserved][bridge?]::bridgeblack,
line|z16[railway=miniature][bridge?]::bridgeblack,
line|z16[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 2.2;}
line|z17[railway=rail][bridge?]::bridgeblack,
line|z17[railway=subway][bridge?]::bridgeblack,
line|z17[railway=light_rail][bridge?]::bridgeblack,
line|z17[railway=preserved][bridge?]::bridgeblack,
line|z17[railway=miniature][bridge?]::bridgeblack,
line|z17[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 3;}
line|z18-[railway=rail][bridge?]::bridgeblack,
line|z18-[railway=subway][bridge?]::bridgeblack,
line|z18-[railway=light_rail][bridge?]::bridgeblack,
line|z18-[railway=preserved][bridge?]::bridgeblack,
line|z18-[railway=miniature][bridge?]::bridgeblack,
line|z18-[railway=abandoned][bridge?]::bridgeblack,
{casing-width-add: 4.4;}

View File

@@ -110,6 +110,7 @@ landuse-industrial-mine # area z15-
landuse-landfill # area z15- (also has caption z15-)
landuse-quarry # area z15- (also has caption z15-)
landuse-railway # area z15- (also has caption z15-)
man_made-wastewater_plant # area z15-
man_made-works # area z15-
power-generator # area z15-
power-generator-gas # area z15-

View File

@@ -276,6 +276,9 @@ railway-abandoned-bridge # line z16- (also has line::
railway-abandoned-tunnel # line z16-
railway-construction # line z16-
railway-disused # line z16-
railway-miniature # line z16-
railway-miniature-bridge # line z16- (also has line::bridgeblack z16-, line::bridgewhite z16-)
railway-miniature-tunnel # line z16-
railway-preserved # line z16-
railway-preserved-bridge # line z16- (also has line::bridgeblack z16-, line::bridgewhite z16-)
railway-preserved-tunnel # line z16-
@@ -295,6 +298,7 @@ highway-trunk_link-bridge::bridgewhite # line::bridgewhite z14- (al
highway-unclassified-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z14-, pathtext z14-)
railway-abandoned-bridge::bridgewhite # line::bridgewhite z16- (also has line z16-, line::bridgeblack z16-)
railway-light_rail-bridge::bridgewhite # line::bridgewhite z14- (also has line z13-, line::bridgeblack z16-, line::dash z16-)
railway-miniature-bridge::bridgewhite # line::bridgewhite z16- (also has line z16-, line::bridgeblack z16-)
railway-preserved-bridge::bridgewhite # line::bridgewhite z16- (also has line z16-, line::bridgeblack z16-)
railway-rail-branch-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z16-, line::dash z16-)
railway-rail-bridge::bridgewhite # line::bridgewhite z14- (also has line z11-, line::bridgeblack z16-, line::dash z16-)
@@ -321,6 +325,7 @@ highway-trunk_link-bridge::bridgeblack # line::bridgeblack z14- (al
highway-unclassified-bridge::bridgeblack # line::bridgeblack z14- (also has line z11-, line::bridgewhite z14-, pathtext z14-)
railway-abandoned-bridge::bridgeblack # line::bridgeblack z16- (also has line z16-, line::bridgewhite z16-)
railway-light_rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z13-, line::bridgewhite z14-, line::dash z16-)
railway-miniature-bridge::bridgeblack # line::bridgeblack z16- (also has line z16-, line::bridgewhite z16-)
railway-preserved-bridge::bridgeblack # line::bridgeblack z16- (also has line z16-, line::bridgewhite z16-)
railway-rail-branch-bridge::bridgeblack # line::bridgeblack z16- (also has line z11-, line::bridgewhite z14-, line::dash z16-)
railway-rail-bridge::bridgeblack # line::bridgeblack z16- (also has line z11-, line::bridgewhite z14-, line::dash z16-)

View File

@@ -111,6 +111,21 @@ sudo apk add \
sqlite-dev
```
#### Void
```bash
xbps-install -S \
wget \
optipng \
cmake \
ninja \
qt6-base-devel \
qt6-svg-devel \
qt6-position-devel \
python3-pip
pip3 install "protobuf<3.21" --break-system-packages
```
#### macOS
```bash

View File

@@ -18,7 +18,13 @@ Owners of the CoMaps team and repositories on Codeberg
- [@comaps/admins](https://codeberg.org/org/comaps/teams/admins)
- Administrators of different repositories on Codeberg
Administrators of different repositories on Codeberg
## Mergers
- [compaps/mergers](https://codeberg.org/org/comaps/teams/mergers)
Contributors who have merge permissions on CoMaps repositories, can do "official reviews" (those that count towards PR approvals), and can create branches/tags.
## Android

View File

@@ -147,6 +147,8 @@ set(SRC
osm_o5m_source.hpp
osm_source.cpp
osm_xml_source.hpp
panoramax_generator.cpp
panoramax_generator.hpp
place_processor.cpp
place_processor.hpp
platform_helpers.cpp

View File

@@ -7,6 +7,7 @@
#include "generator/feature_builder.hpp"
#include "generator/final_processor_utils.hpp"
#include "generator/isolines_generator.hpp"
#include "generator/panoramax_generator.hpp"
#include "generator/mini_roundabout_transformer.hpp"
#include "generator/node_mixer.hpp"
#include "generator/osm2type.hpp"
@@ -68,6 +69,10 @@ void CountryFinalProcessor::Process()
if (!m_isolinesPath.empty())
AddIsolines();
LOG(LINFO, ("Adding panoramax..."));
if (!m_panoramaxPath.empty())
AddPanoramax();
// DropProhibitedSpeedCameras();
LOG(LINFO, ("Processing building parts..."));
ProcessBuildingParts();
@@ -293,6 +298,22 @@ void CountryFinalProcessor::AddAddresses()
LOG(LINFO, ("Total addresses:", totalStats));
}
void CountryFinalProcessor::AddPanoramax()
{
if (m_panoramaxPath.empty())
return;
PanoramaxFeaturesGenerator panoramaxGenerator(m_panoramaxPath);
ForEachMwmTmp(m_temporaryMwmPath, [&](auto const & name, auto const & path)
{
if (!IsCountry(name))
return;
FeatureBuilderWriter<serialization_policy::MaxAccuracy> writer(path, FileWriter::Op::OP_APPEND);
panoramaxGenerator.GeneratePanoramax(name, [&](auto const & fb) { writer.Write(fb); });
}, m_threadsCount);
}
void CountryFinalProcessor::ProcessCoastline()
{
/// @todo We can remove MinSize at all.

View File

@@ -24,6 +24,7 @@ public:
void SetIsolinesDir(std::string const & dir) { m_isolinesPath = dir; }
void SetAddressesDir(std::string const & dir) { m_addressPath = dir; }
void SetPanoramaxDir(std::string const & dir) { m_panoramaxPath = dir; }
void SetCityBoundariesFiles(std::string const & collectorFile) { m_boundariesCollectorFile = collectorFile; }
@@ -39,6 +40,7 @@ private:
void AddFakeNodes();
void AddIsolines();
void AddAddresses();
void AddPanoramax();
void DropProhibitedSpeedCameras();
// void Finish();
@@ -47,7 +49,7 @@ private:
std::string m_borderPath;
std::string m_temporaryMwmPath;
std::string m_intermediateDir;
std::string m_isolinesPath, m_addressPath;
std::string m_isolinesPath, m_addressPath, m_panoramaxPath;
std::string m_boundariesCollectorFile;
std::string m_coastlineGeomFilename;
std::string m_worldCoastsFilename;

View File

@@ -39,8 +39,8 @@ struct GenerateInfo
std::string m_cacheDir;
// External folders with additional preprocessed data (isolines, addresses).
std::string m_isolinesDir, m_addressesDir;
// External folders with additional preprocessed data (isolines, addresses, panoramax).
std::string m_isolinesDir, m_addressesDir, m_panoramaxDir;
// Current generated file name if --output option is defined.
std::string m_fileName;

View File

@@ -2979,6 +2979,7 @@ UNIT_CLASS_TEST(TestWithClassificator, OsmType_ComplexTypesSmoke)
{{"tourism", "information", "board"}, {{"tourism", "information"}, {"information", "board"}}},
{{"tourism", "information", "guidepost"}, {{"tourism", "information"}, {"information", "guidepost"}}},
{{"tourism", "information", "map"}, {{"tourism", "information"}, {"information", "map"}}},
{{"tourism", "information", "tactile_map"}, {{"tourism", "information"}, {"information", "tactile_map"}}},
{{"tourism", "information", "office"}, {{"tourism", "information"}, {"information", "office"}}},
//{{"waterway", "canal", "tunnel"}, {{"waterway", "canal"}, {"tunnel", "any_value"}}},
//{{"waterway", "river", "tunnel"}, {{"waterway", "river"}, {"tunnel", "any_value"}}},

View File

@@ -107,6 +107,7 @@ DEFINE_string(nodes_list_path, "",
DEFINE_bool(generate_isolines_info, false, "Generate the isolines info section");
DEFINE_string(isolines_path, "", "Path to isolines directory. If set, adds isolines linear features.");
DEFINE_string(addresses_path, "", "Path to addresses directory. If set, adds addr:interpolation features.");
DEFINE_string(panoramax_path, "", "Path to panoramax directory. If set, adds panoramax imagery point features.");
// Routing.
DEFINE_bool(make_routing_index, false, "Make sections with the routing information.");
@@ -243,6 +244,7 @@ MAIN_WITH_ERROR_HANDLING([](int argc, char ** argv)
genInfo.m_complexHierarchyFilename = FLAGS_complex_hierarchy_data;
genInfo.m_isolinesDir = FLAGS_isolines_path;
genInfo.m_addressesDir = FLAGS_addresses_path;
genInfo.m_panoramaxDir = FLAGS_panoramax_path;
// Use merged style.
GetStyleReader().SetCurrentStyle(MapStyleMerged);

View File

@@ -151,7 +151,7 @@ public:
// Set speed as-is from parent link.
if (parentHwType == hwType)
return {{s.GetForward(), s.GetUnits()}};
/* Commenting this part out as an attempt to solve displayed (and inexistent) max speed in highway links (https://codeberg.org/comaps/comaps/issues/1000)
using routing::HighwayType;
if ((*parentHwType == HighwayType::HighwayMotorway && hwType == HighwayType::HighwayMotorwayLink) ||
(*parentHwType == HighwayType::HighwayTrunk && hwType == HighwayType::HighwayTrunkLink) ||
@@ -163,6 +163,7 @@ public:
return converter.ClosestValidMacro(
{base::asserted_cast<MaxspeedType>(std::lround(s.GetForward() * kLinkToMainSpeedFactor)), s.GetUnits()});
}
*/
return {};
};

View File

@@ -0,0 +1,141 @@
#include "generator/panoramax_generator.hpp"
#include "indexer/classificator.hpp"
#include "indexer/feature_meta.hpp"
#include "coding/file_reader.hpp"
#include "coding/read_write_utils.hpp"
#include "geometry/mercator.hpp"
#include "base/assert.hpp"
#include "base/logging.hpp"
#include "base/string_utils.hpp"
#include <cstdint>
#include <fstream>
namespace generator
{
namespace
{
std::string_view const kPanoramax = "panoramax";
std::string_view const kImage = "image";
std::string GetPanoramaxFilePath(std::string const & countryName, std::string const & panoramaxDir)
{
return panoramaxDir + "/" + countryName + ".panoramax";
}
struct PanoramaxPoint
{
double lat;
double lon;
std::string imageId;
};
bool LoadPanoramaxPoints(std::string const & filePath, std::vector<PanoramaxPoint> & points)
{
try
{
std::ifstream file(filePath, std::ios::binary);
if (!file.is_open())
{
LOG(LWARNING, ("Can't open panoramax file", filePath));
return false;
}
// Read header
uint32_t version;
uint64_t pointCount;
file.read(reinterpret_cast<char*>(&version), sizeof(version));
file.read(reinterpret_cast<char*>(&pointCount), sizeof(pointCount));
if (version != 1)
{
LOG(LERROR, ("Unsupported panoramax file version", version));
return false;
}
points.reserve(static_cast<size_t>(pointCount));
// Read points
for (uint64_t i = 0; i < pointCount; ++i)
{
PanoramaxPoint point;
file.read(reinterpret_cast<char*>(&point.lat), sizeof(point.lat));
file.read(reinterpret_cast<char*>(&point.lon), sizeof(point.lon));
// Read image_id (length-prefixed string)
uint32_t imageIdLength;
file.read(reinterpret_cast<char*>(&imageIdLength), sizeof(imageIdLength));
if (imageIdLength > 0 && imageIdLength < 10000) // Sanity check
{
point.imageId.resize(imageIdLength);
file.read(&point.imageId[0], imageIdLength);
}
if (file.fail())
{
LOG(LERROR, ("Error reading panoramax point", i, "from", filePath));
return false;
}
points.push_back(std::move(point));
}
return true;
}
catch (std::exception const & e)
{
LOG(LERROR, ("Exception loading panoramax file", filePath, ":", e.what()));
return false;
}
}
} // namespace
PanoramaxFeaturesGenerator::PanoramaxFeaturesGenerator(std::string const & panoramaxDir)
: m_panoramaxDir(panoramaxDir)
{
Classificator const & c = classif();
m_panoramaxType = c.GetTypeByPath({kPanoramax, kImage});
}
void PanoramaxFeaturesGenerator::GeneratePanoramax(std::string const & countryName,
FeaturesCollectFn const & fn) const
{
auto const panoramaxPath = GetPanoramaxFilePath(countryName, m_panoramaxDir);
std::vector<PanoramaxPoint> points;
if (!LoadPanoramaxPoints(panoramaxPath, points))
{
LOG(LWARNING, ("Can't load panoramax points for", countryName));
return;
}
LOG(LINFO, ("Generating", points.size(), "panoramax points for", countryName));
for (auto const & point : points)
{
feature::FeatureBuilder fb;
// Set point geometry
m2::PointD const mercatorPoint = mercator::FromLatLon(point.lat, point.lon);
fb.SetCenter(mercatorPoint);
// Add classificator type
fb.AddType(m_panoramaxType);
// Add metadata with image ID
if (!point.imageId.empty())
{
fb.GetMetadata().Set(feature::Metadata::FMD_PANORAMAX, point.imageId);
}
fn(std::move(fb));
}
}
} // namespace generator

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