Compare commits

..

49 commits

Author SHA1 Message Date
ba08806f15 fix nav bars i think??
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-10 17:50:50 +00:00
e4967be588 let android handle follow-system for UI, resolve manually in mapstyle
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-07 16:04:01 +00:00
0f5f90322a clean up calcAutoTheme
don't reuse variables, declare in scope
2025-03-06 18:20:09 +00:00
4da1ac38c4 fix theme subtitle not updating
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 18:47:25 +00:00
b65e4cfa30 banish is{theme} checkers
nav-auto not working, RoutingController.get().isVehicleNavigation() doesn't work??? maybe called too early before it's set?
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 18:06:58 +00:00
6074f4bfd1 fix status bar colour
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 18:06:10 +00:00
d731773c21 themeswitcher cleanup
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 18:06:10 +00:00
83801d3e85 note
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:44 +00:00
18a4f6eb0e remove unused thing
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
36b136bed5 minor rename
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
2ab8eb336f fix settings background colour not being set
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
c953ffd70a remove unused thememode code
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
2e66ac4182 replace drawables using theme query to use light/dark variants
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
766014752e use night drawable variants instead of getting category icons programatically
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
d5bb82c5de don't set settings card background programatically
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
ab0633ca26 trafficbutton - comment out isNightTheme usages
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
3f4721bbd9 set routing buttons colour with xml, not programatically
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
881e86dd93 set help icon tint with xml, not programatically
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
8a4468ac1d remove manual theme setting in timepicker
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
a577a24911 cleanup comments
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
48916d6e06 remove commented out stuff
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
a85b84c720 clean up manifest
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
8c32a35806 throw error if bad theme passed to setAndroidTheme
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
685c77df2a comment cleanup
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
50cbcd0171 add time-based fallback for auto
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
557121f55a auto and navauto working
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
a035bb3d9a fix system theme more
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
8305cd42b2 handle system-theme in resolveMapStyle
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:43 +00:00
db3c88f62f split autotheme into new function
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:42 +00:00
7ecf0ba840 fix flow
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:42 +00:00
a352d870bf add notes, re-name and reorder stuff
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:42 +00:00
4b420f8c5b rename get/setThemeSettings - no longer just UI theme
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-03-04 14:56:42 +00:00
637a051033 return getcustomtheme
still needed
2025-03-04 14:56:42 +00:00
c65fb53062 these need to be duplicated to night theme
getResource in themeutils doesn't fall back (but i don't think it should)
2025-03-04 14:56:42 +00:00
c037e951a0 remove uimode configchanges in manifest 2025-03-04 14:56:42 +00:00
6135c19079 remove superfluous theme setting code 2025-03-04 14:56:42 +00:00
e6670730d9 split night themes into values-night 2025-03-04 14:56:42 +00:00
9d6a1fb1ba fix splash light/dark implementation 2025-03-04 14:56:42 +00:00
ebbe713f8f more change needed 2025-03-04 14:56:42 +00:00
0edbc5c421 change this 2025-03-04 14:56:42 +00:00
5762449986 eggdfgdgf 2025-03-04 14:56:42 +00:00
d005ee6149 sfdsdfsd 2025-03-04 14:56:42 +00:00
bfad3195ad dfdfg 2025-03-04 14:56:42 +00:00
ce9822f950 srfdtghjhfgh 2025-03-04 14:56:42 +00:00
6b0c05bdc8 fgdgfg 2025-03-04 14:56:42 +00:00
54c8a4c8ed cvbg 2025-03-04 14:56:42 +00:00
2383c021b9 check 2025-03-04 14:56:42 +00:00
7cf9de5d05 dfrg 2025-03-04 14:56:41 +00:00
d1b918c263 [android] rework Light, Dark, and System modes
(rebased from PR, some additional minor cleanup/fixes)
TODO: debug commands like ?light don't work.
Signed-off-by: Harry Bond <me@hbond.xyz>
Signed-off-by: Sebastiao Sousa <sebastiao.sousa@tecnico.ulisboa.pt>
Co-authored-by: Francisco Nael Salgado <francisco.nael.salgado@tecnico.ulisboa.pt>
2025-03-04 14:56:41 +00:00
563 changed files with 199259 additions and 142486 deletions

View file

@ -61,10 +61,6 @@ jobs:
libgl1-mesa-dev \
libglvnd-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
qt6-base-dev \
libqt6svg6-dev \
qt6-positioning-dev \
@ -132,10 +128,6 @@ jobs:
libgl1-mesa-dev \
libglvnd-dev \
libharfbuzz-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
qt6-base-dev \
libqt6svg6-dev \
qt6-positioning-dev \

View file

@ -1,22 +0,0 @@
name: Close stale PRs
on:
schedule:
- cron: "0 0 * * *" # Runs every day at midnight
jobs:
stale:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-pr-stale: 180 # 6 months before warning
days-before-pr-close: 365 # Closed after 12 months
stale-pr-label: "stale"
stale-pr-message: "Hi! This PR has been inactive for 6 months. If it's still relevant, please update it to let us know youd like to keep it open 😊"
close-pr-message: "This PR has been automatically closed after 12 months of inactivity."
days-before-issue-stale: -1 # Issues are never stale
days-before-issue-close: -1 # Issues are never closed
remove-stale-when-updated: true

31
.github/workflows/strings-check.yaml vendored Normal file
View file

@ -0,0 +1,31 @@
name: Validate translation strings
on:
workflow_dispatch: # Manual trigger
pull_request:
paths:
- .github/workflows/strings-check.yaml # Run check on self change
- data/strings/strings.txt
- data/strings/types_strings.txt
- data/strings/sound.txt
- data/countries_names.txt
- iphone/plist.txt
- tools/python/strings_utils.py
jobs:
validate-translation-strings:
name: Validate translation strings
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3'
- name: Validate string files
shell: bash
run: |
for f in data/strings/strings.txt data/strings/types_strings.txt data/strings/sound.txt data/countries_names.txt iphone/plist.txt; do
./tools/python/strings_utils.py --validate $f -o
done;
git diff --exit-code

1
.gitignore vendored
View file

@ -20,7 +20,6 @@ data/drules_proto_default_design.bin
data/colors_design.txt
data/patterns_design.txt
data/bookmarks
data/edits.xml
# Compiled Python
*.pyc

48
.gitmodules vendored
View file

