Compare commits

..

1 commit

Author SHA1 Message Date
e33e051954 [docs] Add collaboration principles
Signed-off-by: Roman Tsisyk <roman@tsisyk.com>
2024-12-30 13:41:19 +00:00
1206 changed files with 283586 additions and 175465 deletions

78
.github/CODEOWNERS vendored
View file

@ -1,69 +1,9 @@
# All non-assigned.
* @organicmaps/mergers
# Visual design.
/android/app/src/main/res/drawable*/ @organicmaps/design
/android/app/src/main/res/font/ @organicmaps/design
/android/app/src/main/res/mipmap*/ @organicmaps/design
/data/*.ttf @organicmaps/design
/data/resources-svg/ @organicmaps/design
/data/search-icons/ @organicmaps/design
/iphone/Maps/Images.xcassets/ @organicmaps/design
# Android.
/android/ @organicmaps/android
/android/app/src/main/java/app/organicmaps/car/ @organicmaps/android-auto
/docs/ANDROID_LOCATION_TEST.md @organicmaps/android
/docs/JAVA_STYLE.md @organicmaps/android
# no owner for translation changes
/android/app/src/main/res/values*/strings.xml
# iOS.
/iphone/ @organicmaps/ios
/xcode/ @organicmaps/ios
/docs/OBJC_STYLE.md @organicmaps/ios
# no owner for translation changes
/iphone/plist.txt
/iphone/Maps/LocalizedStrings/
# Qt
/qt/ @organicmaps/qt
# Rendering
/drape/ @organicmaps/rendering
/drape_frontend/ @organicmaps/rendering
# Map Data.
/tools/python/maps_generator/ @organicmaps/data
/generator/ @organicmaps/data
/topography_generator/ @organicmaps/data
/data/borders/ @organicmaps/data
/data/conf/isolines/ @organicmaps/data
/docs/SUBWAY_GENERATION.md @organicmaps/data
/docs/MAPS.md @organicmaps/data
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @organicmaps/data
# no owner (changed often to add a new POI)
/generator/generator_tests/osm_type_test.cpp
# Map Styles.
/data/styles/ @organicmaps/styles
/data/types.txt @organicmaps/styles
/data/visibility.txt @organicmaps/styles
/data/mapcss-mapping.csv @organicmaps/styles
/data/replaced_tags.txt @organicmaps/styles
/data/classificator.txt @organicmaps/styles
/data/drules_* @organicmaps/styles
/docs/STYLES.md
/tools/kothic/ @organicmaps/styles
# DevOps.
/.github/workflows @organicmaps/devops
/android/*gradle* @organicmaps/devops
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
/xcode/fastlane/ @organicmaps/devops
# Growth.
README.md @organicmaps/growth
/.github/FUNDING.yml @organicmaps/growth
/android/app/src/fdroid/play/ @organicmaps/growth
/android/app/src/google/play/ @organicmaps/growth
/iphone/metadata/ @organicmaps/growth
# Legal.
LEGAL @organicmaps/legal
LICENSE @organicmaps/legal
NOTICE @organicmaps/legal
CONTRIBUTORS @organicmaps/legal
/docs/CODE_OF_CONDUCT.md @organicmaps/legal
/docs/DCO.md @organicmaps/legal
/docs/GOVERNANCE.md @organicmaps/legal
# Require legal approval for all new graphics
android/app/src/main/res/drawable*/ @organicmaps/legal
android/app/src/main/res/fonts/ @organicmaps/legal
android/app/src/main/res/mipmap*/ @organicmaps/legal
data/*.ttf @organicmaps/legal
data/resources*/ @organicmaps/legal
data/search-icons/ @organicmaps/legal
data/styles/clear/style-*/ @organicmaps/legal
iphone/Maps/Images.xcassets/ @organicmaps/legal

View file

@ -29,7 +29,7 @@ jobs:
version=$(tools/unix/version.sh ios_version)
# +1 because below a "Bump versions" commit is created.
# TODO: Find a way to refactor FDroid versioning without that additional commit.
build=$(($(tools/unix/version.sh count) + 1))
build=$(($(tools/unix/version.sh ios_build) + 1))
code=$(($(tools/unix/version.sh android_code) + 1))
tag=$version-$build-android
echo "::set-output name=version::$version"

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

@ -17,9 +17,6 @@ endif()
target_include_directories(${PROJECT_NAME} PUBLIC .)
if (PLATFORM_LINUX)
target_compile_definitions(${PROJECT_NAME} PRIVATE VK_USE_PLATFORM_XLIB_KHR)
endif()
# dlopen
target_link_libraries(${PROJECT_NAME} $<$<BOOL:CMAKE_DL_LIBS>:${CMAKE_DL_LIBS}>)