@ -1,67 +1,61 @@
[submodule "tools/osmctools"]
path = tools/osmctools
url = ../osmctools.git
url = https://github.com/organicmaps/osmctools.git
[submodule "tools/kothic"]
path = tools/kothic
url = ../kothic.git
url = https://github.com/organicmaps/kothic.git
[submodule "3party/protobuf/protobuf"]
path = 3party/protobuf/protobuf
url = ../protobuf.git
url = https://github.com/organicmaps/protobuf.git
[submodule "tools/twine"]
path = tools/twine
url = https://github.com/organicmaps/twine.git
[submodule "3party/Vulkan-Headers"]
path = 3party/Vulkan-Headers
url = ../Vulkan-Headers.git
url = https://github.com/KhronosGroup/Vulkan-Headers.git
[submodule "3party/boost"]
path = 3party/boost
url = ../boost.git
url = https://github.com/boostorg/boost.git
branch = boost-1.76.0
ignore = dirty
[submodule "3party/just_gtfs"]
path = 3party/just_gtfs
url = ../just_gtfs.git
url = https://github.com/organicmaps/just_gtfs.git
branch = for-usage-as-submodule
[submodule "3party/expat"]
path = 3party/expat
url = ../libexpat.git
url = https://github.com/libexpat/libexpat.git
branch = R_2_2_9
[submodule "3party/glm"]
path = 3party/glm
url = ../glm.git
url = https://github.com/g-truc/glm.git
[submodule "3party/icu/icu"]
path = 3party/icu/icu
url = ../icu.git
url = https://github.com/unicode-org/icu.git
[submodule "3party/freetype/freetype"]
path = 3party/freetype/freetype
url = ../freetype.git
url = https://github.com/organicmaps/freetype.git
[submodule "3party/googletest"]
path = 3party/googletest
url = ../googletest.git
url = https://github.com/google/googletest.git
[submodule "3party/fast_double_parser"]
path = 3party/fast_double_parser
url = ../fast_double_parser.git
url = https://github.com/lemire/fast_double_parser.git
[submodule "3party/pugixml/pugixml"]
path = 3party/pugixml/pugixml
url = ../pugixml.git
url = https://github.com/zeux/pugixml.git
[submodule "3party/jansson/jansson"]
path = 3party/jansson/jansson
url = ../jansson.git
url = https://github.com/akheron/jansson.git
[submodule "3party/gflags"]
path = 3party/gflags
url = ../gflags
url = https://github.com/gflags/gflags
[submodule "3party/fast_obj"]
path = 3party/fast_obj
url = ../fast_obj
url = https://github.com/thisistherk/fast_obj
[submodule "3party/harfbuzz/harfbuzz"]
path = 3party/harfbuzz/harfbuzz
url = ../harfbuzz.git
url = https://github.com/harfbuzz/harfbuzz.git
[submodule "3party/utfcpp"]
path = 3party/utfcpp
url = ../utfcpp.git
[submodule "3party/glfw"]
path = 3party/glfw
url = ../glfw.git
[submodule "3party/CMake-MetalShaderSupport"]
path = 3party/CMake-MetalShaderSupport
url = ../CMake-MetalShaderSupport.git
[submodule "3party/imgui/imgui"]
path = 3party/imgui/imgui
url = ../imgui.git
url = https://github.com/nemtrif/utfcpp.git

@ -1 +0,0 @@
Subproject commit 989857d2e5e54869c35ad06fb21a67d12a2dbc67

View file

@ -66,19 +66,4 @@ add_subdirectory(vulkan_wrapper)
if (PLATFORM_DESKTOP)
add_subdirectory(libtess2)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "")
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "")
set(GLFW_BUILD_TESTS OFF CACHE BOOL "")
set(GLFW_INSTALL OFF CACHE BOOL "")
set(GLFW_VULKAN_STATIC OFF CACHE BOOL "")
set(GLFW_BUILD_WAYLAND OFF CACHE BOOL "")
# Disable ARC for glfw and re-enable after it because it's globally set in the root CMakeLists.txt
set(CMAKE_OBJC_FLAGS "")
add_subdirectory(glfw)
set_target_properties(glfw PROPERTIES UNITY_BUILD OFF)
set_target_properties(glfw PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO)
set(CMAKE_OBJC_FLAGS -fobjc-arc)
add_subdirectory(imgui)
endif()

@ -1 +0,0 @@
Subproject commit 21fea01161e0d6b70c0c5c1f52dc8e7a7df14a50

View file

@ -1,16 +0,0 @@
project(imgui)
set(SRC
imgui/imgui_draw.cpp
imgui/imgui_tables.cpp
imgui/imgui_widgets.cpp
imgui/imgui.cpp
imgui/backends/imgui_impl_glfw.cpp
)
add_library(${PROJECT_NAME} ${SRC})
target_include_directories(${PROJECT_NAME}
PRIVATE ${OMIM_ROOT}/3party/glfw/include
PUBLIC ${OMIM_ROOT}/3party/imgui/imgui
PUBLIC .
)

@ -1 +0,0 @@
Subproject commit 6982ce43f5b143c5dce5fab0ce07dd4867b705ae

View file

@ -90,19 +90,6 @@ else()
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
endif()
if(${PLATFORM_MAC})
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
# Metal language support
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
include(CheckLanguage)
include(MetalShaderSupport)
check_language(Metal)
if(CMAKE_Metal_COMPILER)
enable_language(Metal)
endif()
endif()
# Sanitizer
if (PLATFORM_DESKTOP)
# https://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
@ -397,7 +384,6 @@ if (PLATFORM_DESKTOP)
add_subdirectory(qt)
omim_add_tool_subdirectory(skin_generator)
endif()
add_subdirectory(dev_sandbox)
endif()
omim_add_test_subdirectory(qt_tstfrm)

View file