View file

@ -22,20 +22,7 @@ extern "C" {
#include <dlfcn.h>
int InitVulkan(void) {
#if defined(__APPLE__)
void* libvulkan = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) {
libvulkan = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL);
}
if (!libvulkan) {
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
}
#else
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) {
libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
}
#endif
void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) return 0;
// Vulkan supported, set function addresses
@ -558,10 +545,6 @@ int InitVulkan(void) {
vkDestroyDebugReportCallbackEXT = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(dlsym(libvulkan, "vkDestroyDebugReportCallbackEXT"));
vkDebugReportMessageEXT = reinterpret_cast<PFN_vkDebugReportMessageEXT>(dlsym(libvulkan, "vkDebugReportMessageEXT"));
#if defined(__APPLE__)
vkCreateMacOSSurfaceMVK = reinterpret_cast<PFN_vkCreateMacOSSurfaceMVK>(dlsym(libvulkan, "vkCreateMacOSSurfaceMVK"));
#endif
return 1;
}
@ -1154,10 +1137,6 @@ PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR;
PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR;
#endif
#if defined(__APPLE__)
PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
#endif
#ifdef __cplusplus
}
#endif

View file

@ -25,10 +25,6 @@ extern "C" {
#define VK_USE_PLATFORM_ANDROID_KHR 1
#include <vulkan/vulkan.h>
#if defined(__APPLE__)
#include <vulkan/vulkan_macos.h>
#endif
/* Initialize the Vulkan function pointer variables declared in this header.
* Returns 0 if vulkan is not available, non-zero if it is available.
*/
@ -504,10 +500,6 @@ extern PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
extern PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
extern PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
#if defined(__APPLE__)
extern PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
#endif
#ifdef __cplusplus
}
#endif

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
@ -278,6 +265,16 @@ find_package(Threads REQUIRED)
# Scripts
if (NOT CMAKE_HOST_WIN32)
execute_process(
COMMAND "${OMIM_ROOT}/tools/unix/check_cert.sh"
RESULT_VARIABLE CheckCertResult
)
if (CheckCertResult)
message(FATAL_ERROR "Certificate check failed")
endif()
endif()
if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
list(APPEND qt_components Core Network)
if (NOT SKIP_QT_GUI OR NOT SKIP_TESTS OR PYBINDINGS)
@ -397,7 +394,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,73 +1,35 @@
This file contains a list of people who have contributed to this project.
Its not neccesarily comprehensive.
Feel free to add yourself here along with your first contribution!
This file contains a list of people who have contributed to the
public version of MAPS.ME and Organic Maps.
Original MAPS.ME (MapsWithMe) design and implementation:
Yury Melnichek <yury@melnichek.com>
Alexander Borsuk <me@alex.bio>
Viktor Govako <viktor.govako@gmail.com>
Siarhei Rachytski <siarhei.rachytski@gmail.com>
--------------------------------------------------------------------------------
Organic Maps (formerly OMaps) contributors:
(in alphabetic order)
Organic Maps contributions:
--------------------------------------------------------------------------------
Alexander Borsuk <me@alex.bio>
Roman Tsisyk <roman@tsisyk.com>
Viktor Govako <viktor.govako@gmail.com>
Caspar Nuël <casparnuel@yandex.com>
Konstantin Pastbin
Nishant Bhandari <nishantbhandari0019@gmail.com>
Sebastiao Sousa <sebastiao.sousa@tecnico.ulisboa.pt>
Harry Bond <me@hbond.xyz>
Organic Maps translations:
Karina Kordon
Konstantin Pastbin
Metehan Özyürek
Joan Montané
Luna Rose
Alexander Borsuk <me@alex.bio>
Alexey Krasilnikov
Andrew Shkrob
Anton Makouski
Arnaud Vergnet
Arthur-GYT
Atemu
Caspar Nuël <casparnuel@yandex.com>
cyber-toad
David Martinez
dbf
Dzmitry Strekha
Dzmitry Yarmolenka
Fabian Wüthrich
Ferenc Géczi
Filip Czaplicki
FinixFighter
fparri
Francesco Gazzetta
gallegonovato
Gonzalo Pesquero
Harry Bond <me@hbond.xyz>
Jaime Marquinez Ferrandiz
Jean-Baptiste Charron
Jenny Em
Joan Montané
Karina Kordon
Kavi Khalique
Kiryl Kaveryn
Kiryl Razhdzestvenski
Konstantin Pastbin
Loïc Hernaut
Lukas Hamm
Lukas Kronberger
Luna Rose
map-per
Markku Huotari
Mateusz Konieczny
Matheus Gomes
MbTy1
Meenbeese
Metehan Özyürek
Michał Brzozowski
Nishant Bhandari <nishantbhandari0019@gmail.com>
Ognjen Blagojevic
Osyotr
renderexpert
Roman Kuznetsov
Roman Tsisyk <roman@tsisyk.com>
Rudo Kemper
Sebastiao Sousa <sebastiao.sousa@tecnico.ulisboa.pt>
Sergiy Kozyr
Tobias G. <tobi.goergens@gmail.com>
Veniamin Gvozdikov <g.veniamin@googlemail.com>
Viktor Govako <viktor.govako@gmail.com>
Will Bradley
--------------------------------------------------------------------------------
MAPS.ME at Mail.Ru Group (prior to the Organic Maps (OMaps) fork in 2020/2021):
MAPS.ME contributions (before Organic Maps was forked in 2020-2021):
--------------------------------------------------------------------------------
Code contributions:
Dmitry Yunitski
Lev Dragunov
@ -138,13 +100,3 @@ Special thanks to:
Yuri Gurski
Dmitry Matveev
Anna Yakovleva
--------------------------------------------------------------------------------
MAPS.ME (originally MapsWithMe) design and implementation at MapsWithMe GmbH
(from 2010 till the acquisition by Mail.ru Group in 2014):
--------------------------------------------------------------------------------
Yury Melnichek <yury@melnichek.com>
Alexander Borsuk <me@alex.bio>
Viktor Govako <viktor.govako@gmail.com>
Siarhei Rachytski <siarhei.rachytski@gmail.com>

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>
@ -115,14 +115,6 @@ Beloved institutional sponsors below have provided targeted grants to cover some
<a href="https://www.mythic-beasts.com/">Mythic Beasts</a> ISP <a href="https://www.mythic-beasts.com/blog/2021/10/06/improving-the-world-bit-by-expensive-bit/">provides us</a> two virtual servers with 400 TB/month of free bandwidth to host and serve maps downloads and updates.
</td>
</tr>
<tr>
<td>
<a href="https://44plus.vn"><img src="docs/sponsors/44plus.svg" alt="44+ Technologies" width="200px"></a>
</td>
<td>
<a href="https://44plus.vn">44+ Technologies</a> is <a href="https://44plus.vn/organicmaps">providing us </a>with a free dedicated server worth around $12,000/year to serve maps across Vietnam & Southeast Asia.
</td>
</tr>
<tr>
<td>
<a href="https://futo.org"><img src="docs/sponsors/futo.svg" alt="FUTO" width="200px"></a>
@ -167,8 +159,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 +171,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