@ -1,5 +1,5 @@
<div align="center">
<img src="qt/res/logo.png" height="100"/>
<img src="/qt/res/logo.png" height="100"/>
</div>
<h1 align="center"">Organic Maps</h1>
@ -167,8 +167,9 @@ Please join our beta program, suggest your features, and report bugs:
- **Rate us on the [App Store](https://apps.apple.com/app/organic-maps/id1567437057)
and [Google Play](https://play.google.com/store/apps/details?id=app.organicmaps)**.
- **Star us on Forgejo**.
- Report bugs or issues to [the issue tracker](https://git.omaps.dev/organicmaps/organicmaps/issues).
- **Star us on GitHub**.
- Report bugs or issues to [the issue tracker](https://github.com/organicmaps/organicmaps/issues).
- [Discuss](https://github.com/organicmaps/organicmaps/discussions/categories/ideas) ideas or propose feature requests.
- Subscribe to our [Telegram Channel](https://t.me/OrganicMapsApp) or to the [[matrix] space](https://matrix.to/#/#organicmaps:matrix.org) for updates.
- Join our [Telegram Group](https://t.me/OrganicMaps) to discuss with other users.
- Присоединяйтесь к нашей [русскоязычной группе в Telegram](https://t.me/OrganicMapsRu) для обратной связи и помощи.
@ -178,7 +179,7 @@ and [Google Play](https://play.google.com/store/apps/details?id=app.organicmaps)
- Follow our updates in
[Mastodon](https://fosstodon.org/@organicmaps),
[Facebook](https://facebook.com/OrganicMaps),
[X (Twitter)](https://x.com/OrganicMapsApp),
[Twitter](https://twitter.com/OrganicMapsApp),
[Instagram](https://instagram.com/organicmaps.app/).
- Güncellemelerimizi [Instagram](https://instagram.com/organicmapstr/) üzerinden takip edin.

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

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

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• Neue OpenStreetMap-Daten vom 27. Februar
Möglichkeit, Zwischenroutenpunkte manuell zu arrangieren
Einen einzelnen ausgewählten Track aus der Liste teilen
Verbesserte Routenführung für Fahrräder
Beim Herunterladen von Karten eine Systembenachrichtigung anzeigen und Hintergrunddownloads nicht unterbrechen
• Ein blinkendes Trackaufzeichnungs-Widget hinzugefügt
• Neue OpenStreetMap-Daten vom 21. Januar
Anzeige eines Geschwindigkeitsbegrenzungsschildes im Navigationsmodus
Serbische (Kyrillisch) und Lettische Sprachen hinzugefügt
Android Auto: Lesezeichen sortieren, verbessertes Erlebnis bei der Anforderung von Standortberechtigungen
Turm-POIs hinzugefügt
• Eine Einstellung für Kayak.com-Hotellinks und eine Opt-out-Option bei der ersten Nutzung hinzugefügt.
…weitere Details unter omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a Track Recording indicator on the main screen
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• Nuevos datos de OpenStreetMap del 21 de enero
Límite de velocidad en el modo de navegación
Añadidos idiomas serbio (cirílico) y letón
Android Auto: opción de ordenar marcadores, mejorada la experiencia al solicitar ubicación
Añadidos PDI de torres
• Añadidas opciones para enlaces de hotel de Kayak.com y de exclusión al primer uso
…more details at omaps.org/news
…más detalles en omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
New OpenStreetMap data as of February 27
• Ability to manually arrange intermediate route points
• Share a single selected track from the list
Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
Added a flashing Track Recording widget
Urtarrilaren 21ko OpenStreetMap-eko datu berriak
• Abiadura muga erakusten da nabigazio moduan
• Serbiera (zirilikoa) eta letoniera hizkuntzak gehitu dira
Android Auto: gogokoak ordena daitezke, kokapen permisuaren eskaeraren esperientzia hobetu da
• Dorreen interes puntuak gehitu dira
Kayak.com-eko hotelen estekak eta lehenengo erabileran ez erakusteko aukera gehitu dira
more details at omaps.org/news
zehaztasun gehiago omaps.org/news webgunean

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• Nouvelles données OpenStreetMap du 27 février
Possibilité d'organiser manuellement les points d'itinéraire intermédiaires
Partager une seule piste sélectionnée dans la liste
• Amélioration du routage pour les vélos
• Afficher une notification système lors du téléchargement de cartes et ne pas interrompre les téléchargements en arrière-plan
• Ajout d'un widget d'enregistrement de piste clignotant
• Nouvelles données OpenStreetMap du 21 janvier
Afficher un panneau de limitation de vitesse en mode navigation
Ajout des langues serbe (cyrillique) et lettone
• Android Auto : trier les signets, expérience de demande d'autorisation de localisation améliorée
• Ajout de POI de tour
• Ajout d'un paramètre pour les liens d'hôtel Kayak.com et d'une option de désinscription lors de la première utilisation
…plus de détails sur omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
• Display a system notification when downloading maps and don't interrupt background downloads
Added a flashing Track Recording widget
• Nowe dane OpenStreetMap z 21 stycznia
Wyświetlanie znaku ograniczenia prędkości w trybie nawigacji
Dodano języki serbski (cyrylica) i łotewski
Android Auto: sortowanie zakładek, ulepszono prośbę o pozwolenie na lokalizację
• Dodano POI dla wieży
Dodano ustawienie dla linków do hoteli na Kayak.com oraz możliwość wyłączenia ich przy pierwszym uruchomieniu
more details at omaps.org/news
więcej szczegółów na omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• Novos dados do OpenStreetMap de 21 de janeiro
Exibe um sinal de limite de velocidade no modo de navegação
Adicionados os idiomas sérvio (cirílico) e letão
Android Auto: classificar favoritos, experiência aprimorada de solicitação de permissão de localização
Adicionados POIs de torre
• Adicionada uma configuração para links de hotéis Kayak.com e uma opção de cancelamento de primeiro uso
…more details at omaps.org/news
…mais detalhes em omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
Added a flashing Track Recording widget
• Novos dados do OpenStreetMap a 21 de janeiro
Exibir um sinal de limite de velocidade no modo de navegação
Adicionados os idiomas sérvio (cirílico) e letão
Android Auto: classificar favoritos, experiência melhorada de pedido de permissão de localização
Adicionados POIs de torre
Foi adicionada uma configuração para o Kayak.com Hotel Links e uma opção de cancelamento de primeira utilização
…more details at omaps.org/news
…mais detalhes em omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• Новые данные OpenStreetMap от 27 февраля
Возможность вручную расставлять промежуточные точки маршрута
Экспорт одного выбранного трека из списка
Улучшенная маршрутизация для велосипедистов
• Добавлено системное уведомление при загрузке карт, фоновые загрузки больше не прерываются
• Добавлен мигающий виджет записи трека
• Новые данные OpenStreetMap от 21 января
Отображение ограничения скорости в режиме навигации
Android Auto: сортировка меток, улучшены запросы на разрешение местоположения
На карту добавлены башни
• Добавлена ​​настройка для отключения ссылок на отели с Kayak.com и возможность отказа при первом использовании
• Добавлены сербский (кириллица) и латышский языки
…и многое другое на omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• Нові дані OpenStreetMap від 27 лютого
Можливість вручну розставляти проміжні точки маршруту
Експорт одного вибраного треку зі списку
Покращена маршрутизація для велосипедистів
Додано системне повідомлення під час завантаження карт, фонові завантаження більше не перериваються
• Додано миготливий віджет запису треку
• Нові дані OpenStreetMap від 21 січня
Знак перевищення швидкості підчас навігації
Додано перклади сербською (кирилиця) та латиською мовами
Android Auto: сортування міток, покращено процес запиту на отримання дозволу на розміщення
Вежі відображаються на мапі
• Додано налаштування для посилань до Kayak.com для готелів та демонструється запит при першому використанні
…більше подробиць на omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1,8 +1,8 @@
• New OpenStreetMap data as of February 27
Ability to manually arrange intermediate route points
Share a single selected track from the list
Improved routing for bicycles
Display a system notification when downloading maps and don't interrupt background downloads
• Added a flashing Track Recording widget
• New OpenStreetMap data as of January 21
Dispay a speed limit sign in the navigation mode
Added Serbian (Cyrillic) and Latvian languages
Android Auto: sort bookmarks, improved location permission request experience
Added tower POIs
• Added a setting for Kayak.com Hotel Links and a first-use opt-out option
…more details at omaps.org/news

View file

@ -1 +1 @@
version: 2025.03.02-7-FDroid+25030207
version: 2025.01.26-9-FDroid+25012609

View file

@ -346,7 +346,7 @@
<activity
android:name="app.organicmaps.DownloadResourcesLegacyActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize" />
android:screenOrientation="fullUser"/>
<activity-alias
@ -374,7 +374,7 @@
<activity
android:name="app.organicmaps.downloader.DownloaderActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/download_maps"
android:parentActivityName="app.organicmaps.MwmActivity"
@ -382,7 +382,7 @@
<activity
android:name="app.organicmaps.search.SearchActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/search_map"
android:parentActivityName="app.organicmaps.MwmActivity"
@ -390,10 +390,11 @@
<activity
android:name="app.organicmaps.settings.SettingsActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/settings"
android:parentActivityName="app.organicmaps.MwmActivity" />
android:parentActivityName="app.organicmaps.MwmActivity"
android:theme="@style/MwmTheme.CardBg"/>
<activity
android:name="app.organicmaps.help.HelpActivity"
@ -408,7 +409,7 @@
<activity
android:name="app.organicmaps.bookmarks.BookmarkCategoriesActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/bookmarks_and_tracks"
android:parentActivityName="app.organicmaps.MwmActivity"
@ -416,7 +417,7 @@
<activity
android:name="app.organicmaps.bookmarks.BookmarkListActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/bookmarks"
android:parentActivityName="app.organicmaps.bookmarks.BookmarkCategoriesActivity"
@ -424,7 +425,7 @@
<activity
android:name="app.organicmaps.editor.EditorActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:configChanges="uiMode|orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/edit_place"
android:parentActivityName="app.organicmaps.MwmActivity"
@ -458,7 +459,7 @@
android:name="app.organicmaps.settings.DrivingOptionsActivity"
android:label="@string/driving_options_title"/>
<activity
android:name="app.organicmaps.MapPlaceholderActivity"/>
android:name="app.organicmaps.MapPlaceholderActivity" />
<activity
android:name="app.organicmaps.car.screens.permissions.RequestPermissionsActivity"/>
<service

View file

@ -22,13 +22,11 @@ set(SRC
app/organicmaps/vulkan/android_vulkan_context_factory.hpp
# JNI sources
app/organicmaps/sdk/search/DisplayedCategories.cpp
app/organicmaps/sdk/search/SearchEngine.cpp
app/organicmaps/sdk/search/SearchRecents.cpp
app/organicmaps/core/jni_helper.cpp
app/organicmaps/core/jni_java_methods.cpp
app/organicmaps/core/logging.cpp
app/organicmaps/bookmarks/data/BookmarkManager.cpp
app/organicmaps/DisplayedCategories.cpp
app/organicmaps/DownloadResourcesLegacyActivity.cpp
app/organicmaps/editor/Editor.cpp
app/organicmaps/editor/OpeningHours.cpp
@ -40,6 +38,8 @@ set(SRC
app/organicmaps/MapManager.cpp
app/organicmaps/MwmApplication.cpp
app/organicmaps/routing/RoutingOptions.cpp
app/organicmaps/SearchEngine.cpp
app/organicmaps/SearchRecents.cpp
app/organicmaps/settings/UnitLocale.cpp
app/organicmaps/settings/MapLanguageCode.cpp
app/organicmaps/sound/tts.cpp

View file

@ -5,7 +5,8 @@
extern "C"
{
JNIEXPORT jobjectArray JNICALL Java_app_organicmaps_sdk_search_DisplayedCategories_nativeGetKeys(JNIEnv * env, jclass)
JNIEXPORT jobjectArray JNICALL
Java_app_organicmaps_search_DisplayedCategories_nativeGetKeys(JNIEnv * env, jclass clazz)
{
::Framework * fr = g_framework->NativeFramework();
ASSERT(fr, ());

View file

@ -39,7 +39,7 @@ Results g_results;
// Timestamp of last search query. Results with older stamps are ignored.
jlong g_queryTimestamp;
// Implements 'SearchListener' java interface.
// Implements 'NativeSearchListener' java interface.
jobject g_javaListener;
jmethodID g_updateResultsId;
jmethodID g_endResultsId;
@ -52,7 +52,7 @@ jmethodID g_descriptionConstructor;
jclass g_popularityClass;
jmethodID g_popularityConstructor;
// Implements 'MapSearchListener' java interface.
// Implements 'NativeMapSearchListener' java interface.
jmethodID g_mapResultsMethod;
jclass g_mapResultClass;
jmethodID g_mapResultCtor;
@ -232,21 +232,21 @@ void OnBookmarksSearchResults(search::BookmarksSearchParams::Results results,
extern "C"
{
JNIEXPORT void JNICALL
Java_app_organicmaps_sdk_search_SearchEngine_nativeInit(JNIEnv * env, jobject thiz)
Java_app_organicmaps_search_SearchEngine_nativeInit(JNIEnv * env, jobject thiz)
{
g_javaListener = env->NewGlobalRef(thiz);
// public void onResultsUpdate(@NonNull SearchResult[] results, long timestamp)
g_updateResultsId = jni::GetMethodID(env, g_javaListener, "onResultsUpdate",
"([Lapp/organicmaps/sdk/search/SearchResult;J)V");
"([Lapp/organicmaps/search/SearchResult;J)V");
// public void onResultsEnd(long timestamp)
g_endResultsId = jni::GetMethodID(env, g_javaListener, "onResultsEnd", "(J)V");
g_resultClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/search/SearchResult");
g_resultClass = jni::GetGlobalClassRef(env, "app/organicmaps/search/SearchResult");
g_resultConstructor = jni::GetConstructorID(
env, g_resultClass,
"(Ljava/lang/String;Lapp/organicmaps/sdk/search/SearchResult$Description;DD[I[I"
"Lapp/organicmaps/sdk/search/Popularity;)V");
"(Ljava/lang/String;Lapp/organicmaps/search/SearchResult$Description;DD[I[I"
"Lapp/organicmaps/search/Popularity;)V");
g_suggestConstructor = jni::GetConstructorID(env, g_resultClass, "(Ljava/lang/String;Ljava/lang/String;DD[I[I)V");
g_descriptionClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/search/SearchResult$Description");
g_descriptionClass = jni::GetGlobalClassRef(env, "app/organicmaps/search/SearchResult$Description");
/*
Description(FeatureId featureId, String featureType, String region, Distance distance,
String description, int openNow, int minutesUntilOpen, int minutesUntilClosed,
@ -257,12 +257,12 @@ extern "C"
"Ljava/lang/String;Ljava/lang/String;Lapp/organicmaps/util/Distance;"
"Ljava/lang/String;IIIZ)V");
g_popularityClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/search/Popularity");
g_popularityClass = jni::GetGlobalClassRef(env, "app/organicmaps/search/Popularity");
g_popularityConstructor = jni::GetConstructorID(env, g_popularityClass, "(I)V");
g_mapResultsMethod = jni::GetMethodID(env, g_javaListener, "onMapSearchResults",
"([Lapp/organicmaps/sdk/search/MapSearchListener$Result;JZ)V");
g_mapResultClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/search/MapSearchListener$Result");
"([Lapp/organicmaps/search/NativeMapSearchListener$Result;JZ)V");
g_mapResultClass = jni::GetGlobalClassRef(env, "app/organicmaps/search/NativeMapSearchListener$Result");
g_mapResultCtor = jni::GetConstructorID(env, g_mapResultClass, "(Ljava/lang/String;Ljava/lang/String;)V");
g_updateBookmarksResultsId =
@ -271,7 +271,7 @@ extern "C"
jni::GetMethodID(env, g_javaListener, "onBookmarkSearchResultsEnd", "([JJ)V");
}
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_search_SearchEngine_nativeRunSearch(
JNIEXPORT jboolean JNICALL Java_app_organicmaps_search_SearchEngine_nativeRunSearch(
JNIEnv * env, jclass clazz, jbyteArray bytes, jboolean isCategory,
jstring lang, jlong timestamp, jboolean hasPosition, jdouble lat, jdouble lon)
{
@ -288,7 +288,7 @@ extern "C"
return searchStarted;
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_search_SearchEngine_nativeRunInteractiveSearch(
JNIEXPORT void JNICALL Java_app_organicmaps_search_SearchEngine_nativeRunInteractiveSearch(
JNIEnv * env, jclass clazz, jbyteArray bytes, jboolean isCategory,
jstring lang, jlong timestamp, jboolean isMapAndTable, jboolean hasPosition, jdouble lat, jdouble lon)
{
@ -321,7 +321,7 @@ extern "C"
}
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_search_SearchEngine_nativeRunSearchMaps(
JNIEXPORT void JNICALL Java_app_organicmaps_search_SearchEngine_nativeRunSearchMaps(
JNIEnv * env, jclass clazz, jbyteArray bytes, jstring lang, jlong timestamp)
{
storage::DownloaderSearchParams params{
@ -334,7 +334,7 @@ extern "C"
g_queryTimestamp = timestamp;
}
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_search_SearchEngine_nativeRunSearchInBookmarks(
JNIEXPORT jboolean JNICALL Java_app_organicmaps_search_SearchEngine_nativeRunSearchInBookmarks(
JNIEnv * env, jclass clazz, jbyteArray query, jlong catId, jlong timestamp)
{
search::BookmarksSearchParams params{
@ -350,25 +350,25 @@ extern "C"
}
JNIEXPORT void JNICALL
Java_app_organicmaps_sdk_search_SearchEngine_nativeShowResult(JNIEnv * env, jclass clazz, jint index)
Java_app_organicmaps_search_SearchEngine_nativeShowResult(JNIEnv * env, jclass clazz, jint index)
{
g_framework->NativeFramework()->ShowSearchResult(g_results[index]);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_sdk_search_SearchEngine_nativeCancelInteractiveSearch(JNIEnv * env, jclass clazz)
Java_app_organicmaps_search_SearchEngine_nativeCancelInteractiveSearch(JNIEnv * env, jclass clazz)
{
g_framework->NativeFramework()->GetSearchAPI().CancelSearch(search::Mode::Viewport);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_sdk_search_SearchEngine_nativeCancelEverywhereSearch(JNIEnv * env, jclass clazz)
Java_app_organicmaps_search_SearchEngine_nativeCancelEverywhereSearch(JNIEnv * env, jclass clazz)
{
g_framework->NativeFramework()->GetSearchAPI().CancelSearch(search::Mode::Everywhere);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_sdk_search_SearchEngine_nativeCancelAllSearches(JNIEnv * env, jclass clazz)
Java_app_organicmaps_search_SearchEngine_nativeCancelAllSearches(JNIEnv * env, jclass clazz)
{
g_framework->NativeFramework()->GetSearchAPI().CancelAllSearches();
}

View file

@ -0,0 +1,40 @@
#include "Framework.hpp"
#include "search/result.hpp"
#include "app/organicmaps/core/jni_helper.hpp"
#include "app/organicmaps/core/jni_java_methods.hpp"
using SearchRequest = search::QuerySaver::SearchRequest;
extern "C"
{
JNIEXPORT void JNICALL
Java_app_organicmaps_search_SearchRecents_nativeGetList(JNIEnv * env, jclass thiz, jobject result)
{
auto const & items = g_framework->NativeFramework()->GetSearchAPI().GetLastSearchQueries();
if (items.empty())
return;
auto const listAddMethod = jni::ListBuilder::Instance(env).m_add;
for (SearchRequest const & item : items)
{
jni::TScopedLocalRef str(env, jni::ToJavaString(env, item.second));
env->CallBooleanMethod(result, listAddMethod, str.get());
}
}
JNIEXPORT void JNICALL
Java_app_organicmaps_search_SearchRecents_nativeAdd(JNIEnv * env, jclass thiz, jstring locale, jstring query)
{
SearchRequest const sr(jni::ToNativeString(env, locale), jni::ToNativeString(env, query));
g_framework->NativeFramework()->GetSearchAPI().SaveSearchQuery(sr);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_search_SearchRecents_nativeClear(JNIEnv * env, jclass thiz)
{
g_framework->NativeFramework()->GetSearchAPI().ClearSearchHistory();
}
}

View file

@ -28,7 +28,7 @@ void InjectMetadata(JNIEnv * env, jclass const clazz, jobject const mapObject, o
//jobject CreatePopularity(JNIEnv * env, place_page::Info const & info)
//{
// static jclass const popularityClass =
// jni::GetGlobalClassRef(env, "app/organicmaps/sdk/search/Popularity");
// jni::GetGlobalClassRef(env, "app/organicmaps/search/Popularity");
// static jmethodID const popularityConstructor =
// jni::GetConstructorID(env, popularityClass, "(I)V");
// auto const popularityValue = info.GetPopularity();
@ -57,7 +57,7 @@ jobject CreateMapObject(JNIEnv * env, place_page::Info const & info, int mapObje
"Ljava/lang/String;" // appId
"Lapp/organicmaps/routing/RoutePointInfo;" // routePointInfo
"I" // openingMode
"Lapp/organicmaps/sdk/search/Popularity;" // popularity
"Lapp/organicmaps/search/Popularity;" // popularity
"Ljava/lang/String;" // description
"I" // roadWarnType
"[Ljava/lang/String;" // rawTypes
@ -105,7 +105,7 @@ jobject CreateBookmark(JNIEnv *env, const place_page::Info &info,
"(Lapp/organicmaps/bookmarks/data/FeatureId;JJLjava/lang/String;"
"Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;"
"Lapp/organicmaps/routing/RoutePointInfo;"
"ILapp/organicmaps/sdk/search/Popularity;Ljava/lang/String;"
"ILapp/organicmaps/search/Popularity;Ljava/lang/String;"
"[Ljava/lang/String;)V");
static jmethodID const featureCtorId =
jni::GetConstructorID(env, g_featureIdClazz, "(Ljava/lang/String;JI)V");

View file

@ -1,37 +0,0 @@
#include "app/organicmaps/Framework.hpp"
#include "app/organicmaps/core/jni_helper.hpp"
#include "app/organicmaps/core/jni_java_methods.hpp"
#include "search/result.hpp"
using SearchRequest = search::QuerySaver::SearchRequest;
extern "C"
{
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_search_SearchRecents_nativeGetList(JNIEnv * env, jclass, jobject result)
{
auto const & items = g_framework->NativeFramework()->GetSearchAPI().GetLastSearchQueries();
if (items.empty())
return;
auto const listAddMethod = jni::ListBuilder::Instance(env).m_add;
for (SearchRequest const & item : items)
{
jni::TScopedLocalRef str(env, jni::ToJavaString(env, item.second));
env->CallBooleanMethod(result, listAddMethod, str.get());
}
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_search_SearchRecents_nativeAdd(JNIEnv * env, jclass, jstring locale,
jstring query)
{
SearchRequest const sr(jni::ToNativeString(env, locale), jni::ToNativeString(env, query));
g_framework->NativeFramework()->GetSearchAPI().SaveSearchQuery(sr);
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_search_SearchRecents_nativeClear(JNIEnv * env, jclass)
{
g_framework->NativeFramework()->GetSearchAPI().ClearSearchHistory();
}
}

View file

@ -450,13 +450,6 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
.show();
}
@Override
@StyleRes
public int getThemeResourceId(@NonNull String theme)
{
return R.style.MwmTheme_DownloadResourcesLegacy;
}
private static native int nativeGetBytesToDownload();
private static native int nativeStartNextFileDownload(Listener listener);
private static native void nativeCancelCurrentFile();

View file

@ -66,8 +66,6 @@ public final class Map
private boolean mSurfaceAttached;
private boolean mLaunchByDeepLink;
@Nullable
private String mUiThemeOnPause;
@Nullable
private MapRenderingListener mMapRenderingListener;
@Nullable
private CallbackUnsupported mCallbackUnsupported;
@ -136,12 +134,6 @@ public final class Map
public void onSurfaceCreated(final Context context, final Surface surface, Rect surfaceFrame, int surfaceDpi)
{
if (isThemeChangingProcess(context))
{
Logger.d(TAG, "Theme changing process, skip 'onSurfaceCreated' callback");
return;
}
Logger.d(TAG, "mSurfaceCreated = " + mSurfaceCreated);
if (nativeIsEngineCreated())
{
@ -192,11 +184,6 @@ public final class Map
public void onSurfaceChanged(final Context context, final Surface surface, Rect surfaceFrame, boolean isSurfaceCreating)
{
if (isThemeChangingProcess(context))
{
Logger.d(TAG, "Theme changing process, skip 'onSurfaceChanged' callback");
return;
}
Logger.d(TAG, "mSurfaceCreated = " + mSurfaceCreated);
if (!mSurfaceCreated || (!mRequireResize && isSurfaceCreating))
@ -253,8 +240,6 @@ public final class Map
public void onPause(final Context context)
{
mUiThemeOnPause = Config.getCurrentUiTheme(context);
// Pause/Resume can be called without surface creation/destroy.
if (mSurfaceAttached)
nativePauseSurfaceRendering();
@ -361,11 +346,6 @@ public final class Map
nativeApplyWidgets();
}
private boolean isThemeChangingProcess(final Context context)
{
return mUiThemeOnPause != null && !mUiThemeOnPause.equals(Config.getCurrentUiTheme(context));
}
// Engine
private static native boolean nativeCreateEngine(Surface surface, int density,
boolean firstLaunch,

View file

@ -89,7 +89,7 @@ import app.organicmaps.routing.RoutingPlanFragment;
import app.organicmaps.routing.RoutingPlanInplaceController;
import app.organicmaps.search.FloatingSearchToolbarController;
import app.organicmaps.search.SearchActivity;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.search.SearchFragment;
import app.organicmaps.settings.DrivingOptionsActivity;
import app.organicmaps.settings.RoadType;
@ -475,21 +475,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
}
@Override
@StyleRes
protected int getThemeResourceId(@NonNull String theme)
{
Context context = getApplicationContext();
if (ThemeUtils.isDefaultTheme(context, theme))
return R.style.MwmTheme_MainActivity;
if (ThemeUtils.isNightTheme(context, theme))
return R.style.MwmTheme_Night_MainActivity;
return super.getThemeResourceId(theme);
}
@Override
public void onDisplayChangedToCar(@NonNull Runnable onTaskFinishedCallback)
{
@ -581,8 +566,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
private void refreshLightStatusBar()
{
int darkModeFlags = this.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
UiUtils.setLightStatusBar(this, !(
ThemeUtils.isNightTheme(this)
(darkModeFlags == Configuration.UI_MODE_NIGHT_YES)
|| RoutingController.get().isPlanning()
|| Framework.nativeGetChoosePositionMode() != Framework.ChoosePositionMode.NONE
));

View file

@ -34,7 +34,7 @@ import app.organicmaps.maplayer.subway.SubwayManager;
import app.organicmaps.maplayer.traffic.TrafficManager;
import app.organicmaps.routing.NavigationService;
import app.organicmaps.routing.RoutingController;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.settings.StoragePathManager;
import app.organicmaps.sound.TtsPlayer;
import app.organicmaps.util.Config;

View file

@ -7,6 +7,7 @@ import static app.organicmaps.api.Const.EXTRA_PICK_POINT;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
@ -25,6 +26,7 @@ import app.organicmaps.location.LocationHelper;
import app.organicmaps.util.Config;
import app.organicmaps.util.LocationUtils;
import app.organicmaps.util.SharingUtils;
import app.organicmaps.util.ThemeSwitcher;
import app.organicmaps.util.ThemeUtils;
import app.organicmaps.util.Utils;
import app.organicmaps.util.concurrency.UiThread;
@ -59,15 +61,6 @@ public class SplashActivity extends AppCompatActivity
{
super.onCreate(savedInstanceState);
final Context context = getApplicationContext();
final String theme = Config.getCurrentUiTheme(context);
if (ThemeUtils.isDefaultTheme(context, theme))
setTheme(R.style.MwmTheme_Splash);
else if (ThemeUtils.isNightTheme(context, theme))
setTheme(R.style.MwmTheme_Night_Splash);
else
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
setContentView(R.layout.activity_splash);
mPermissionRequest = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(),
@ -121,6 +114,14 @@ public class SplashActivity extends AppCompatActivity
mApiRequest = null;
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
ThemeSwitcher.INSTANCE.restart(false);
UiThread.runLater(this::recreate);
}
private void showFatalErrorDialog(@StringRes int titleId, @StringRes int messageId, Exception error)
{
mCanceled = true;

View file

@ -14,12 +14,6 @@ import app.organicmaps.util.ThemeUtils;
public class BaseMwmDialogFragment extends DialogFragment
{
@StyleRes
protected final int getFullscreenTheme()
{
return ThemeUtils.isNightTheme(requireContext()) ? getFullscreenDarkTheme() : getFullscreenLightTheme();
}
protected int getStyle()
{
return STYLE_NORMAL;
@ -38,22 +32,9 @@ public class BaseMwmDialogFragment extends DialogFragment
int style = getStyle();
int theme = getCustomTheme();
if (style != STYLE_NORMAL || theme != 0)
//noinspection WrongConstant
setStyle(style, theme);
}
@StyleRes
protected int getFullscreenLightTheme()
{
return R.style.MwmTheme_DialogFragment_Fullscreen;
}
@StyleRes
protected int getFullscreenDarkTheme()
{
return R.style.MwmTheme_DialogFragment_Fullscreen_Night;
}
@NonNull
protected Application getAppContextOrThrow()
{

View file

@ -1,9 +1,9 @@
package app.organicmaps.base;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.MenuItem;
@ -13,7 +13,6 @@ import androidx.activity.SystemBarStyle;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
@ -25,7 +24,7 @@ import app.organicmaps.R;
import app.organicmaps.SplashActivity;
import app.organicmaps.util.Config;
import app.organicmaps.util.RtlUtils;
import app.organicmaps.util.ThemeUtils;
import app.organicmaps.util.ThemeSwitcher;
import app.organicmaps.util.concurrency.UiThread;
import app.organicmaps.util.log.Logger;
@ -40,20 +39,6 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
@NonNull
private String mThemeName;
@StyleRes
protected int getThemeResourceId(@NonNull String theme)
{
Context context = getApplicationContext();
if (ThemeUtils.isDefaultTheme(context, theme))
return R.style.MwmTheme;
if (ThemeUtils.isNightTheme(context, theme))
return R.style.MwmTheme_Night;
throw new IllegalArgumentException("Attempt to apply unsupported theme: " + theme);
}
/**
* Shows splash screen and initializes the core in case when it was not initialized.
*
@ -65,8 +50,7 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
protected final void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mThemeName = Config.getCurrentUiTheme(getApplicationContext());
setTheme(getThemeResourceId(mThemeName));
mThemeName = Config.getThemeSettings(getApplicationContext());
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
RtlUtils.manageRtl(this);
if (!MwmApplication.from(this).arePlatformAndCoreInitialized())
@ -125,13 +109,22 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
public void onPostResume()
{
super.onPostResume();
if (!mThemeName.equals(Config.getCurrentUiTheme(getApplicationContext())))
if (!mThemeName.equals(Config.getThemeSettings(getApplicationContext())))
{
// TODO: is this still needed?
// Workaround described in https://code.google.com/p/android/issues/detail?id=93731
UiThread.runLater(this::recreate);
}
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
ThemeSwitcher.INSTANCE.restart(false);
UiThread.runLater(this::recreate);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{

View file

@ -39,14 +39,6 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
super.onPause();
}
@Override
@StyleRes
public int getThemeResourceId(@NonNull String theme)
{
return ThemeUtils.getWindowBgThemeResourceId(getApplicationContext(), theme);
}
@Override
protected Class<? extends Fragment> getFragmentClass()
{

View file

@ -38,14 +38,6 @@ public class BookmarkListActivity extends BaseToolbarActivity
super.onPause();
}
@Override
@StyleRes
public int getThemeResourceId(@NonNull String theme)
{
return ThemeUtils.getCardBgThemeResourceId(getApplicationContext(), theme);
}
@Override
protected Class<? extends Fragment> getFragmentClass()
{

View file

@ -39,8 +39,8 @@ import app.organicmaps.bookmarks.data.KmlFileType;
import app.organicmaps.bookmarks.data.SortedBlock;
import app.organicmaps.bookmarks.data.Track;
import app.organicmaps.location.LocationHelper;
import app.organicmaps.sdk.search.BookmarkSearchListener;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.search.NativeBookmarkSearchListener;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.util.Graphics;
import app.organicmaps.util.SharingUtils;
import app.organicmaps.util.UiUtils;
@ -62,7 +62,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
implements BookmarkManager.BookmarksSharingListener,
BookmarkManager.BookmarksSortingListener,
BookmarkManager.BookmarksLoadingListener,
BookmarkSearchListener,
NativeBookmarkSearchListener,
ChooseBookmarksSortingTypeFragment.ChooseSortingTypeListener,
MenuBottomSheetFragment.MenuBottomSheetInterface
{

View file

@ -11,7 +11,7 @@ import androidx.core.os.ParcelCompat;
import app.organicmaps.Framework;
import app.organicmaps.routing.RoutePointInfo;
import app.organicmaps.sdk.search.Popularity;
import app.organicmaps.search.Popularity;
import app.organicmaps.util.Constants;
// TODO consider refactoring to remove hack with MapObject unmarshalling itself and Bookmark at the same time.

View file

@ -12,7 +12,7 @@ import androidx.core.os.ParcelCompat;
import app.organicmaps.Framework;
import app.organicmaps.routing.RoutePointInfo;
import app.organicmaps.sdk.search.Popularity;
import app.organicmaps.search.Popularity;
import app.organicmaps.util.Utils;
import app.organicmaps.widget.placepage.PlacePageData;

View file

@ -30,15 +30,15 @@ public class CategoriesScreen extends BaseMapScreen
private record CategoryData(@StringRes int nameResId, @DrawableRes int iconResId, @DrawableRes int iconNightResId)
{
}
//TODO: previously handled theme by itself, but now icons are dynamic so not needed.
private static final List<CategoryData> CATEGORIES = Arrays.asList(
new CategoryData(R.string.category_fuel, R.drawable.ic_category_fuel, R.drawable.ic_category_fuel_night),
new CategoryData(R.string.category_parking, R.drawable.ic_category_parking, R.drawable.ic_category_parking_night),
new CategoryData(R.string.category_eat, R.drawable.ic_category_eat, R.drawable.ic_category_eat_night),
new CategoryData(R.string.category_food, R.drawable.ic_category_food, R.drawable.ic_category_food_night),
new CategoryData(R.string.category_hotel, R.drawable.ic_category_hotel, R.drawable.ic_category_hotel_night),
new CategoryData(R.string.category_toilet, R.drawable.ic_category_toilet, R.drawable.ic_category_toilet_night),
new CategoryData(R.string.category_rv, R.drawable.ic_category_rv, R.drawable.ic_category_rv_night)
new CategoryData(R.string.category_fuel, R.drawable.ic_category_fuel, R.drawable.ic_category_fuel),
new CategoryData(R.string.category_parking, R.drawable.ic_category_parking, R.drawable.ic_category_parking),
new CategoryData(R.string.category_eat, R.drawable.ic_category_eat, R.drawable.ic_category_eat),
new CategoryData(R.string.category_food, R.drawable.ic_category_food, R.drawable.ic_category_food),
new CategoryData(R.string.category_hotel, R.drawable.ic_category_hotel, R.drawable.ic_category_hotel),
new CategoryData(R.string.category_toilet, R.drawable.ic_category_toilet, R.drawable.ic_category_toilet),
new CategoryData(R.string.category_rv, R.drawable.ic_category_rv, R.drawable.ic_category_rv)
);
private final int MAX_CATEGORIES_SIZE;

View file

@ -23,13 +23,13 @@ import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.screens.base.BaseMapScreen;
import app.organicmaps.car.util.UiHelpers;
import app.organicmaps.location.LocationHelper;
import app.organicmaps.sdk.search.SearchListener;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.sdk.search.SearchRecents;
import app.organicmaps.sdk.search.SearchResult;
import app.organicmaps.search.NativeSearchListener;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.search.SearchRecents;
import app.organicmaps.search.SearchResult;
import app.organicmaps.util.Language;
public class SearchOnMapScreen extends BaseMapScreen implements SearchListener
public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchListener
{
private final int MAX_RESULTS_SIZE;

View file

@ -21,13 +21,13 @@ import app.organicmaps.bookmarks.data.MapObject;
import app.organicmaps.car.SurfaceRenderer;
import app.organicmaps.car.screens.base.BaseMapScreen;
import app.organicmaps.location.LocationHelper;
import app.organicmaps.sdk.search.SearchListener;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.sdk.search.SearchRecents;
import app.organicmaps.sdk.search.SearchResult;
import app.organicmaps.search.NativeSearchListener;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.search.SearchRecents;
import app.organicmaps.search.SearchResult;
import app.organicmaps.util.Language;
public class SearchScreen extends BaseMapScreen implements SearchTemplate.SearchCallback, SearchListener
public class SearchScreen extends BaseMapScreen implements SearchTemplate.SearchCallback, NativeSearchListener
{
private final int MAX_RESULTS_SIZE;

View file

@ -13,7 +13,7 @@ import androidx.car.app.model.ForegroundCarColorSpan;
import app.organicmaps.R;
import app.organicmaps.car.util.Colors;
import app.organicmaps.car.util.RoutingHelpers;
import app.organicmaps.sdk.search.SearchResult;
import app.organicmaps.search.SearchResult;
import java.util.ArrayList;
import java.util.List;

View file

@ -75,7 +75,7 @@ public class SettingsScreen extends BaseMapScreen
private Item createThemeItem()
{
final Row.Builder builder = new Row.Builder();
builder.setTitle(getCarContext().getString(R.string.pref_map_style_title));
builder.setTitle(getCarContext().getString(R.string.pref_appearance_title));
builder.addText(getCarContext().getString(ThemeUtils.getThemeMode(getCarContext()).getTitleId()));
builder.setOnClickListener(() -> getScreenManager().push(new ThemeScreen(getCarContext(), getSurfaceRenderer())));
builder.setBrowsable(true);

View file

@ -47,7 +47,7 @@ public class ThemeScreen extends BaseMapScreen
{
final Header.Builder builder = new Header.Builder();
builder.setStartHeaderAction(Action.BACK);
builder.setTitle(getCarContext().getString(R.string.pref_map_style_title));
builder.setTitle(getCarContext().getString(R.string.pref_appearance_title));
return builder.build();
}
@ -56,7 +56,7 @@ public class ThemeScreen extends BaseMapScreen
{
final ItemList.Builder builder = new ItemList.Builder();
final ThemeUtils.ThemeMode currentThemeMode = ThemeUtils.getThemeMode(getCarContext());
builder.addItem(createRadioButton(ThemeUtils.ThemeMode.AUTO, currentThemeMode));
builder.addItem(createRadioButton(ThemeUtils.ThemeMode.FOLLOW_SYSTEM, currentThemeMode));
builder.addItem(createRadioButton(ThemeUtils.ThemeMode.NIGHT, currentThemeMode));
builder.addItem(createRadioButton(ThemeUtils.ThemeMode.LIGHT, currentThemeMode));
return new ListTemplate.Builder().setHeader(createHeader()).setSingleList(builder.build()).build();

View file

@ -8,7 +8,7 @@ import androidx.car.app.suggestion.model.Suggestion;
import androidx.core.graphics.drawable.IconCompat;
import app.organicmaps.R;
import app.organicmaps.sdk.search.SearchRecents;
import app.organicmaps.search.SearchRecents;
import java.util.ArrayList;
import java.util.List;

View file

@ -17,9 +17,9 @@ public final class ThemeUtils
{
public enum ThemeMode
{
AUTO(R.string.auto, R.string.theme_auto),
LIGHT(R.string.off, R.string.theme_default),
NIGHT(R.string.on, R.string.theme_night);
LIGHT(R.string.light, R.string.theme_default),
NIGHT(R.string.dark, R.string.theme_night),
FOLLOW_SYSTEM(R.string.follow_system, R.string.theme_follow_system);
ThemeMode(@StringRes int titleId, @StringRes int prefsKeyId)
{
@ -58,7 +58,7 @@ public final class ThemeUtils
@UiThread
public static void update(@NonNull CarContext context, @NonNull ThemeMode oldThemeMode)
{
final ThemeMode newThemeMode = oldThemeMode == ThemeMode.AUTO ? (context.isDarkMode() ? ThemeMode.NIGHT : ThemeMode.LIGHT) : oldThemeMode;
final ThemeMode newThemeMode = oldThemeMode == ThemeMode.FOLLOW_SYSTEM ? (context.isDarkMode() ? ThemeMode.NIGHT : ThemeMode.LIGHT) : oldThemeMode;
@Framework.MapStyle
int newMapStyle;
@ -74,7 +74,7 @@ public final class ThemeUtils
public static boolean isNightMode(@NonNull CarContext context)
{
final ThemeMode themeMode = getThemeMode(context);
return themeMode == ThemeMode.NIGHT || (themeMode == ThemeMode.AUTO && context.isDarkMode());
return themeMode == ThemeMode.NIGHT || (themeMode == ThemeMode.FOLLOW_SYSTEM && context.isDarkMode());
}
@SuppressLint("ApplySharedPref")
@ -88,13 +88,13 @@ public final class ThemeUtils
@NonNull
public static ThemeMode getThemeMode(@NonNull CarContext context)
{
final String autoTheme = context.getString(R.string.theme_auto);
final String followSystemTheme = context.getString(R.string.theme_follow_system);
final String lightTheme = context.getString(R.string.theme_default);
final String nightTheme = context.getString(R.string.theme_night);
final String themeMode = getSharedPreferences(context).getString(THEME_KEY, autoTheme);
final String themeMode = getSharedPreferences(context).getString(THEME_KEY, followSystemTheme);
if (themeMode.equals(autoTheme))
return ThemeMode.AUTO;
if (themeMode.equals(followSystemTheme))
return ThemeMode.FOLLOW_SYSTEM;
else if (themeMode.equals(lightTheme))
return ThemeMode.LIGHT;
else if (themeMode.equals(nightTheme))

View file

@ -17,8 +17,8 @@ import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.base.OnBackPressListener;
import app.organicmaps.sdk.search.MapSearchListener;
import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.search.NativeMapSearchListener;
import app.organicmaps.search.SearchEngine;
import app.organicmaps.widget.PlaceholderView;
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
@ -52,13 +52,13 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapte
}
};
private final MapSearchListener mSearchListener = new MapSearchListener()
private final NativeMapSearchListener mSearchListener = new NativeMapSearchListener()
{
// Called from JNI.
@Keep
@SuppressWarnings("unused")
@Override
public void onMapSearchResults(@NonNull Result[] results, long timestamp, boolean isLast)
public void onMapSearchResults(Result[] results, long timestamp, boolean isLast)
{
if (!mSearchRunning || timestamp != mCurrentSearch)
return;
@ -66,8 +66,8 @@ public class DownloaderFragment extends BaseMwmRecyclerFragment<DownloaderAdapte
List<CountryItem> rs = new ArrayList<>();
for (Result result : results)
{
CountryItem item = CountryItem.fill(result.countryId());
item.searchResultName = result.matchedString();
CountryItem item = CountryItem.fill(result.countryId);
item.searchResultName = result.matchedString;
rs.add(item);
}

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