@ -22,7 +22,7 @@ buildscript {
googleFirebaseServicesDefault
dependencies {
classpath 'com.android.tools.build:gradle:8.7.3'
classpath 'com.android.tools.build:gradle:8.7.2'
if (googleFirebaseServicesEnabled) {
println('Building with Google Firebase Services')
@ -100,7 +100,7 @@ android {
// All properties are read from gradle.properties file
compileSdk propCompileSdkVersion.toInteger()
ndkVersion '27.2.12479018'
ndkVersion '27.1.12297006'
defaultConfig {
// Default package name is taken from the manifest and should be app.organicmaps
@ -363,7 +363,7 @@ android {
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.3'
// Google Play Location Services
//
@ -379,7 +379,7 @@ dependencies {
huaweiImplementation 'com.google.android.gms:play-services-location:21.3.0'
// This is the microG project's re-implementation which is permissible on
// F-droid because it's Apache-2.0.
fdroidImplementation 'org.microg.gms:play-services-location:0.3.6.244735'
fdroidImplementation 'org.microg.gms:play-services-location:0.3.4.240913'
// Google Firebase Services
if (googleFirebaseServicesEnabled) {
@ -396,11 +396,11 @@ dependencies {
// We don't use Kotlin, but some dependencies are actively using it.
// See https://stackoverflow.com/a/75719642
implementation 'androidx.core:core:1.15.0'
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.1.10'))
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.0.21'))
implementation 'androidx.annotation:annotation:1.9.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.car.app:app:1.7.0-rc01'
implementation 'androidx.car.app:app-projected:1.7.0-rc01'
implementation 'androidx.car.app:app:1.7.0-beta03'
implementation 'androidx.car.app:app-projected:1.7.0-beta03'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.fragment:fragment:1.8.5'
implementation 'androidx.preference:preference:1.2.1'
@ -417,7 +417,7 @@ dependencies {
// Test Dependencies
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.mockito:mockito-core:5.15.2'
testImplementation 'org.mockito:mockito-core:5.12.0'
testImplementation 'org.mockito:mockito-inline:5.2.0'
}

View file

@ -0,0 +1,28 @@
package app.organicmaps;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest
{
@Test
public void useAppContext()
{
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("app.organicmaps", appContext.getPackageName());
}
}

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• Новыя дадзеныя OpenStreetMap ад 27 лютага
• Магчымасць уручную расстаўляць прамежкавыя кропкі маршруту
• Экспарт аднаго абранага трэка са спісу
• Палепшаная маршрутызацыя для веласіпедыстаў
• Дададзена сістэмнае апавяшчэнне пры загрузцы карт, фонавыя загрузкі больш не перарываюцца
• Дададзены мігатлівы віджэт запісу трэка
…і шматлікае іншае на omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…weitere Details unter omaps.org/news
• Neue OpenStreetMap-Daten vom 22. November
• Hervorhebung des übereinstimmenden Teils der Adresse in Suchergebnissen
• Sortierung des Suchverlaufs nach letzter Nutzung
• Behobene Startabstürze bei einigen älteren Geräten mit Mali-T-GPUs
• Weitere Suchverbesserungen, Übersetzungs-Updates und Fehlerbehebungen

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• Nuevos datos de OpenStreetMap del 22 de noviembre
• Resaltado de la parte coincidente de la dirección en los resultados de búsqueda
• Ordenar el historial de búsquedas por la última vez de uso
• Solucionados los bloqueos al inicio en algunos dispositivos antiguos con GPU Mali-T
• Otras mejoras en la búsqueda, actualizaciones de traducción y correcciones de errores

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…plus de détails sur omaps.org/news
• Nouvelles données OpenStreetMap du 22 novembre
• Mise en évidence de la partie correspondante de l'adresse dans les résultats de recherche
• Tri de l'historique des recherches par dernier temps d'utilisation
• Correction des plantages au démarrage sur certains anciens appareils avec des GPU Mali-T
• Autres améliorations de recherche, mises à jour de traduction et corrections de bugs

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• Новые данные OpenStreetMap от 27 февраля
• Возможность вручную расставлять промежуточные точки маршрута
• Экспорт одного выбранного трека из списка
• Улучшенная маршрутизация для велосипедистов
• Добавлено системное уведомление при загрузке карт, фоновые загрузки больше не прерываются
• Добавлен мигающий виджет записи трека
…и многое другое на omaps.org/news
• Новые данные OpenStreetMap от 22 ноября
В результатах поиска выделяется совпавшая часть адреса
• История поиска всегда сортируется по времени последнего использования
• Исправлена проблема запуска на некоторых старых устройствах с GPU Mali-T
• Различные улучшения поиска, обновления переводов и исправления ошибок

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1 +1 @@
Отворене мапе из заједнице за путнике, туристе, бициклисте и планинаре
Open-source, community-driven maps for travelers, tourists, cyclists & hikers

View file

@ -1 +1 @@
Organic Maps — офлајн мапе
Offline Organic Maps Hike Bike

View file

@ -1 +1 @@
Organic Maps, офлајн мапе и GPS навигатор
Organic Maps Offline Hike, Bike, GPS Navigation

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• Нові дані OpenStreetMap від 27 лютого
• Можливість вручну розставляти проміжні точки маршруту
• Експорт одного вибраного треку зі списку
• Покращена маршрутизація для велосипедистів
• Додано системне повідомлення під час завантаження карт, фонові завантаження більше не перериваються
• Додано миготливий віджет запису треку
…більше подробиць на omaps.org/news
• Нові дані OpenStreetMap від 22 листопада
• Адреса підсвічюється в результатах пошуку
• Історія пошука сортується за часом останнього використання
• Виправлення падіння на деяких старих девайсах із Mali-T GPU
• Деякі покращення якості пошуку, уточнення перекладів, виправлення помилок

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1,8 +1,5 @@
• 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
…more details at omaps.org/news
• New OpenStreetMap data as of November 22
• Highlight matched part of the address in search results
• Sort search history by last usage time
• Fixed start-up crashes for some older devices with Mali-T GPUs
• Other search improvements, translation updates & bug fixes

View file

@ -1 +1 @@
version: 2025.03.02-7-FDroid+25030207
version: 2024.11.27-12-FDroid+24112712

View file

@ -37,7 +37,6 @@
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
<!--
Android 13 (API level 33) and higher supports a runtime permission for sending non-exempt (including Foreground
@ -80,14 +79,12 @@
android:resizeableActivity="true"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:manageSpaceActivity="${applicationId}.ManageSpaceActivity"
tools:targetApi="33">
<!-- Allows for config and orientation change without killing/restarting main activity -->
<activity
android:name="app.organicmaps.SplashActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|uiMode|keyboard|keyboardHidden|navigation"
android:screenOrientation="fullUser"
android:exported="true">
<intent-filter>
@ -122,7 +119,7 @@
<data android:scheme="https"/>
<data android:host="omaps.app"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -346,8 +343,7 @@
<activity
android:name="app.organicmaps.DownloadResourcesLegacyActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"/>
android:configChanges="orientation|screenLayout|screenSize"/>
<activity-alias
android:name="app.organicmaps.DownloadResourcesActivity"
@ -364,18 +360,11 @@
android:name="app.organicmaps.MwmActivity"
android:launchMode="singleTask"
android:configChanges="uiMode"
android:screenOrientation="fullUser"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>
<activity-alias
android:name="${applicationId}.ManageSpaceActivity"
android:exported="true"
android:targetActivity=".SplashActivity" />
<activity
android:name="app.organicmaps.downloader.DownloaderActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/download_maps"
android:parentActivityName="app.organicmaps.MwmActivity"
android:windowSoftInputMode="adjustResize" />
@ -383,7 +372,6 @@
<activity
android:name="app.organicmaps.search.SearchActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/search_map"
android:parentActivityName="app.organicmaps.MwmActivity"
android:windowSoftInputMode="stateVisible|adjustResize" />
@ -391,7 +379,6 @@
<activity
android:name="app.organicmaps.settings.SettingsActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/settings"
android:parentActivityName="app.organicmaps.MwmActivity" />
@ -409,7 +396,6 @@
<activity
android:name="app.organicmaps.bookmarks.BookmarkCategoriesActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/bookmarks_and_tracks"
android:parentActivityName="app.organicmaps.MwmActivity"
android:windowSoftInputMode="adjustResize" />
@ -417,7 +403,6 @@
<activity
android:name="app.organicmaps.bookmarks.BookmarkListActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/bookmarks"
android:parentActivityName="app.organicmaps.bookmarks.BookmarkCategoriesActivity"
android:windowSoftInputMode="adjustResize" />
@ -425,7 +410,6 @@
<activity
android:name="app.organicmaps.editor.EditorActivity"
android:configChanges="orientation|screenLayout|screenSize"
android:screenOrientation="fullUser"
android:label="@string/edit_place"
android:parentActivityName="app.organicmaps.MwmActivity"
android:windowSoftInputMode="adjustResize" />
@ -459,21 +443,17 @@
android:label="@string/driving_options_title"/>
<activity
android:name="app.organicmaps.MapPlaceholderActivity"/>
<activity
android:name="app.organicmaps.car.screens.permissions.RequestPermissionsActivity"/>
<service
android:name="app.organicmaps.car.CarAppService"
android:exported="true"
android:foregroundServiceType="specialUse"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION" />
</intent-filter>
<intent-filter>
<action android:name="androidx.car.app.action.NAVIGATE" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="geo" />
</intent-filter>
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="@string/android_auto_fgs_explanation_for_special_use"/>
</service>
<service
@ -490,13 +470,6 @@
android:stopWithTask="false"
/>
<service
android:name=".downloader.DownloaderService"
android:foregroundServiceType="dataSync"
android:exported="false"
android:enabled="true"
android:stopWithTask="false"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${FILE_PROVIDER_PLACEHOLDER}"
@ -512,8 +485,8 @@
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="false" />
<!-- Disable Google's anonymous stats collection -->
<meta-data android:name="android.webkit.WebView.MetricsOptOut" android:value="true" />
<!-- Version >= 3.0. Dex Dual Mode support for compatible Samsung devices.
<!-- Version >= 3.0. Dex Dual Mode support for compatible Samsung devices.
See the documentation: https://developer.samsung.com/samsung-dex/modify-optimizing.html //-->
<meta-data android:name="com.samsung.android.multidisplay.keep_process_alive" android:value="true" />

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
@ -66,7 +66,6 @@ set(SRC
app/organicmaps/util/LogsManager.cpp
app/organicmaps/util/NetworkPolicy.cpp
app/organicmaps/util/StringUtils.cpp
app/organicmaps/util/UiThread.cpp
app/organicmaps/vulkan/android_vulkan_context_factory.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

@ -1578,12 +1578,6 @@ Java_app_organicmaps_Framework_nativeAddRoutePoint(JNIEnv * env, jclass, jstring
frm()->GetRoutingManager().AddRoutePoint(std::move(data));
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeRemoveRoutePoints(JNIEnv * env, jclass)
{
frm()->GetRoutingManager().RemoveRoutePoints();
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeRemoveRoutePoint(JNIEnv * env, jclass,
jint markType, jint intermediateIndex)
@ -1633,13 +1627,6 @@ Java_app_organicmaps_Framework_nativeGetRoutePoints(JNIEnv * env, jclass)
});
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeMoveRoutePoint(JNIEnv * env, jclass,
jint currentIndex, jint targetIndex)
{
frm()->GetRoutingManager().MoveRoutePoint(currentIndex, targetIndex);
}
JNIEXPORT jobject JNICALL
Java_app_organicmaps_Framework_nativeGetTransitRouteInfo(JNIEnv * env, jclass)
{
@ -2006,74 +1993,4 @@ Java_app_organicmaps_Framework_nativeGetKayakHotelLink(JNIEnv * env, jclass, jst
return url.empty() ? nullptr : jni::ToJavaString(env, url);
}
JNIEXPORT jboolean JNICALL
Java_app_organicmaps_Framework_nativeShouldShowProducts(JNIEnv * env, jclass)
{
return frm()->ShouldShowProducts();
}
JNIEXPORT jobject JNICALL
Java_app_organicmaps_Framework_nativeGetProductsConfiguration(JNIEnv * env, jclass)
{
auto config = frm()->GetProductsConfiguration();
if (!config) return nullptr;
static jclass const productClass = jni::GetGlobalClassRef(
env,
"app/organicmaps/products/Product"
);
static jmethodID const productConstructor = jni::GetConstructorID(
env,
productClass,
"(Ljava/lang/String;Ljava/lang/String;)V"
);
jobjectArray products = jni::ToJavaArray(
env,
productClass,
config->GetProducts(),
[](JNIEnv * env, products::ProductsConfig::Product const & product)
{
jni::TScopedLocalRef const title(env, jni::ToJavaString(env, product.GetTitle()));
jni::TScopedLocalRef const link(env, jni::ToJavaString(env, product.GetLink()));
return env->NewObject(
productClass,
productConstructor,
title.get(),
link.get()
);
});
static jclass const productsConfigClass = jni::GetGlobalClassRef(
env,
"app/organicmaps/products/ProductsConfig"
);
static jmethodID const productsConfigConstructor = jni::GetConstructorID(
env,
productsConfigClass,
"(Ljava/lang/String;[Lapp/organicmaps/products/Product;)V"
);
jni::TScopedLocalRef const placePagePrompt(env, jni::ToJavaString(env, config->GetPlacePagePrompt()));
return env->NewObject(productsConfigClass, productsConfigConstructor, placePagePrompt.get(), products);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeDidCloseProductsPopup(JNIEnv * env, jclass, jstring reason)
{
frm()->DidCloseProductsPopup(frm()->FromString(jni::ToNativeString(env, reason)));
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeDidSelectProduct(JNIEnv * env, jclass, jstring title, jstring link)
{
products::ProductsConfig::Product product(
jni::ToNativeString(env, title),
jni::ToNativeString(env, link)
);
frm()->DidSelectProduct(product);
}
} // extern "C"

View file

@ -1,5 +1,6 @@
#include "app/organicmaps/Framework.hpp"
#include "app/organicmaps/platform/GuiThread.hpp"
#include "app/organicmaps/platform/AndroidPlatform.hpp"
#include "app/organicmaps/core/jni_helper.hpp"
@ -13,16 +14,16 @@ extern "C"
android::Platform::Instance().SetSettingsDir(jni::ToNativeString(env, settingsPath));
}
// static void nativeInitPlatform(Context context, String apkPath, String storagePath, String privatePath, String tmpPath,
// void nativeInitPlatform(String apkPath, String storagePath, String privatePath, String tmpPath,
// String flavorName, String buildType, boolean isTablet);
JNIEXPORT void JNICALL
Java_app_organicmaps_MwmApplication_nativeInitPlatform(JNIEnv * env, jclass clazz, jobject context,
jstring apkPath, jstring writablePath,
jstring privatePath, jstring tmpPath,
jstring flavorName, jstring buildType,
jboolean isTablet)
Java_app_organicmaps_MwmApplication_nativeInitPlatform(JNIEnv * env, jobject thiz,
jstring apkPath, jstring writablePath,
jstring privatePath, jstring tmpPath,
jstring flavorName, jstring buildType,
jboolean isTablet)
{
android::Platform::Instance().Initialize(env, context, apkPath, writablePath, privatePath, tmpPath,
android::Platform::Instance().Initialize(env, thiz, apkPath, writablePath, privatePath, tmpPath,
flavorName, buildType, isTablet);
}
@ -41,6 +42,13 @@ extern "C"
}
}
// static void nativeProcessTask(long taskPointer);
JNIEXPORT void JNICALL
Java_app_organicmaps_MwmApplication_nativeProcessTask(JNIEnv * env, jclass clazz, jlong taskPointer)
{
android::GuiThread::ProcessTask(taskPointer);
}
// static void nativeAddLocalization(String name, String value);
JNIEXPORT void JNICALL
Java_app_organicmaps_MwmApplication_nativeAddLocalization(JNIEnv * env, jclass clazz, jstring name, jstring value)

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");
@ -165,13 +165,12 @@ jobject CreateElevationInfo(JNIEnv * env, ElevationInfo const & info)
"[Lapp/organicmaps/bookmarks/data/ElevationInfo$Point;"
"IIIIIJ)V");
jni::TScopedLocalObjectArrayRef jPoints(env, ToElevationPointArray(env, info.GetPoints()));
// TODO (KK): elevation info should have only the elevation data - see the https://github.com/organicmaps/organicmaps/pull/10063
return env->NewObject(g_elevationInfoClazz, ctorId,
jPoints.get(),
// static_cast<jint>(info.GetAscent()),
// static_cast<jint>(info.GetDescent()),
// static_cast<jint>(info.GetMinAltitude()),
// static_cast<jint>(info.GetMaxAltitude()),
static_cast<jint>(info.GetAscent()),
static_cast<jint>(info.GetDescent()),
static_cast<jint>(info.GetMinAltitude()),
static_cast<jint>(info.GetMaxAltitude()),
static_cast<jint>(info.GetDifficulty()));
}

View file

@ -591,15 +591,6 @@ Java_app_organicmaps_bookmarks_data_BookmarkManager_nativeSetAllCategoriesVisibi
frm()->GetBookmarkManager().SetAllCategoriesVisibility(static_cast<bool>(visible));
}
JNIEXPORT void JNICALL
Java_app_organicmaps_bookmarks_data_BookmarkManager_nativePrepareTrackFileForSharing(JNIEnv * env, jclass, jlong trackId, jint kmlFileType)
{
frm()->GetBookmarkManager().PrepareTrackFileForSharing(static_cast<kml::TrackId>(trackId), [env](BookmarkManager::SharingResult const & result)
{
OnPreparedFileForSharing(env, result);
}, static_cast<KmlFileType>(kmlFileType));
}
JNIEXPORT void JNICALL
Java_app_organicmaps_bookmarks_data_BookmarkManager_nativePrepareFileForSharing(JNIEnv * env, jclass, jlongArray catIds, jint kmlFileType)
{

View file

@ -149,8 +149,7 @@ Java_app_organicmaps_editor_Editor_nativeHasWifi(JNIEnv *, jclass)
JNIEXPORT void JNICALL
Java_app_organicmaps_editor_Editor_nativeSetHasWifi(JNIEnv *, jclass, jboolean hasWifi)
{
if (hasWifi != (g_editableMapObject.GetInternet() == feature::Internet::Wlan))
g_editableMapObject.SetInternet(hasWifi ? feature::Internet::Wlan : feature::Internet::Unknown);
g_editableMapObject.SetInternet(hasWifi ? feature::Internet::Wlan : feature::Internet::Unknown);
}
JNIEXPORT jboolean JNICALL
@ -363,11 +362,7 @@ Java_app_organicmaps_editor_Editor_nativeStartEdit(JNIEnv *, jclass)
{
::Framework * frm = g_framework->NativeFramework();
if (!frm->HasPlacePageInfo())
{
ASSERT(g_editableMapObject.GetEditingLifecycle() == osm::EditingLifecycle::CREATED,
("PlacePageInfo should only be empty for new features."));
return;
}
place_page::Info const & info = g_framework->GetPlacePageInfo();
CHECK(frm->GetEditableMapObject(info.GetID(), g_editableMapObject), ("Invalid feature in the place page."));

View file

@ -130,18 +130,11 @@ platform::NetworkPolicy GetCurrentNetworkPolicy()
namespace android
{
Platform::~Platform()
{
JNIEnv *env = jni::GetEnv();
env->DeleteGlobalRef(m_context);
}
void Platform::Initialize(JNIEnv * env, jobject context, jstring apkPath,
void Platform::Initialize(JNIEnv * env, jobject functorProcessObject, jstring apkPath,
jstring writablePath, jstring privatePath, jstring tmpPath,
jstring flavorName, jstring buildType, bool isTablet)
{
m_context = env->NewGlobalRef(context);
m_guiThread = std::make_unique<GuiThread>();
m_guiThread = std::make_unique<GuiThread>(functorProcessObject);
std::string const flavor = jni::ToNativeString(env, flavorName);
std::string const build = jni::ToNativeString(env, buildType);
@ -189,7 +182,7 @@ Platform & Platform::Instance()
jobject Platform::GetContext() const
{
return m_context;
return static_cast<GuiThread const *>(m_guiThread.get())->GetObject();
}
void Platform::AndroidSecureStorage::Init(JNIEnv * env)

View file

@ -17,8 +17,6 @@ namespace android
class Platform : public ::Platform
{
public:
~Platform() override;
void Initialize(JNIEnv * env, jobject functorProcessObject, jstring apkPath, jstring writablePath,
jstring privatePath, jstring tmpPath, jstring flavorName,
jstring buildType, bool isTablet);
@ -51,6 +49,5 @@ public:
private:
AndroidSecureStorage m_secureStorage;
jobject m_context;
};
} // namespace android

View file

@ -6,21 +6,21 @@
namespace android
{
GuiThread::GuiThread()
GuiThread::GuiThread(jobject processObject)
{
JNIEnv * env = jni::GetEnv();
m_class = GetGlobalClassRef(env, "app/organicmaps/util/concurrency/UiThread");
ASSERT(m_class, ());
m_object = env->NewGlobalRef(processObject);
ASSERT(m_object, ());
m_method = env->GetStaticMethodID(m_class, "forwardToMainThread", "(J)V");
m_method = env->GetMethodID(env->GetObjectClass(m_object), "forwardToMainThread", "(J)V");
ASSERT(m_method, ());
}
GuiThread::~GuiThread()
{
JNIEnv * env = jni::GetEnv();
env->DeleteGlobalRef(m_class);
env->DeleteGlobalRef(m_object);
}
// static
@ -34,7 +34,7 @@ base::TaskLoop::PushResult GuiThread::Push(Task && task)
{
// Pointer will be deleted in ProcessTask.
auto t = new Task(std::move(task));
jni::GetEnv()->CallStaticVoidMethod(m_class, m_method, reinterpret_cast<jlong>(t));
jni::GetEnv()->CallVoidMethod(m_object, m_method, reinterpret_cast<jlong>(t));
return {true, kNoId};
}
@ -42,7 +42,7 @@ base::TaskLoop::PushResult GuiThread::Push(Task const & task)
{
// Pointer will be deleted in ProcessTask.
auto t = new Task(task);
jni::GetEnv()->CallStaticVoidMethod(m_class, m_method, reinterpret_cast<jlong>(t));
jni::GetEnv()->CallVoidMethod(m_object, m_method, reinterpret_cast<jlong>(t));
return {true, kNoId};
}
} // namespace android

View file

@ -9,7 +9,7 @@ namespace android
class GuiThread : public base::TaskLoop
{
public:
GuiThread();
explicit GuiThread(jobject processObject);
~GuiThread() override;
static void ProcessTask(jlong task);
@ -18,8 +18,10 @@ public:
PushResult Push(Task && task) override;
PushResult Push(Task const & task) override;
jobject GetObject() const { return m_object; }
private:
jclass m_class = nullptr;
jobject m_object = nullptr;
jmethodID m_method = nullptr;
};
} // namespace android

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

@ -49,12 +49,6 @@ Java_app_organicmaps_util_StringUtils_nativeFilterContainsNormalized(JNIEnv * en
return jni::ToJavaStringArray(env, filtered);
}
JNIEXPORT jint JNICALL Java_app_organicmaps_util_StringUtils_nativeFormatSpeed(
JNIEnv * env, jclass thiz, jdouble metersPerSecond)
{
return measurement_utils::FormatSpeed(metersPerSecond, measurement_utils::GetMeasurementUnits());
}
JNIEXPORT jobject JNICALL Java_app_organicmaps_util_StringUtils_nativeFormatSpeedAndUnits(
JNIEnv * env, jclass thiz, jdouble metersPerSecond)
{

View file

@ -1,12 +0,0 @@
#include "app/organicmaps/core/jni_helper.hpp"
#include "app/organicmaps/platform/GuiThread.hpp"
extern "C"
{
// static void nativeProcessTask(long taskPointer);
JNIEXPORT void JNICALL
Java_app_organicmaps_util_concurrency_UiThread_nativeProcessTask(JNIEnv * env, jclass clazz, jlong taskPointer)
{
android::GuiThread::ProcessTask(taskPointer);
}
}

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