Compare commits
1 Commits
x7z4w-traf
...
release/20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afbe9f0fd5 |
@@ -1,4 +1,4 @@
|
||||
name: Android Check Store Metadata
|
||||
name: Android Check Metadata
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
@@ -21,8 +21,5 @@ jobs:
|
||||
android
|
||||
tools/python/check_store_metadata.py
|
||||
|
||||
- name: Check Google Play metadata
|
||||
run: ./tools/python/check_store_metadata.py gplay
|
||||
|
||||
- name: Check F-Droid metadata
|
||||
run: ./tools/python/check_store_metadata.py fdroid
|
||||
- name: Check metadata
|
||||
run: ./tools/python/check_store_metadata.py android
|
||||
|
||||
@@ -8,19 +8,21 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
environment: production
|
||||
steps:
|
||||
- name: Checkout
|
||||
- name: Checkout sources
|
||||
# TODO: use shallow (and sparse?) checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
sparse-checkout: |
|
||||
android
|
||||
tools/python/check_store_metadata.py
|
||||
|
||||
# - name: Parallel submodules checkout
|
||||
# shell: bash
|
||||
# run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Restore release keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
||||
|
||||
- name: Upload
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
name: Apple TestFlight
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
name: Build iOS
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
@@ -7,7 +7,7 @@ jobs:
|
||||
name: iOS Release
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
name: macOS builds and tests
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
HOMEBREW_NO_ANALYTICS: 1
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
strategy:
|
||||
|
||||
22
.forgejo/workflows/stale.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Close stale PRs
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # Runs every day at midnight
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-pr-stale: 180 # 6 months before warning
|
||||
days-before-pr-close: 365 # Closed after 12 months
|
||||
stale-pr-label: "stale"
|
||||
stale-pr-message: "Hi! This PR has been inactive for 6 months. If it's still relevant, please update it to let us know you’d like to keep it open 😊"
|
||||
close-pr-message: "This PR has been automatically closed after 12 months of inactivity."
|
||||
days-before-issue-stale: -1 # Issues are never stale
|
||||
days-before-issue-close: -1 # Issues are never closed
|
||||
remove-stale-when-updated: true
|
||||
14
.github/workflows/android-check.yaml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
- main
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-21-jdk-amd64 # Java 21 is required for Android Gradle 8 plugin
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
SKIP_MAP_DOWNLOAD: true
|
||||
|
||||
jobs:
|
||||
@@ -23,16 +23,9 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Install protobuf
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y python3-pip
|
||||
pip install "protobuf<3.21" --break-system-packages
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
run: SKIP_GENERATE_SYMBOLS=1 ./configure.sh
|
||||
|
||||
- name: Lint
|
||||
shell: bash
|
||||
@@ -73,9 +66,8 @@ jobs:
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
python3-pip \
|
||||
python3-protobuf \
|
||||
zlib1g-dev
|
||||
pip install "protobuf<3.21" --break-system-packages
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
2
.github/workflows/ios-check.yaml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
name: Build iOS
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
4
.gitignore
vendored
@@ -20,7 +20,6 @@ data/symbols/**/symbols.sdf
|
||||
|
||||
data/bookmarks
|
||||
data/edits.xml
|
||||
data/traffic.xml
|
||||
data/World.mwm
|
||||
data/WorldCoasts.mwm
|
||||
data/world_mwm/*
|
||||
@@ -36,9 +35,6 @@ data/patterns.txt*
|
||||
# data/colors_design.txt
|
||||
# data/patterns_design.txt
|
||||
|
||||
# Auto-generated from data/categories-strings/* by tools/unix/generate_categories.sh
|
||||
data/categories.txt
|
||||
|
||||
# Compiled Python
|
||||
*.pyc
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ if (PLATFORM_LINUX AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_BUILD_T
|
||||
add_compile_options(-fno-fat-lto-objects)
|
||||
# To fix ar and ranlib "plugin needed to handle lto object".
|
||||
string(REGEX MATCH "[0-9]+" GCC_MAJOR_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}*/liblto_plugin.so)
|
||||
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}/liblto_plugin.so)
|
||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
|
||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||
@@ -225,26 +225,6 @@ endif()
|
||||
# Used in qt/ and shaders/
|
||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${Python3_EXECUTABLE} -c "import google.protobuf;
|
||||
print(google.protobuf.__version__)"
|
||||
RESULT_VARIABLE PROTOBUF_CHECK
|
||||
OUTPUT_VARIABLE PROTOBUF_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
if(PROTOBUF_CHECK EQUAL 0)
|
||||
if(PROTOBUF_VERSION VERSION_LESS "4.0.0")
|
||||
message(STATUS "Python protobuf ${PROTOBUF_VERSION} found (< 4.0)")
|
||||
else()
|
||||
message(FATAL_ERROR "Python protobuf ${PROTOBUF_VERSION} found, but version < 4.0 required")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Python protobuf not found. Install version <4.0")
|
||||
endif()
|
||||
|
||||
|
||||
add_subdirectory(libs)
|
||||
|
||||
if (PLATFORM_DESKTOP)
|
||||
|
||||
@@ -51,9 +51,6 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
|
||||
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
|
||||
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
|
||||
</a>
|
||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/app.comaps">
|
||||
<img src="docs/badges/izzyondroid.png" alt="Obtainium" width="160"/>
|
||||
</a>
|
||||
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps">
|
||||
<img src="docs/badges/obtainium.png" alt="Obtainium" width="160"/>
|
||||
</a>
|
||||
@@ -158,12 +155,6 @@ SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
|
||||
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
|
||||
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
|
||||
```
|
||||
|
||||
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
|
||||
```
|
||||
app.comaps
|
||||
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
|
||||
```
|
||||
---
|
||||
|
||||
## ⚖️ License
|
||||
|
||||
3
android/app/.gitignore
vendored
@@ -24,6 +24,3 @@
|
||||
/src/main/res/drawable-mdpi/uk_northern_ireland.png
|
||||
/src/main/res/drawable-mdpi/uk_scotland.png
|
||||
/src/main/res/drawable-mdpi/uk_wales.png
|
||||
|
||||
# Symlinked to F-Droid relnotes by tools/unix/link_gplay_relnotes.sh
|
||||
/src/google/play/release-notes
|
||||
@@ -29,12 +29,12 @@ def getCommitMessage() {
|
||||
project.ext.appId = 'app.comaps'
|
||||
project.ext.appName = 'CoMaps'
|
||||
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(JavaLanguageVersion.of(21))
|
||||
}
|
||||
}
|
||||
// I have Java 21 installed, but this doesn't work on MacOS.
|
||||
//java {
|
||||
// toolchain {
|
||||
// languageVersion.set(JavaLanguageVersion.of(17))
|
||||
// }
|
||||
//}
|
||||
|
||||
android {
|
||||
namespace = 'app.organicmaps'
|
||||
@@ -311,8 +311,8 @@ android {
|
||||
compileOptions {
|
||||
coreLibraryDesugaringEnabled = true
|
||||
|
||||
sourceCompatibility JavaVersion.VERSION_21
|
||||
targetCompatibility JavaVersion.VERSION_21
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,7 +355,8 @@ dependencies {
|
||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||
implementation libs.google.guava
|
||||
implementation libs.appdevnext.androidchart
|
||||
implementation libs.devnullorthrow.mpandroidchart
|
||||
implementation libs.jcip.annotations
|
||||
|
||||
// Test Dependencies
|
||||
androidTestImplementation libs.androidx.test.junit
|
||||
|
||||
5
android/app/proguard-rules.pro
vendored
@@ -28,8 +28,3 @@
|
||||
# R8 crypts the source line numbers in all log messages.
|
||||
# https://github.com/organicmaps/organicmaps/issues/6559#issuecomment-1812039926
|
||||
-dontoptimize
|
||||
|
||||
# Keep classes for Android TraFF support
|
||||
-keep class app.organicmaps.sdk.traffxml.SourceImplV0_7 { *; }
|
||||
-keep class app.organicmaps.sdk.traffxml.SourceImplV0_8 { *; }
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/bg_app_icon_test"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground_test"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/bg_app_icon_debug"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground_debug"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
||||
</adaptive-icon>
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Camina, pedala o condueix privadament
|
||||
@@ -1,9 +0,0 @@
|
||||
• Vylepšena viditelnost a uživatelské rozhraní pokynů v navigaci
|
||||
• Přidána možnost vynechat kroky
|
||||
• Vylepšeno vyhledávání ve více jazycích
|
||||
• Přidána specifická ikona pro autobusové zastávky
|
||||
• Opraveny problémy s Android Auto (prostřednictvím projektu OM)
|
||||
• Vylepšen editor a opraveny drobné problémy
|
||||
• Vylepšeny styly map (prostřednictvím projektu OM)
|
||||
• Vylepšeny překlady aplikace
|
||||
Další změny najdete v našich poznámkách k vydání Codeberg!
|
||||
@@ -1,9 +1,8 @@
|
||||
• Verbesserte Sichtbarkeit & Benutzeroberfläche für Navigationsanweisungen
|
||||
• Option um Treppen zu vermeiden
|
||||
• Verbesserte Suche in mehreren Sprachen
|
||||
• Spezifisches Symbol für Busbahnöfe hinzugefügt
|
||||
• Probleme mit Android Auto behoben (via OM)
|
||||
• Verbesserter Editor mit kleinere Bugfixes
|
||||
• Kartenstile verbessert (via OM)
|
||||
• Verbesserte Übersetzungen
|
||||
Für weitere Änderungen siehe Codeberg-Versionshinweise
|
||||
• OpenStreetMap-Daten vom 22. August
|
||||
• Neue Geschwindigkeitsanzeige & Details aufgezeichneter Strecken
|
||||
• Besserer dunkler Modus, neue farbige Labels
|
||||
• Anzeige wann Orte & Öffnungszeiten überprüft wurden
|
||||
• Routenplanung berücksichtigt Stoppschilder, Ampeln & bedingte Einschränkungen.
|
||||
• GPS-Peilung wird statt Kompass bevorzugt & höhere GPS-Frequenz.
|
||||
• Adressen & Notizen im OSM-Editor unterstützt.
|
||||
• Mehr Verbesserungen an UI-Elementen & Kartenstil, alle Details in den Codeberg-Versionshinweisen!
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
• Improved visibility and UI of instructions in navigation
|
||||
• Added option to avoid steps
|
||||
• Improved search in multiple languages
|
||||
• Added specific icon for bus stations
|
||||
• Fixed Android Auto issues (via OM project)
|
||||
• Improved editor and fix minor issues
|
||||
• Improved map styles (via OM project)
|
||||
• Improved app translations
|
||||
• OpenStreetMap data as of August 22
|
||||
• New current speed indicator, display track info
|
||||
• Improved dark map style, added coloured labels
|
||||
• Display when places & opening hours were last checked
|
||||
• Routing now considers turns, stop signs, lights & conditional restrictions
|
||||
• Prefer GPS bearing over compass and increase location poll rate
|
||||
• Enable adding standalone addresses & notes in the editor
|
||||
• Various UI element & map style improvements
|
||||
Check our Codeberg release notes for more changes!
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
• Mejora de la visibilidad y la interfaz de usuario de las instrucciones de navegación
|
||||
• Se ha añadido la opción de evitar escaleras
|
||||
• Mejora de la búsqueda en varios idiomas como ES
|
||||
• Se ha añadido un icono específico para las estaciones de autobús
|
||||
• Se han solucionado los problemas de Android Auto (a través del proyecto OM)
|
||||
• Se ha mejorado el editor y se han solucionado pequeños problemas
|
||||
• Se han mejorado los estilos de los mapas (a través del proyecto OM)
|
||||
Más detalles en Codeberg
|
||||
• Datos de OSM a 22-08-2025
|
||||
• Nuevo indicador de velocidad e información de pista
|
||||
• Modo oscuro mejorado y nombres de POI coloreados
|
||||
• Indicador de última revisión de lugares y horarios de apertura
|
||||
• Rutas mejoradas teniendo en cuenta giros, señales de STOP, semáforos y restricciones
|
||||
• Mayor precisión para determinar tu localización y sentido
|
||||
• Añade direcciones y notas con el editor
|
||||
• Otras mejoras en elementos de la interfaz y estilo del mapa
|
||||
Entra en nuestro Codeberg para más cambios!
|
||||
|
||||
@@ -1 +1 @@
|
||||
Navegación sencilla - Descubre más en tu camino - Creado por la comunidad
|
||||
Navegación de mapa fácil - Descubre más en tu camino - Creado por la comunidad
|
||||
|
||||
@@ -1,34 +1,32 @@
|
||||
Yhteisön johtama vapaa ja avoimeen lähdekoodiin perustuva karttasovellus, jonka karttadata perustuu OpenStreetMap:n avoimeen dataan. Sovelluksessa painottuu vahva sitoutuminen läpinäkyvyyteen, yksityisyyteen ja voittoa tavoittelemattomaan toimintaan. CoMaps on haarautunut Organic Maps:sta, joka taas omalta osaltaan on haarautunut Maps.ME:stä.
|
||||
Yhteisövetoinen, ilmainen ja avoimeen lähdekoodiin perustuva karttasovellus, jonka pohjalla käytetään OpenStreetMapin avointa karttadataa. Sovelluksen kehityksessä on sitouduttu läpinäkyvyyteen, yksityisyyteen ja voittoa tavoittelemattomuuteen. CoMapsin projekti on haarautunut Organic Mapsista, joka taas on haarautunut aiemmin Maps.ME:stä
|
||||
|
||||
Lue tarkemmin projektin syistä ja sen suunnasta osoitteesta <b><i>codeberg.org/comaps</i></b>.
|
||||
Liity yhteisöön ja auta kehittämään parasta karttasovellusta
|
||||
• Käytä sovellusta ja levitä siitä sanaa
|
||||
• Anna palautetta ja raportoi ongelmista
|
||||
• Päivitä karttadataa sovelluksessa tai OpenStreetMap:n verkkosivuilla
|
||||
Lue lisää projektin tavotteista ja suunnasta osoitteesta <b><i>codeberg.org/comaps</i></b>.
|
||||
Liity yhteisöön ja auta kehittämään paras saatavilla oleva karttasovellus
|
||||
• Käytä sovellusta ja kerro siitä myös muille
|
||||
• Anna palautetta ja raportoi ongelmia
|
||||
• Päivitä karttoja, joko sovelluksessa tai OpenStreetMapin verkkosivuilla
|
||||
|
||||
‣ <b>Offline-painotteinen</b>: Suunnittele ja navigoi matkasi ilman verkkoyhteyttä. Etsi reittipisteitä retkilläsi. Kaikki sovelluksen toiminnot on suunniteltu käytettäväksi ilman verkkoyhteyttä.
|
||||
‣ <b>Kunnioittaa yksityisyyttä</b>: Sovellus on suunniteltu yksityisyyttä silmälläpitäen. Sovellu ei tunnista ihmisä, seuraa toimintaasi, eikä kerää henkilökohtaisia tietojasi. Mainosvapaa.
|
||||
‣ <b>Yksinkertainen ja viimeistelty</b>: Olennaiset ominaisuudet, joita on helppo käyttää.
|
||||
‣ <b>Säästää akkua ja tilaa</b>: Ei kuluta akkua, kuten toiset karttasovellukset. Kompaktit kartat säästävät tilaa puhelimessasi.
|
||||
‣ <b>Ilmainen ja yhteisön rakentama</b>: Ihmiset, kuten sinä ovat auttaneet sovelluksen kehityksessä lisäämällä paikkoja OpenStreetMap:iin, testaamalla sovellusta ja antamalla palautetta. Voit auttaa myös kehittämällä sovellusta ja lahjoittamalla sovelluskehitykseen.
|
||||
‣ <b>Avoin ja läpinäkyvä päätöksenteko ja rahoitus. Voittoa tavoittelematon ja täysin avoimeen lähdekoodiin perustuva.</b>
|
||||
‣ <b>Offline-painotteinen</b>: Suunnittele ja navigoi ulkomailla ilman mobiiliverkkoja. Kaikki sovelluksen toiminnot on suunniteltu käytettäväksi ilman verkkoyhteyttä.
|
||||
‣ <b>Kunnioittaa yksityisyyttä</b>: Sovellus on suunniteltu yksilön yksityisyys silmälläpitäen. Sovellus ei tunnista tai kerää tietoja sinusta. Mainosvapaa.
|
||||
‣ <b>Yksinkertainen ja viimeistelty</b>: Olennaiset ominaisuudet, joita on helppo käyttää.
|
||||
‣ <b>Säästä akkua ja tallennustilaa</b>: Ei kuluta akkua, kuten muut navigointisovellukset. Kompaktit kartat säästävät arvokasta tallennustilaa puhelimessasi.
|
||||
‣ <b>Ilmainen ja yhteisön luoma</b>: Vapaaehtoiset, kuten sinä olette auttaneet sovelluksen kehityksessä lisäämällä paikkoja OpenStreetMap:iin, testaamalla sovellusta ja antamalla palautetta. Voit myös auttaa kehittämällä ominaisuuksia ja lahjoittamalla sovelluskehitykseen
|
||||
‣ <b>Avoin ja läpinäkyvä päätöksenteko sekä rahoitus. Voittoa tavoittelematon ja täysin avoimeen lähdekoodiin perustuva.</b>
|
||||
|
||||
<b>Tärkeimmät ominaisuudet</b>:
|
||||
<ul>
|
||||
<li>Ladattavat yksityiskohtaiset kartat paikoista, joita ei löydy edes Google Maps:sta</li>
|
||||
<li>Ulkoilutila, josta löytyy korostettuna reitit, leirintäpaikat, vesipisteet, huiput ja korkeuserot yms.</li>
|
||||
<li>Kävely- ja pyörätiet</li>
|
||||
<li>Kiinnostavat paikat, kuten ravintolat, huoltoasemat, hotellit, kaupat, nähtävyydet ja monta muuta</li>
|
||||
<li>Etsi nimellä, osoitteella tai kiinnostavan paikan kategorialla</li>
|
||||
<li>Navigointi ääni-ilmoituksilla kävellessä, pyöräillessä tai ajaessa</li>
|
||||
<li>Tallenna suosikkipaikkasi yhdellä napautuksella</li>
|
||||
<li>Offline Wikipedia-artikkelit</li>
|
||||
<li>Maanalaisen liikenteen tasot ja ohjeet</li>
|
||||
<li>Reittien tallennus</li>
|
||||
<li>Tuo ja vie kirjanmerkkejä ja reittejä KML-, KMZ- ja GPX-formaateissa</li>
|
||||
<li>Tumma tila iltaa ja yötä varten</li>
|
||||
<li>Paranna karttadataa kaikille sisäänrakennetulla editorilla</li>
|
||||
</ul>
|
||||
• Ladattavat yksityiskohtaiset kartat paikoista, joita ei löydy edes Google Maps:sta
|
||||
• Ulkoilutila, josta löytyy korostettuna reitit, leirintäpaikat, vesipisteet, huiput ja korkeuserot yms.
|
||||
• Kävely- ja pyörätiet
|
||||
• Kiinnostavat paikat, kuten ravintolat, huoltoasemat, hotellit, kaupat, nähtävyydet ja monta muuta
|
||||
• Etsi nimellä, osoitteella tai kiinnostavan paikan kategorialla
|
||||
• Navigointi ääni-ilmoituksilla kävellessä, pyöräillessä tai ajaessa
|
||||
• Tallenna suosikkipaikkasi yhdellä napautuksella
|
||||
• Offline Wikipedia-artikkelit
|
||||
• Maanalaisen liikenteen tasot ja ohjeet
|
||||
• Reittien tallennus
|
||||
• Tuo ja vie kirjanmerkkejä ja reittejä KML-, KMZ- ja GPX-formaateissa
|
||||
• Tumma tila iltaa ja yötä varten
|
||||
• Paranna karttadataa kaikille sisäänrakennetulla editorilla
|
||||
|
||||
<b>Vapaus on täällä</b>
|
||||
Löydä matkasi, navigoi maailmassa yksityisyyden ja yhteisön tukemana!
|
||||
Löydä matkasi ja navigoi maailmalla yksityisyyden ja yhteisön tukemana!
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Navigoi yksityisesti ilman verkkoyhteyttä
|
||||
CoMaps - Navigoi ilman verkkoyhteyttä yksityisesti
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
• Interface utilisateur et visibilité des instructions en navigation améliorée
|
||||
• Option pour éviter les escaliers ajoutée
|
||||
• Recherche améliorée dans différents languages
|
||||
• Icône pour les gares routières ajoutée
|
||||
• Corrections de bugs liées à Android Auto (via OM)
|
||||
• Editeur amélioré et corrections de bugs
|
||||
• Style de la carte amélioré (via OM)
|
||||
• Traductions améliorées
|
||||
• Données OSM du 22 août
|
||||
• Nouvel indicateur de vitesse et détails des pistes
|
||||
• Amélioration du style sombre, ajout de labels colorées
|
||||
• Affichage de la date de dernière vérification d'un lieu
|
||||
• Support dans le routage des virages, signalisations et restrictions
|
||||
• Amélioration de la boussole et de la précision GPS
|
||||
• Support des adresses et des notes dans l'éditeur
|
||||
• Diverses améliorations d'UI et du style de la carte
|
||||
Plus d'informations sur notre Codeberg
|
||||
|
||||
@@ -1 +1 @@
|
||||
Navigation facile - Vivez de grands voyages - Propulsé par la communauté
|
||||
Navigation de cartes facile - Découvrez le monde - Propulsé par la communauté
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
Egy közösség által vezetett, ingyenes és nyílt forráskódú térképalkalmazás, amely az OpenStreetMap adatain alapul, és amelynek alapelvei a átláthatóság, az adatvédelem és a nonprofit működés. A CoMaps az Organic Maps alkalmazás egyik változata, amely viszont a Maps.ME alkalmazás egyik változata.
|
||||
A CoMaps egy közösség által létrehozott, ingyenes és nyílt forráskódú térképalkalmazás, amely az OpenStreetMap térképadatain alapul, és amelyet az átláthatóság, a magánélet védelme és a nonprofit jelleg iránti elkötelezettség erősít. A CoMaps az Organic Maps villája, amely viszont a Maps.ME villája.
|
||||
|
||||
A projekt előzményeiről és fejlesztési irányáról bővebben a <b><i>codeberg.org/comaps</i></b> oldalon olvashat.
|
||||
Csatlakozzon a közösséghez, és segítsen a legjobb térképalkalmazás létrehozásában
|
||||
• Használja az alkalmazást, és terjessze a hírt róla
|
||||
• Adjon visszajelzést, és jelentsen problémákat
|
||||
• Frissítse a térképadatokat az alkalmazásban vagy az OpenStreetMap weboldalon
|
||||
A projekt előzményeiről és az irányáról a <b><i>codeberg.org/comaps</i></b> oldalon olvashatsz.
|
||||
Csatlakozz ott a közösséghez, és segíts a legjobb térképalkalmazás elkészítésében.
|
||||
• Használd az alkalmazást és terjeszd a hírét
|
||||
• Adj visszajelzést és jelentsd a problémákat
|
||||
• Frissítsd és javítsd a térképadatokat az alkalmazásban vagy az OpenStreetMap weboldalán.
|
||||
|
||||
‣ <b>Offline</b>: Tervezze meg és navigálja külföldi utazását mobilszolgáltatás nélkül, keressen útpontokat távoli túrákon stb. Az alkalmazás összes funkciója úgy van kialakítva, hogy offline is működjön.
|
||||
‣ <b>A magánélet tiszteletben tartása</b>: Az alkalmazás a magánélet tiszteletben tartásával lett kialakítva – nem azonosítja az embereket, nem követi nyomon őket és nem gyűjt személyes adatokat. Reklámmentes.
|
||||
‣ <b>Egyszerű és kifinomult</b>: alapvető, könnyen használható funkciók, amelyek egyszerűen működnek.
|
||||
‣ <b>Takarékos az akkumulátorral és a tárhellyel</b>: Nem meríti le az akkumulátort, mint más navigációs alkalmazások. A kompakt térképek értékes helyet takarítanak meg a telefonon.
|
||||
‣ <b>Ingyenes és a közösség által fejlesztett</b>: Az Önhöz hasonló emberek segítettek az alkalmazás fejlesztésében azzal, hogy helyeket adtak hozzá az OpenStreetMaphez, tesztelték és visszajelzéseket adtak a funkciókról, valamint fejlesztői ismereteikkel és pénzzel is hozzájárultak a fejlesztéshez.
|
||||
‣ <b>Nyílt, átlátható döntéshozatal és pénzügyek, nonprofit és teljesen nyílt forráskódú.
|
||||
‣ <b>Offline-fókuszú:</b> Tervezd meg és navigáld külföldi útad mobilszolgáltatás nélkül, keress útpontokat egy távoli túra során stb. Az alkalmazás minden funkcióját úgy terveztük, hogy internetkapcsolat nélkül is működjön.
|
||||
‣ <b>A magánélet tiszteletben tartása:</b> Az alkalmazás az adatvédelem szem előtt tartásával készült, nem azonosítja az embereket, nem követi nyomon és nem gyűjt személyes adatokat, és reklámmentes.
|
||||
‣ <b>Takarékosdik az akkumulátorral és a tárhellyel:</b> Nem meríti le az akkumulátort, mint más navigációs alkalmazások. A jól összeállítot kis méretű térképek értékes helyet takarítanak meg a telefonon.
|
||||
‣ <b>Egyszerű és szép grafikus felület,</b> nagyszerű és könnyen használható funkciók, amelyek egyszerűen működnek.
|
||||
‣ <b>Ingyenes és a közösség által készített:</b> A hozzád hasonló emberek segítettek az alkalmazás létrehozásában azáltal, hogy hozzáadtak helyeket az OpenStreetMap térképhez, tesztelték és visszajelzést adtak a funkciókról, valamint hozzájárultak a fejlesztői képességeikkel és a pénzükkel.
|
||||
‣ <b>Nyílt és átlátható döntéshozatal és pénzügyek, nonprofit és teljesen nyílt forráskódú.</b>
|
||||
|
||||
<b>Főbb jellemzők</b>:
|
||||
• Letölthető részletes térképek olyan helyekkel, amelyek nem érhetők el a Google Maps-en
|
||||
• Kültéri mód kiemelt túraútvonalakkal, kempingekkel, vízforrásokkal, csúcsokkal, szintvonalakkal stb.
|
||||
• Gyalogos és kerékpáros útvonalak
|
||||
• Érdekes helyek, például éttermek, benzinkutak, szállodák, üzletek, látnivalók és még sok más
|
||||
• Keresés név, cím vagy érdekes hely kategória alapján
|
||||
• Hangos navigáció gyalogos, kerékpáros vagy autós utazáshoz
|
||||
• Kedvenc helyek könyvjelzővel egyetlen érintéssel
|
||||
• Offline Wikipedia cikkek
|
||||
• Metróhálózat és útvonaltervezés
|
||||
• Útvonalrögzítés
|
||||
• Könyvjelzők, útvonalak exportálása és importálása KML, KMZ, GPX formátumokban
|
||||
• Sötét mód az éjszakai használathoz
|
||||
• A beépített alapszerkesztővel mindenki javíthatja a térképadatokat
|
||||
<b>Főbb jellemzők:</b>
|
||||
• Letölthető részletes térképek olyan helyekkel, amelyek sok kereskedelmi térképen nem állnak rendelkezésre.
|
||||
• Szabadtéri üzemmód kiemelt túraútvonalakkal, táborhelyekkel, vízforrásokkal, csúcsokkal, szintvonalakkal stb.
|
||||
• Sétaútvonalak és kerékpárutak
|
||||
• Érdekes pontok, mint például éttermek, benzinkutak, szállodák, üzletek, látnivalók és még sok minden más
|
||||
• Keresés név, cím vagy az érdekes pontok kategóriája alapján
|
||||
• Navigáció hangutasításokkal gyalogláshoz, kerékpározáshoz vagy vezetéshez
|
||||
• Kedvenc helyeid könyvjelzővel láthatod el egyetlen érintéssel
|
||||
• Wikipedia szócikkek internetkapcsolat nélkül
|
||||
• Metró tranzit réteg és irányok
|
||||
• Útvonal mentése
|
||||
• Könyvjelzők és nyomvonalak exportálása és importálása KML, KMZ, GPX formátumokban
|
||||
• Sötét üzemmód az éjszakai használathoz
|
||||
• Térképadatok javítása mindenki számára egy alapvető beépített szerkesztő segítségével
|
||||
|
||||
<b>A szabadság itt van</b>
|
||||
Fedezze fel utazását, navigáljon a világban, ahol az adatvédelem és a közösség az első!
|
||||
<b>Itt van a szabadság</b>
|
||||
Fedezd fel az utadat, navigálj a világban úgy, hogy a magánélet és a közösség kerüljön előtérbe!
|
||||
|
||||
@@ -1 +1 @@
|
||||
Egyszerű térképnavigáció – Fedezze fel utazását – A közösség támogatásával
|
||||
Könnyű térképes navigáció - Fedezz fel többet az útjaidról - A közösség erejével
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps – túrázás, kerékpározás, autózás offline
|
||||
CoMaps - Túra, Bicikli, Vezetés offline diszkréten
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
Aplikasi peta gratis & sumber terbuka yang dipimpin komunitas, berbasis data OpenStreetMap dan diperkuat dengan komitmen terhadap transparansi, privasi, serta non-profit. CoMaps adalah turunan dari Organic Maps, yang merupakan turunan dari Maps.ME.
|
||||
|
||||
Baca lebih lanjut tentang alasan proyek ini dan arahnya di <b><i>codeberg.org/comaps</i></b>.
|
||||
Bergabunglah dengan komunitas dan bantu menjadikan aplikasi peta terbaik
|
||||
• Gunakan aplikasi ini dan sebarkan
|
||||
• Beri masukan dan laporkan masalah
|
||||
• Perbarui data peta di aplikasi atau di situs OpenStreetMap
|
||||
|
||||
‣ <b>Fokus Offline</b>: Rencanakan dan navigasikan perjalananmu di luar negeri tanpa perlu layanan seluler, cari titik saat hiking jauh, dll. Semua fungsi aplikasi dirancang untuk bekerja offline.
|
||||
‣ <b>Menghormati Privasi</b>: Aplikasi ini dirancang dengan privasi sebagai prioritas – tidak mengidentifikasi orang, tidak melacak, dan tidak mengumpulkan informasi pribadi. Bebas iklan.
|
||||
‣ <b>Sederhana dan Rapi</b>: fitur penting yang mudah digunakan dan langsung berfungsi.
|
||||
‣ <b>Hemat Baterai dan Ruang</b>: Tidak menguras baterai seperti aplikasi navigasi lain. Peta ringkas menghemat ruang berharga di ponselmu.
|
||||
‣ <b>Gratis dan Dibangun oleh Komunitas</b>: Orang seperti kamu membantu membangun aplikasi ini dengan menambahkan tempat ke OpenStreetMap, menguji serta memberi masukan fitur, dan menyumbangkan keterampilan pengembangan maupun dana.
|
||||
‣ <b>Terbuka dan Transparan</b>: Pengambilan keputusan dan keuangan transparan, non-profit, dan sepenuhnya sumber terbuka.
|
||||
|
||||
<b>Fitur Utama</b>:
|
||||
• Peta detail yang bisa diunduh, dengan tempat yang tidak ada di Google Maps
|
||||
• Mode outdoor dengan sorotan jalur hiking, area berkemah, sumber air, puncak, garis kontur, dll
|
||||
• Jalur pejalan kaki dan jalur sepeda
|
||||
• Titik menarik seperti restoran, SPBU, hotel, toko, tempat wisata, dan banyak lagi
|
||||
• Pencarian berdasarkan nama, alamat, atau kategori titik menarik
|
||||
• Navigasi dengan suara untuk berjalan, bersepeda, atau berkendara
|
||||
• Tandai tempat favoritmu dengan sekali tap
|
||||
• Artikel Wikipedia offline
|
||||
• Layer dan rute transportasi subway
|
||||
• Rekaman jejak
|
||||
• Ekspor dan impor bookmark serta jejak dalam format KML, KMZ, GPX
|
||||
• Mode gelap untuk digunakan saat malam
|
||||
• Tingkatkan data peta untuk semua orang dengan editor bawaan sederhana
|
||||
|
||||
<b>Kebebasan Ada di Sini</b>
|
||||
Temukan perjalananmu, jelajahi dunia dengan privasi dan komunitas di garis depan!
|
||||
@@ -1 +0,0 @@
|
||||
Navigasi peta mudah – Temukan lebih banyak – Didukung oleh komunitas
|
||||
@@ -1 +0,0 @@
|
||||
Vienkārša kartes navigācija - Atklāj vairāk par savu ceļojumu - Darbina kopiena
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - dodies ceļā bezsaistē ar privātumu
|
||||
@@ -1,32 +0,0 @@
|
||||
App għall-mapep b'xejn u b'sors miftuħ (open source) immexxi mill-komunità bbażata fuq dejta minn OpenStreetMap, b'impenn għal trasparenza, privatezza u mhux għal-profitt. CoMaps hija fork ta' Organic Maps, li min-naħa tagħha hija fork ta' Maps.ME.
|
||||
|
||||
Kompli aqra dwar ir-raġunijiet għall-proġett u d-direzzjoni tiegħu hawn <b><i>codeberg.org/comaps</i></b>.
|
||||
Ingħaqad mal-komunità u għin biex toħloq l-aqwa app tal-mapep
|
||||
• Uża l-app u semmiha ma' min taf
|
||||
• Agħti feedback u rrapporta problemi
|
||||
• Aġġorna d-dejta tal-mapep fl-app jew fuq il-websajt OpenStreetMap
|
||||
|
||||
‣ <b>Iffokata fuq offlajn</b>: Ippjana u innaviga l-vjaġġ tiegħek barra minn pajjiżek mingħajr ħtieġa ta' servizz ċellulari, fittex waypoints waqt ħajk, eċċ. Il-funzjonijiet kollha tal-app huma ddisinjati biex jaħdmu offlajn.
|
||||
‣ <b>Tirrispetta l-Privatezza</b>: L-app hija ddisinjata bil-privatezza f'moħħha - ma tidentifikax nies, ma ssegwikx, u ma tiġborx informazzjoni personali. Bla reklami.
|
||||
‣ <b>Sempliċi u Rfinuta</b>: karatteristiċi essenzjali, faċli biex jintużaw u li sempliċement jaħdmu.
|
||||
‣ <b>Tiffrankalek Batterija u Spazju</b>: Ma taħlix il-batterija bħal apps oħra tal-mapep. Mapep kompatti li jiffrankawlek spazju prezzjuż fuq il-mowbajl.
|
||||
‣ <b>B'xejn u Mibnija mill-Komunità</b>: Nies bħalek għenu fl-iżvilupp tal-app billi żiedu postijiet f'OpenStreetMap, ittestjaw u taw feedback dwar il-karatteristiċi u kkontribwew il-ħiliet u l-flus tagħhom.
|
||||
‣ <b>Trasparenza fil-finanzi u fit-teħid ta' deċiżjonijiet, Mhux għall-profitt u sors kompletament miftuħ.</b>
|
||||
|
||||
<b>Karatteristiċi Prinċipali</b>:
|
||||
• Mapep dettaljati li jistgħu jitniżżlu b'postijiet li mhumiex disponibbli fuq Google Maps
|
||||
• Modalità ta' barra b'mogħdijiet tal-mixi, postijiet għal-ikkampjar, sorsi tal-ilma, quċċati, linji tal-kontorn, eċċ.
|
||||
• Mogħdijiet għall-mixi u rotti għar-roti
|
||||
• Postijiet ta' interess bħal ristoranti, stazzjonijiet tal-petrol, lukandi, ħwienet, postijiet turistiċi u ħafna aktar
|
||||
• Fittex bl-isem jew bl-indirizz jew bil-kategorija interess
|
||||
• Navigazzjoni b'avviżi bil-vuċi għall-mixi, ċikliżmu, u sewqan
|
||||
• Immarka l-postijiet favoriti tiegħek b'tapp waħda
|
||||
• Artikli offlajn ta' Wikipedia
|
||||
• Direzzjonijiet tas-subways
|
||||
• Reġistrazzjoni ta' trekks
|
||||
• Esportazzjoni u importazzjoni ta' bookmarks u trekks f'formati KML, KMZ, GPX
|
||||
• Modalità mudlama biex tintuża bil-lejl
|
||||
• Ittejjeb id-dejta tal-mapep għal kulħadd b'użu ta' editur bażiku u integrat
|
||||
|
||||
<b>Il-Libertà Waslet</b>
|
||||
Skopri l-vjaġġ tiegħek, innaviga d-dinja bil-privatezza u bil-komunità fuq quddiem nett!
|
||||
@@ -1 +0,0 @@
|
||||
Navigazzjoni ta' mapep faċli - Skopri iktar mill-vjaġġ - Imsaħħaħ mill-komunita`
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Imxi, Suq Rota u Karozza bil-Privatezza
|
||||
@@ -1 +1 @@
|
||||
Enkel kartnavigering - Opplev mere på din reise - Drevet av felleskapet
|
||||
Lett kart navigasjon - Opplev mere på din reise - Drevet av felleskapet
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Gå, sykle, kjøre offline med personvern
|
||||
CoMaps - Gå tur, sykkel, kjør - med personvern
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
Prowadzona przez społeczność, darmowa i otwartoźródłowa aplikacja mapowa oparta na danych OpenStreetMap, wzmacniana zobowiązaniem do transparentności, prywatności i działalnością non-profit. CoMaps jest forkiem/spin-off'em Organic Maps, który z kolei jest forkiem Maps.ME.
|
||||
|
||||
Przeczytaj o powodach powstania projektu i jego kierunku na stronie <b><i>codeberg.org/comaps</i></b>.
|
||||
Dołącz do społeczności i pomóż stworzyć najlepszą aplikację mapową
|
||||
• Używaj aplikacji i rozpowszechnia o niej informacje,
|
||||
• Przekazuj opinie i zgłaszaj problemy,
|
||||
• Aktualizuj dane w aplikacji lub na stronie OpenStreetMap.
|
||||
|
||||
‣ <b>Skoncentrowana na pracy w trybie offline</b>: Zaplanuj trasę i nawiguj podczas swojej podróży za granicą bez potrzeby korzystania z sieci komórkowej, wyszukuj punkty nawigacyjne podczas dalekich wędrówek itp. Wszystkie funkcje aplikacji zostały zaprojektowane do pracy w trybie offline.
|
||||
‣ <b>Poszanowanie prywatności</b>: Aplikacja została zaprojektowana z myślą o prywatności – nie identyfikuje osób, nie śledzi ich i nie gromadzi danych osobowych. Bez reklam.
|
||||
‣ <b>Prosta i dopracowana</b>: niezbędne, łatwe w użyciu funkcje, które po prostu działają.
|
||||
‣ <b>Oszczędza baterię i miejsce</b>: Nie wyczerpuje baterii jak inne aplikacje nawigacyjne. Kompaktowe mapy oszczędzają cenne miejsce w telefonie.
|
||||
‣ <b>Darmowa i stworzona przez społeczność</b>: Osoby takie jak Ty pomogły w tworzeniu aplikacji, dodając miejsca do OpenStreetMap, testując i przekazując opinie na temat funkcji oraz wnosząc swoje umiejętności programistyczne i pieniądze.
|
||||
‣ <b>Otwarte i transparentne podejmowanie decyzji i zarządzanie finansami, nie dla zysku i w pełni otwartoźródłowe.</b>
|
||||
|
||||
<b>Główne funkcje</b>:
|
||||
• Szczegółowe mapy do pobrania z miejscami niedostępnymi na wielu mapach komercyjnych,
|
||||
• Tryb outdoorowy z wyróżnionymi szlakami turystycznymi, kempingami, źródłami wody, szczytami, poziomicami itp.,
|
||||
• Ścieżki spacerowe i rowerowe,
|
||||
• Punkty zainteresowania, takie jak restauracje, stacje benzynowe, hotele, sklepy, atrakcje turystyczne i wiele innych,
|
||||
• Wyszukiwanie według nazwy, adresu lub kategorii punktu zainteresowania,
|
||||
• Nawigacja z komunikatami głosowymi dla pieszych, rowerzystów i kierowców,
|
||||
• Dodawanie zakładek do ulubionych miejsc jednym dotknięciem,
|
||||
• Artykuły z Wikipedii offline,
|
||||
• Warstwa z liniami metra oraz nawigacja z użyciem metra,
|
||||
• Nagrywanie tras,
|
||||
• Eksport i import zakładek i tras w formatach KML, KMZ i GPX,
|
||||
• Ciemny tryb do użytku w nocy,
|
||||
• Ulepszanie danych mapowych dzięki wbudowanemu edytorowi.
|
||||
|
||||
<b>Wolność jest tutaj</b>
|
||||
Odkrywaj swoją podróż, nawiguj po świecie z prywatnością i społecznością na pierwszym planie!
|
||||
@@ -1 +0,0 @@
|
||||
Łatwa nawigacja po mapie - Odkryj więcej z podróży - Wspierane przez społeczność
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Nawiguj offline z zachowaniem prywatności
|
||||
@@ -1,9 +1,8 @@
|
||||
• Visibilidade e interface do usuário aprimoradas para instruções na navegação
|
||||
• Opção adicionada para evitar degraus
|
||||
• Busca aprimorada em vários idiomas
|
||||
• Adição de ícone específico para rodoviárias
|
||||
• Problemas corrigidos no Android Auto (via projeto OM)
|
||||
• Editor aprimorado e correção de problemas menores
|
||||
• Estilos de mapa aprimorados (via projeto OM)
|
||||
• Traduções aprimoradas
|
||||
Confira nossas notas de lançamento do Codeberg para mais mudanças!
|
||||
• Dados OSM de 22/08
|
||||
• Novo indicador de velocidade e tela de informações de trilha
|
||||
• Melhor estilo de mapa escuro, rótulos coloridos adicionados
|
||||
• Exibição da última atualização de locais e horários de funcionamento
|
||||
• O roteamento agora considera conversões, PARE, semáforos, e restrições condicionais
|
||||
• Preferência por orientação GPS em vez de bússola e aumento da frequência de localização
|
||||
• Editor: adição de endereços e notas independentes
|
||||
• Melhorias em elementos da interface e estilo de mapa
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
O aplicație de hărți gratuită & open source, condusă de comunitate, bazată pe date OpenStreetMap și întărită prin angajament față de transparență, confidențialitate și statut non-profit. CoMaps este un fork/spin-off al Organic Maps, care la rândul său este un fork al Maps.ME.
|
||||
|
||||
Citește mai multe despre motivele proiectului și direcția sa pe <b><i>codeberg.org/comaps</i></b>.
|
||||
Alătură-te comunității de acolo și ajută la crearea celei mai bune aplicații de hărți:
|
||||
• Folosește aplicația și promovează-o
|
||||
• Oferă feedback și raportează probleme
|
||||
• Actualizează datele hărților în aplicație sau pe site-ul OpenStreetMap
|
||||
|
||||
‣ <b>Orientare offline</b>: Planifică-ți și navighează-ți călătoria în străinătate fără nevoia unui semnal cellular, caută puncte de reper în timpul unei drumeții îndepărtate etc. Toate funcțiile aplicației sunt concepute să funcționeze offline.
|
||||
‣ <b>Respectă confidențialitatea</b>: Aplicația este concepută cu confidențialitatea în minte - nu identifică persoanele, nu urmărește și nu colectează informații personale. Fără reclame.
|
||||
‣ <b>Simplă și rafinată</b>: caracteristici esențiale, ușor de utilizat, care funcționează fără probleme.
|
||||
‣ <b>Economisește bateria și spațiul</b>: Nu consumă bateria la fel de mult ca alte aplicații de navigație. Hărțile compacte economisesc spațiu prețios pe telefon.
|
||||
‣ <b>Gratuită și construită de comunitate</b>: Oameni ca tine au contribuit la construirea aplicației prin adăugarea de locații pe OpenStreetMap, testare și oferire de feedback pentru funcții, și prin contribuția cu abilități de dezvoltare și finanțare.
|
||||
‣ <b>Decizii și finanțare deschise și transparente, non-profit și cu sursă complet deschisă (open source)</b>.
|
||||
|
||||
<b>Caracteristici principale</b>:
|
||||
• Hărți detaliate, descărcabile, cu locații care nu sunt disponibile pe Google Maps
|
||||
• Mod pentru activități în aer liber cu trasee de drumeție marcate, locuri de campat, surse de apă, vârfuri, linii de contur etc.
|
||||
• Căi pietonale și piste de ciclism
|
||||
• Puncte de interes precum restaurante, benzinării, hoteluri, magazine, obiective turistice și multe altele
|
||||
• Căutare după nume, adresă sau categorie de punct de interes
|
||||
• Navigație cu anunțuri vocale pentru mers pe jos, cu bicicleta sau cu mașina
|
||||
• Marchează-ți locațiile preferate cu un singur clic
|
||||
• Articole Wikipedia offline
|
||||
• Strat pentru metrou și indicații de traseu
|
||||
• Înregistrare trasee
|
||||
• Exportă și importă marcaje și trasee în formatele KML, KMZ, GPX
|
||||
• Un mod întunecat pentru utilizare nocturnă
|
||||
• Îmbunătățește datele hărții pentru toți, folosind un editor de bază integrat
|
||||
|
||||
<b>Libertatea este aici</b>
|
||||
Descoperă-ți călătoria, navighează prin lume având în frunte confidențialitatea și comunitatea!
|
||||
@@ -1 +0,0 @@
|
||||
Navigare ușoară - Descoperă mai mult din călătoria ta - Susținut de comunitate
|
||||
@@ -1,9 +1,9 @@
|
||||
• Лучшая видимость и интерфейс при навигации
|
||||
• Добавлена возможность пропускать шаги
|
||||
• Улучшен поиск на нескольких языках
|
||||
• Новый значок автостанций
|
||||
• Исправлены проблемы с Android Auto (через OM)
|
||||
• Улучшен редактор и исправлены мелкие недочёты
|
||||
• Улучшены стили карт (через OM)
|
||||
• Улучшены переводы приложения
|
||||
Ознакомьтесь с примечаниями к выпуску Codeberg, чтобы узнать изменениях!
|
||||
• Данные 22 августа
|
||||
• Новый спидометр,информация о маршруте
|
||||
• Улучшен тёмный стиль,цветные метки
|
||||
• Время последней проверки часов работы
|
||||
• Построении маршрута учитывает повороты, знак «Стоп»,светофоры и ограничения
|
||||
• Предпочтение отдается GPS-координатам,а не компасу,увеличена частота опроса местоположения
|
||||
• Можно добавлять отдельные адреса и заметки в редакторе
|
||||
• Улучшены различные элементы пользовательского интерфейса и стиль карты
|
||||
Ознакомьтесь с примечания к релизу про изменения!
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Jednoduchá navigácia - Objav viac zo svojej cesty - Funguje vďaka komunite
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - kráčaj, bicykluj a jazdi v súkromí
|
||||
@@ -1 +0,0 @@
|
||||
Enostavna navigacija – Odkrij več o svojem potovanju – Podprto v skupnosti
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps–Hodi, kolesari, vozi brez povezave, zasebno
|
||||
@@ -1,4 +1,4 @@
|
||||
Бесплатна апликација отвореног кода коју одржава заједница и која се заснива на ОpenStreetMap подацима. Непрофитна, транспарентна и цени вашу приватност. CoMaps је настала од апликације Organic Maps, која је настала од апликације Maps.ME.
|
||||
Бесплатна апликација отвореног кода коју одржава заједница, која се заснива на ОpenStreetMap подацима. Непрофитна, транспарентна и цени вашу приватност. CoMaps је настала од апликације Organic Maps, које је настала од апликације Maps.ME.
|
||||
|
||||
Прочитајте о разлозима пројекта и његовог правца на <b><i>codeberg.org/comaps</i></b>
|
||||
Придружите се отвореној заједници и помозите да направимо најбољу апликацију за мапе
|
||||
@@ -10,7 +10,7 @@
|
||||
‣ <b>Поштовање приватности</b>: Апликација је осмишљена са приватношћу корисника на уму - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
|
||||
‣ <b>Једноставно и елегантно</b>: Апликација је лака за употребу и једноставно функционише.
|
||||
‣ <b>Чува вашу батерију и простор</b>: Не троши батерију као остале апликације за навигацију. Компактне мапе чувају драгоцени простор на вашем телефону.
|
||||
‣ <b>Отворено и направљено од стране заједнице</b>: Људи попут вас су допринели развоју апликације додавањем локација на OpenStreetMap, тестирањем, давањем повратних информација о апликацији и помогли су својим програмерским вештинама и донацијама.
|
||||
‣ <b>Отворено и направљено од стране заједнице</b>: Људи попут вас су допринели развоју апликације додавањем локација на OpenStreetMap, тестирањем, давањем повратних информација о апликацији и помогли су својим програмерским вештинама и донацијама.
|
||||
‣ <b>Отворено и транспарентно доношење одлука и употреба донација, непрофитна и потпуно отвореног кода.</b>
|
||||
|
||||
<b> Главне карактеристике </b>:
|
||||
|
||||
@@ -1 +1 @@
|
||||
Једноставна навигација - Сазнајте више о свом путовању - Одржава заједница
|
||||
Једноставна навигација - Сазнајте више о свом путовању - Ради на бази заједнице
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - пешачење, бицикл и вожња, са приватношћу
|
||||
CoMaps - пешачење, бицикл, вожња
|
||||
|
||||
|
Before Width: | Height: | Size: 777 KiB After Width: | Height: | Size: 961 KiB |
|
Before Width: | Height: | Size: 865 KiB After Width: | Height: | Size: 703 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 517 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 673 KiB |
@@ -1 +1 @@
|
||||
version: 2025.07.23-4-FDroid+25072304
|
||||
version: 2025.08.31-15-FDroid+25083115
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
সহজ মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত
|
||||
1
android/app/src/google/play/listings/bn/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
CoMaps - গোপনীয়তা সহ যাতায়াত
|
||||
@@ -1 +1 @@
|
||||
Navegación sencilla - Descubre más en tu camino - Creado por la comunidad
|
||||
Navegación de mapa fácil - Descubre más en tu camino - Creado por la comunidad
|
||||
|
||||
@@ -1 +1 @@
|
||||
Navigation facile - Vivez de grands voyages - Propulsé par la communauté
|
||||
Navigation cartographique facile - Vivez de grands voyages - Propulsé par la communauté
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Naviguez tranquille
|
||||
CoMaps - Naviguer sans suivi
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
Egy közösség által létrehozott és működtetett, ingyenes és nyílt forráskódú térképalkalmazás, amely az OpenStreetMap adatain alapul, és amelynek alapelvei a átláthatóság, az adatvédelem és a nonprofit működés.
|
||||
|
||||
Csatlakozz a közösséghez, és segíts a legjobb térképalkalmazás létrehozásában!
|
||||
• Használd az alkalmazást, és terjesszd a hírt róla!
|
||||
• Adj visszajelzést, és jelentsd a problémákat!
|
||||
• Frissítsd a térképadatokat az alkalmazásban vagy az OpenStreetMap weboldalon!
|
||||
|
||||
<i>Visszajelzéseid és az 5 csillagos értékelésed a legjobb támogatás számunkra!</i>
|
||||
|
||||
‣ <b>Egyszerű és kifinomult</b>: alapvető, könnyen használható funkciók, amelyek egyszerűen működnek.
|
||||
‣ <b>Offline-központú</b>: Tervezd meg és navigálj a külföldi útjaidon mobilhálózat igénybevétele nélkül, keress útvonalpontokat távoli túrákon stb. Az alkalmazás összes funkciója úgy lett kialakítva, hogy internetkapcsolat nélkül is működjön.
|
||||
‣ <b>Tiszteletben tartja a magánéletet</b>: Az alkalmazás a magánélet tiszteletben tartásával lett kialakítva. Nem azonosítja az embereket, nem követi nyomon őket és nem gyűjt személyes adatokat. Reklámmentes.
|
||||
‣ <b>Kíméli az akkumulátort és helytakarékos</b>: Nem meríti le az akkumulátort, mint más navigációs alkalmazások. A kisméretű, jól összeállított térképek értékes helyet takarítanak meg a telefonon.
|
||||
‣ <b>Ingyenes és a közösség által fejlesztett</b>: A hozzád hasonló emberek segítettek az alkalmazás fejlesztésében azzal, hogy helyeket adtak hozzá az OpenStreetMaphez, tesztelték és visszajelzéseket adtak a funkciókról, valamint fejlesztői ismereteikkel és a pénzükkel is hozzájárultak a fejlesztéshez.
|
||||
‣ <b>Nyílt és átlátható döntéshozatal és pénzügyek, nonprofit és teljesen nyílt forráskódú.
|
||||
|
||||
<<b>Főbb jellemzők</b>:
|
||||
• Letölthető részletes térképek olyan helyekkel, amelyek nem érhetők el a Google Maps-en
|
||||
• Kültéri mód kiemelt túraútvonalakkal, kempingekkel, vízforrásokkal, csúcsokkal, kontúrvonalakkal, stb.
|
||||
• Túraútvonalak és kerékpárutak
|
||||
• Érdekes helyek, például éttermek, benzinkutak, szállodák, üzletek, látnivalók és még sok más
|
||||
• Keresés név, cím vagy érdekes hely kategória szerint
|
||||
• Hangos navigáció gyalogos, kerékpáros vagy autós utazáshoz
|
||||
• Kedvenc helyeid könyvjelzővel láthatod el egyetlen érintéssel
|
||||
• Offline Wikipedia cikkek
|
||||
• Metró közlekedési réteg és útvonalak
|
||||
• Útvonalrögzítés
|
||||
• Könyvjelzők és útvonalak exportálása és importálása KML, KMZ, GPX formátumokban
|
||||
• Sötét mód éjszakai használatra
|
||||
• A beépített alapszerkesztővel mindenki javíthatja a térképadatokat
|
||||
• Android Auto támogatás
|
||||
|
||||
Kérjük, jelentsd az alkalmazással kapcsolatos problémákat, javasolj ötleteket, és csatlakozz közösségünkhöz a <b><i>comaps.app</i></b> weboldalon.
|
||||
|
||||
<b>Itt van a szabadság</b>
|
||||
Fedezd fel utadat, navigálj a világban úgy, hogy az adatvédelem és a közösség kerüljön előtérbe!
|
||||
@@ -1 +1 @@
|
||||
Egyszerű térképnavigáció – Fedezze fel utazását – A közösség támogatásával
|
||||
Könnyű térképes navigáció - Fedezz fel többet az útjaidról - A közösség erejével
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Navigation facile del mappa – Discoperi tu viage – Alimentate per le communitate
|
||||
1
android/app/src/google/play/listings/ia/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
CoMaps – Naviga private
|
||||
@@ -1 +0,0 @@
|
||||
Navigasi peta mudah – Temukan lebih banyak – Didukung oleh komunitas
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Jelajah dengan Privat
|
||||
@@ -1 +0,0 @@
|
||||
Vienkārša kartes navigācija - Atklāj vairāk par savu ceļojumu - Darbina kopiena
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - kartes ar privātumu
|
||||
@@ -1 +1 @@
|
||||
CoMaps - ഓഫ്ലൈൻ നാവിഗേഷൻ
|
||||
കോമാപ്പ്സ് - സ്വകാര്യതയോടെ സഞ്ചരിക്കൂ
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Enkel kartnavigering - Opplev mere på din reise - Drevet av felleskapet
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps -Naviger med personvern
|
||||
@@ -1 +0,0 @@
|
||||
Łatwa nawigacja po mapie - Odkryj więcej z podróży - Wspierane przez społeczność
|
||||
@@ -1 +1 @@
|
||||
CoMaps – Nawigacja offline
|
||||
CoMaps - Nawigacja szanująca prywatność
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
O aplicație de hărți gratuită & open source, condusă de comunitate, bazată pe date OpenStreetMap și susținută de angajamentul față de transparență, confidențialitate și statutul non-profit.
|
||||
|
||||
Alătură-te comunității și ajută la crearea celei mai bune aplicații de hărți
|
||||
• Folosește aplicația și promovează-o
|
||||
• Oferă feedback și raportează probleme
|
||||
• Actualizează datele hărții în aplicație sau pe site-ul OpenStreetMap
|
||||
|
||||
<i>Feedback-ul și recenziile tale cu 5 stele sunt cel mai bun sprijin pentru noi!</i>
|
||||
|
||||
‣ <b>Simplă și Rafinată</b>: funcții esențiale, ușor de utilizat, care pur și simplu funcționează.
|
||||
‣ <b>Focusată pe Modul Offline</b>: Planifică-ți și navighează-ți călătoria în străinătate fără nevoia unui serviciu cellular, caută waypoint-uri în timpul unei drumeții îndepărtate etc. Toate funcțiile aplicației sunt concepute să funcționeze offline.
|
||||
‣ <b>Respectă Confidențialitatea</b>: Aplicația este concepută cu confidențialitatea în minte - nu identifică oamenii, nu urmărește și nu colectează informații personale. Fără reclame.
|
||||
‣ <b>Îți Economisește Bateria și Spațiul</b>: Nu-ți golește bateria ca alte aplicații de navigație. Hărțile compacte economisesc spațiu prețios pe telefon.
|
||||
‣ <b>Gratuită și Construită de Comunitate</b>: Oameni ca tine au contribuit la construirea aplicației prin adăugarea de locuri pe OpenStreetMap, testare și oferire de feedback privind funcțiile și contribuind cu abilități de dezvoltare și bani.
|
||||
‣ <b>Decizii și Finanțe Deschise și Transparente, Non-profit și Complet Open Source.</b>
|
||||
|
||||
<b>Funcționalități principale</b>:
|
||||
• Hărți detaliate descărcabile cu locuri care nu sunt disponibile pe Google Maps
|
||||
• Mod outdoor cu trasee de drumeție evidențiate, locuri de campat, surse de apă, vârfuri, linii de cotă etc.
|
||||
• Căi pietonale și piste de biciclete
|
||||
• Puncte de interes precum restaurante, benzinării, hoteluri, magazine, obiective turistice și multe altele
|
||||
• Căutare după nume sau adresă sau după categoria punctului de interes
|
||||
• Navigare cu anunțuri vocale pentru mers pe jos, cu bicicleta sau cu mașina
|
||||
• Marchează-ți locurile preferate cu un singur click
|
||||
• Articole Wikipedia offline
|
||||
• Strat pentru traseul de metrou și indicații
|
||||
• Înregistrare traseu
|
||||
• Exportă și importă marcaje și trasee în formate KML, KMZ, GPX
|
||||
• Un mod întunecat pentru utilizarea nocturnă
|
||||
• Îmbunătățește datele hărții pentru toți, folosind un editor de bază încorporat
|
||||
• Suport Android Auto
|
||||
|
||||
Te rugăm să raportezi probleme ale aplicației, să sugerezi idei și să ni te alături comunității pe site-ul <b><i>comaps.app</i></b>.
|
||||
|
||||
<b>Libertatea este aici</b>
|
||||
Descoperă-ți călătoria, navighează prin lume cu confidențialitate și comunitate în prim plan!
|
||||
@@ -1 +0,0 @@
|
||||
Navigare ușoară - Descoperă mai mult din călătoria ta - Susținut de comunitate
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Navighează privat
|
||||
CoMaps - Navighează liniștit
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Jednoduchá navigácia - Objav viac zo svojej cesty - Funguje vďaka komunite
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Naviguj v súkromí
|
||||
@@ -1 +0,0 @@
|
||||
Enostavna navigacija – Odkrij več o svojem potovanju – Podprto v skupnosti
|
||||
@@ -1 +1 @@
|
||||
Једноставна навигација - Сазнајте више о свом путовању - Одржава заједница
|
||||
Једноставна навигација - Сазнајте више о свом путовању - Ради на бази заједнице
|
||||
|
||||
1
android/app/src/google/play/release-notes
Symbolic link
@@ -0,0 +1 @@
|
||||
../../fdroid/play/release-notes
|
||||
@@ -62,21 +62,6 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="https" />
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.GET_CAPABILITIES"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.POLL"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.SUBSCRIBE"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.SUBSCRIPTION_CHANGE"/>
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="org.traffxml.traff.UNSUBSCRIBE"/>
|
||||
</intent>
|
||||
</queries>
|
||||
|
||||
<supports-screens
|
||||
@@ -104,7 +89,6 @@
|
||||
<!-- Allows for config and orientation change without killing/restarting main activity -->
|
||||
<activity
|
||||
android:name="app.organicmaps.SplashActivity"
|
||||
android:theme="@style/MwmTheme.Splash"
|
||||
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|uiMode|keyboard|keyboardHidden|navigation"
|
||||
android:screenOrientation="fullUser"
|
||||
android:exported="true">
|
||||
@@ -365,7 +349,6 @@
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.DownloadResourcesLegacyActivity"
|
||||
android:theme="@style/MwmTheme.DownloadResourcesLegacy"
|
||||
android:configChanges="orientation|screenLayout|screenSize"
|
||||
android:screenOrientation="fullUser"/>
|
||||
|
||||
@@ -382,7 +365,6 @@
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.MwmActivity"
|
||||
android:theme="@style/MwmTheme.MainActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="uiMode"
|
||||
android:screenOrientation="fullUser"
|
||||
@@ -404,7 +386,6 @@
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.search.SearchActivity"
|
||||
android:theme="@style/MwmTheme.CardBg"
|
||||
android:configChanges="orientation|screenLayout|screenSize"
|
||||
android:screenOrientation="fullUser"
|
||||
android:label="@string/search_map"
|
||||
@@ -431,7 +412,6 @@
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.bookmarks.BookmarkCategoriesActivity"
|
||||
android:theme="@style/MwmTheme.WindowBg"
|
||||
android:configChanges="orientation|screenLayout|screenSize"
|
||||
android:screenOrientation="fullUser"
|
||||
android:label="@string/bookmarks_and_tracks"
|
||||
@@ -440,7 +420,6 @@
|
||||
|
||||
<activity
|
||||
android:name="app.organicmaps.bookmarks.BookmarkListActivity"
|
||||
android:theme="@style/MwmTheme.CardBg"
|
||||
android:configChanges="orientation|screenLayout|screenSize"
|
||||
android:screenOrientation="fullUser"
|
||||
android:label="@string/bookmarks"
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
@@ -24,11 +25,9 @@ import com.github.mikephil.charting.components.YAxis;
|
||||
import com.github.mikephil.charting.data.Entry;
|
||||
import com.github.mikephil.charting.data.LineData;
|
||||
import com.github.mikephil.charting.data.LineDataSet;
|
||||
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
|
||||
import com.github.mikephil.charting.formatter.ValueFormatter;
|
||||
import com.github.mikephil.charting.highlight.Highlight;
|
||||
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -56,10 +55,10 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
private MarkerView mCurrentLocationMarkerView;
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private MaterialTextView mMaxAltitude;
|
||||
private TextView mMaxAltitude;
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private MaterialTextView mMinAltitude;
|
||||
private TextView mMinAltitude;
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
private long mTrackId = Utils.INVALID_ID;
|
||||
@@ -119,7 +118,7 @@ public class ChartController implements OnChartValueSelectedListener
|
||||
x.setPosition(XAxis.XAxisPosition.BOTTOM);
|
||||
x.setAxisLineColor(ThemeUtils.getColor(mContext, androidx.appcompat.R.attr.dividerHorizontal));
|
||||
x.setAxisLineWidth(mContext.getResources().getDimensionPixelSize(R.dimen.divider_height));
|
||||
IAxisValueFormatter xAxisFormatter = new AxisValueFormatter(mChart);
|
||||
ValueFormatter xAxisFormatter = new AxisValueFormatter(mChart);
|
||||
x.setValueFormatter(xAxisFormatter);
|
||||
|
||||
YAxis y = mChart.getAxisLeft();
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import app.organicmaps.base.BaseMwmFragmentActivity;
|
||||
import app.organicmaps.downloader.MapManagerHelper;
|
||||
@@ -437,4 +438,11 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
@StyleRes
|
||||
public int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
return R.style.MwmTheme_DownloadResourcesLegacy;
|
||||
}
|
||||
}
|
||||
|
||||
210
android/app/src/main/java/app/organicmaps/MapFragment.java
Normal file
@@ -0,0 +1,210 @@
|
||||
package app.organicmaps;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.res.ConfigurationHelper;
|
||||
import app.organicmaps.base.BaseMwmFragment;
|
||||
import app.organicmaps.sdk.Map;
|
||||
import app.organicmaps.sdk.MapRenderingListener;
|
||||
import app.organicmaps.sdk.display.DisplayType;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
public class MapFragment extends BaseMwmFragment implements View.OnTouchListener, SurfaceHolder.Callback
|
||||
{
|
||||
private static final String TAG = MapFragment.class.getSimpleName();
|
||||
|
||||
@NonNull
|
||||
private final Map mMap = new Map(DisplayType.Device);
|
||||
|
||||
public void updateCompassOffset(int offsetX, int offsetY)
|
||||
{
|
||||
mMap.updateCompassOffset(requireContext(), offsetX, offsetY, true);
|
||||
}
|
||||
|
||||
public void updateBottomWidgetsOffset(int offsetX, int offsetY)
|
||||
{
|
||||
mMap.updateBottomWidgetsOffset(requireContext(), offsetX, offsetY);
|
||||
}
|
||||
|
||||
public void updateMyPositionRoutingOffset(int offsetY)
|
||||
{
|
||||
mMap.updateMyPositionRoutingOffset(offsetY);
|
||||
}
|
||||
|
||||
public void destroySurface(boolean activityIsChangingConfigurations)
|
||||
{
|
||||
mMap.onSurfaceDestroyed(activityIsChangingConfigurations, isAdded());
|
||||
}
|
||||
|
||||
public boolean isContextCreated()
|
||||
{
|
||||
return mMap.isContextCreated();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
int densityDpi;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
|
||||
densityDpi = ConfigurationHelper.getDensityDpi(requireContext().getResources());
|
||||
else
|
||||
densityDpi = getDensityDpiOld();
|
||||
|
||||
mMap.onSurfaceCreated(requireContext(), surfaceHolder.getSurface(), surfaceHolder.getSurfaceFrame(), densityDpi);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
mMap.onSurfaceChanged(requireContext(), surfaceHolder.getSurface(), surfaceHolder.getSurfaceFrame(),
|
||||
surfaceHolder.isCreating());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
mMap.onSurfaceDestroyed(requireActivity().isChangingConfigurations(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onAttach(context);
|
||||
|
||||
mMap.setLocationHelper(MwmApplication.from(requireContext()).getLocationHelper());
|
||||
mMap.setMapRenderingListener((MapRenderingListener) context);
|
||||
mMap.setCallbackUnsupported(this::reportUnsupported);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach()
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onDetach();
|
||||
mMap.setMapRenderingListener(null);
|
||||
mMap.setCallbackUnsupported(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle b)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onCreate(b);
|
||||
setRetainInstance(true);
|
||||
boolean launchByDeepLink = false;
|
||||
Bundle args = getArguments();
|
||||
if (args != null)
|
||||
launchByDeepLink = args.getBoolean(Map.ARG_LAUNCH_BY_DEEP_LINK);
|
||||
mMap.onCreate(launchByDeepLink);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onStart();
|
||||
mMap.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onStop();
|
||||
mMap.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause()
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onPause();
|
||||
mMap.onPause(requireContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume()
|
||||
{
|
||||
Logger.d(TAG);
|
||||
super.onResume();
|
||||
mMap.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
Logger.d(TAG);
|
||||
final View view = inflater.inflate(R.layout.fragment_map, container, false);
|
||||
final SurfaceView mSurfaceView = view.findViewById(R.id.map_surfaceview);
|
||||
mSurfaceView.getHolder().addCallback(this);
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event)
|
||||
{
|
||||
int action = event.getActionMasked();
|
||||
int pointerIndex = event.getActionIndex();
|
||||
switch (action)
|
||||
{
|
||||
case MotionEvent.ACTION_POINTER_UP -> action = Map.NATIVE_ACTION_UP;
|
||||
case MotionEvent.ACTION_UP ->
|
||||
{
|
||||
action = Map.NATIVE_ACTION_UP;
|
||||
pointerIndex = 0;
|
||||
}
|
||||
case MotionEvent.ACTION_POINTER_DOWN -> action = Map.NATIVE_ACTION_DOWN;
|
||||
case MotionEvent.ACTION_DOWN ->
|
||||
{
|
||||
action = Map.NATIVE_ACTION_DOWN;
|
||||
pointerIndex = 0;
|
||||
}
|
||||
case MotionEvent.ACTION_MOVE ->
|
||||
{
|
||||
action = Map.NATIVE_ACTION_MOVE;
|
||||
pointerIndex = Map.INVALID_POINTER_MASK;
|
||||
}
|
||||
case MotionEvent.ACTION_CANCEL -> action = Map.NATIVE_ACTION_CANCEL;
|
||||
}
|
||||
Map.onTouch(action, event, pointerIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void notifyOnSurfaceDestroyed(@NonNull Runnable task)
|
||||
{
|
||||
mMap.onSurfaceDestroyed(false, true);
|
||||
task.run();
|
||||
}
|
||||
|
||||
private void reportUnsupported()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireContext(), R.style.MwmTheme_AlertDialog)
|
||||
.setMessage(R.string.unsupported_phone)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.close, (dlg, which) -> requireActivity().moveTaskToBack(true))
|
||||
.show();
|
||||
}
|
||||
|
||||
private int getDensityDpiOld()
|
||||
{
|
||||
final DisplayMetrics metrics = new DisplayMetrics();
|
||||
requireActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
return metrics.densityDpi;
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,7 @@ import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import androidx.activity.result.ActivityResult;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
@@ -42,6 +43,7 @@ import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
@@ -84,7 +86,6 @@ import app.organicmaps.routing.RoutingPlanInplaceController;
|
||||
import app.organicmaps.sdk.ChoosePositionMode;
|
||||
import app.organicmaps.sdk.Framework;
|
||||
import app.organicmaps.sdk.Map;
|
||||
import app.organicmaps.sdk.MapController;
|
||||
import app.organicmaps.sdk.MapRenderingListener;
|
||||
import app.organicmaps.sdk.PlacePageActivationListener;
|
||||
import app.organicmaps.sdk.Router;
|
||||
@@ -132,16 +133,14 @@ import app.organicmaps.widget.placepage.PlacePageViewModel;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
|
||||
public class MwmActivity extends BaseMwmFragmentActivity
|
||||
implements PlacePageActivationListener, MapRenderingListener, RoutingController.Container, LocationListener,
|
||||
SensorListener, LocationState.ModeChangeListener, RoutingPlanInplaceController.RoutingPlanListener,
|
||||
RoutingBottomMenuListener, BookmarkManager.BookmarksLoadingListener,
|
||||
FloatingSearchToolbarController.SearchToolbarListener,
|
||||
implements PlacePageActivationListener, View.OnTouchListener, MapRenderingListener, RoutingController.Container,
|
||||
LocationListener, SensorListener, LocationState.ModeChangeListener,
|
||||
RoutingPlanInplaceController.RoutingPlanListener, RoutingBottomMenuListener,
|
||||
BookmarkManager.BookmarksLoadingListener, FloatingSearchToolbarController.SearchToolbarListener,
|
||||
MenuBottomSheetFragment.MenuBottomSheetInterfaceWithHeader,
|
||||
PlacePageController.PlacePageRouteSettingsListener, MapButtonsController.MapButtonClickListener,
|
||||
DisplayChangedListener
|
||||
@@ -171,9 +170,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private static final String POWER_SAVE_DISCLAIMER_SHOWN = "POWER_SAVE_DISCLAIMER_SHOWN";
|
||||
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
@NonNull
|
||||
private MapController mMapController;
|
||||
@Nullable
|
||||
private MapFragment mMapFragment;
|
||||
|
||||
private View mPointChooser;
|
||||
private MaterialToolbar mPointChooserToolbar;
|
||||
@@ -246,7 +244,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
ManageRouteBottomSheet mManageRouteBottomSheet;
|
||||
|
||||
private boolean mRemoveDisplayListener = true;
|
||||
private static int mLastUiMode = Configuration.UI_MODE_TYPE_UNDEFINED;
|
||||
private int mLastUiMode = Configuration.UI_MODE_TYPE_UNDEFINED;
|
||||
|
||||
public interface LeftAnimationTrackListener
|
||||
{
|
||||
@@ -456,12 +454,25 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@StyleRes
|
||||
protected int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
return R.style.MwmTheme_MainActivity;
|
||||
|
||||
if (Config.UiTheme.isNight(theme))
|
||||
return R.style.MwmTheme_Night_MainActivity;
|
||||
|
||||
return super.getThemeResourceId(theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayChangedToCar(@NonNull Runnable onTaskFinishedCallback)
|
||||
{
|
||||
mRemoveDisplayListener = false;
|
||||
startActivity(new Intent(this, MapPlaceholderActivity.class));
|
||||
mMapController.setOnDestroyListener(onTaskFinishedCallback);
|
||||
Objects.requireNonNull(mMapFragment).notifyOnSurfaceDestroyed(onTaskFinishedCallback);
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -470,15 +481,13 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
super.onConfigurationChanged(newConfig);
|
||||
|
||||
final int newType = newConfig.uiMode & Configuration.UI_MODE_TYPE_MASK;
|
||||
final int oldType = mLastUiMode & Configuration.UI_MODE_TYPE_MASK;
|
||||
final int newUiMode = newConfig.uiMode & Configuration.UI_MODE_TYPE_MASK;
|
||||
final boolean newUiModeIsCarConnected = newUiMode == Configuration.UI_MODE_TYPE_CAR;
|
||||
final boolean newUiModeIsCarDisconnected =
|
||||
mLastUiMode == Configuration.UI_MODE_TYPE_CAR && newUiMode == Configuration.UI_MODE_TYPE_NORMAL;
|
||||
mLastUiMode = newUiMode;
|
||||
|
||||
mLastUiMode = newConfig.uiMode;
|
||||
|
||||
final boolean carModeChanged =
|
||||
newType != oldType && (newType == Configuration.UI_MODE_TYPE_CAR || oldType == Configuration.UI_MODE_TYPE_CAR);
|
||||
|
||||
if (carModeChanged)
|
||||
if (newUiModeIsCarConnected || newUiModeIsCarDisconnected)
|
||||
return;
|
||||
|
||||
makeNavigationBarTransparentInLightMode();
|
||||
@@ -540,7 +549,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
updateViewsInsets();
|
||||
|
||||
if (getIntent().getBooleanExtra(EXTRA_UPDATE_THEME, false))
|
||||
ThemeSwitcher.INSTANCE.restart(mMapController.isRenderingActive());
|
||||
ThemeSwitcher.INSTANCE.restart(isMapRendererActive());
|
||||
|
||||
/*
|
||||
* onRenderingInitializationFinished() hook is not called when MwmActivity is recreated with the already
|
||||
@@ -608,10 +617,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void initViews(boolean isLaunchByDeeplink)
|
||||
{
|
||||
mMapController = new MapController(findViewById(R.id.map), MwmApplication.from(this).getLocationHelper(), this,
|
||||
this::reportUnsupported, isLaunchByDeeplink);
|
||||
getLifecycle().addObserver(mMapController);
|
||||
|
||||
initMap(isLaunchByDeeplink);
|
||||
initNavigationButtons();
|
||||
|
||||
if (!mIsTabletLayout)
|
||||
@@ -713,7 +719,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (!TextUtils.isEmpty(appName))
|
||||
{
|
||||
setTitle(appName);
|
||||
((MaterialTextView) mPointChooser.findViewById(R.id.title)).setText(appName);
|
||||
((TextView) mPointChooser.findViewById(R.id.title)).setText(appName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -725,7 +731,16 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
private void showPositionChooser(ChoosePositionMode mode, boolean isBusiness, boolean applyPosition)
|
||||
{
|
||||
closeFloatingToolbarsAndPanels(false);
|
||||
|
||||
if (mMapFragment != null)
|
||||
{
|
||||
final View mapView = mMapFragment.getView();
|
||||
if (mapView != null)
|
||||
{
|
||||
int width = mapView.getWidth();
|
||||
int height = mapView.getHeight();
|
||||
Framework.nativeSetVisibleRect(0, 0, width, height);
|
||||
}
|
||||
}
|
||||
UiUtils.show(mPointChooser);
|
||||
mMapButtonsViewModel.setButtonsHidden(true);
|
||||
ChoosePositionMode.set(mode, isBusiness, applyPosition);
|
||||
@@ -744,6 +759,29 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
finish();
|
||||
}
|
||||
|
||||
private void initMap(boolean isLaunchByDeepLink)
|
||||
{
|
||||
final FragmentManager manager = getSupportFragmentManager();
|
||||
mMapFragment = (MapFragment) manager.findFragmentByTag(MapFragment.class.getName());
|
||||
if (mMapFragment == null)
|
||||
{
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean(Map.ARG_LAUNCH_BY_DEEP_LINK, isLaunchByDeepLink);
|
||||
final FragmentFactory factory = manager.getFragmentFactory();
|
||||
mMapFragment = (MapFragment) factory.instantiate(getClassLoader(), MapFragment.class.getName());
|
||||
mMapFragment.setArguments(args);
|
||||
manager.beginTransaction()
|
||||
.replace(R.id.map_fragment_container, mMapFragment, MapFragment.class.getName())
|
||||
.commit();
|
||||
}
|
||||
|
||||
View container = findViewById(R.id.map_fragment_container);
|
||||
if (container != null)
|
||||
{
|
||||
container.setOnTouchListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
private void initNavigationButtons()
|
||||
{
|
||||
prepareNavigationButtons();
|
||||
@@ -1172,7 +1210,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
setIntent(intent);
|
||||
super.onNewIntent(intent);
|
||||
if (mMapController.isRenderingActive())
|
||||
if (isMapRendererActive())
|
||||
processIntent();
|
||||
if (intent.getAction() != null && intent.getAction().equals(TrackRecordingService.STOP_TRACK_RECORDING))
|
||||
{
|
||||
@@ -1182,12 +1220,17 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isMapRendererActive()
|
||||
{
|
||||
return mMapFragment != null && Map.isEngineCreated() && mMapFragment.isContextCreated();
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
@Override
|
||||
protected void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
ThemeSwitcher.INSTANCE.restart(mMapController.isRenderingActive());
|
||||
ThemeSwitcher.INSTANCE.restart(isMapRendererActive());
|
||||
refreshSearchToolbar();
|
||||
setFullscreen(isFullscreen());
|
||||
makeNavigationBarTransparentInLightMode();
|
||||
@@ -1205,6 +1248,15 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
MwmApplication.from(this).getSensorHelper().addListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recreate()
|
||||
{
|
||||
// Explicitly destroy surface before activity recreation.
|
||||
if (mMapFragment != null)
|
||||
mMapFragment.destroySurface(true);
|
||||
super.recreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResumeFragments()
|
||||
{
|
||||
@@ -1406,6 +1458,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
return super.onGenericMotionEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event)
|
||||
{
|
||||
return mMapFragment != null && mMapFragment.onTouch(view, event);
|
||||
}
|
||||
|
||||
public void customOnNavigateUp()
|
||||
{
|
||||
if (removeCurrentFragment(true))
|
||||
@@ -1421,7 +1479,10 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
void updateCompassOffset(int offsetY, int offsetX)
|
||||
{
|
||||
mMapController.updateCompassOffset(offsetX, offsetY);
|
||||
if (mMapFragment == null || !mMapFragment.isAdded())
|
||||
return;
|
||||
|
||||
mMapFragment.updateCompassOffset(offsetX, offsetY);
|
||||
|
||||
final double north = MwmApplication.from(this).getSensorHelper().getSavedNorth();
|
||||
if (!Double.isNaN(north))
|
||||
@@ -1440,6 +1501,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
public void updateBottomWidgetsOffset(int offsetX)
|
||||
{
|
||||
if (mMapFragment == null || !mMapFragment.isAdded())
|
||||
return;
|
||||
|
||||
int offsetY = mNavBarHeight;
|
||||
final Float bottomButtonHeight = mMapButtonsViewModel.getBottomButtonsHeight().getValue();
|
||||
if (bottomButtonHeight != null)
|
||||
@@ -1454,8 +1518,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
if (mDisplayManager.isDeviceDisplayUsed())
|
||||
{
|
||||
mMapController.updateBottomWidgetsOffset(offsetX, offsetY);
|
||||
mMapController.updateMyPositionRoutingOffset(offsetY);
|
||||
mMapFragment.updateBottomWidgetsOffset(offsetX, offsetY);
|
||||
mMapFragment.updateMyPositionRoutingOffset(offsetY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1673,7 +1737,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
public void onNavigationCancelled()
|
||||
{
|
||||
closeFloatingToolbarsAndPanels(true);
|
||||
ThemeSwitcher.INSTANCE.restart(mMapController.isRenderingActive());
|
||||
ThemeSwitcher.INSTANCE.restart(isMapRendererActive());
|
||||
if (mRoutingPlanInplaceController == null)
|
||||
return;
|
||||
|
||||
@@ -1689,7 +1753,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
public void onNavigationStarted()
|
||||
{
|
||||
closeFloatingToolbarsAndPanels(true);
|
||||
ThemeSwitcher.INSTANCE.restart(mMapController.isRenderingActive());
|
||||
ThemeSwitcher.INSTANCE.restart(isMapRendererActive());
|
||||
mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.navigation);
|
||||
refreshLightStatusBar();
|
||||
|
||||
@@ -1725,7 +1789,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
public void onResetToPlanningState()
|
||||
{
|
||||
closeFloatingToolbarsAndPanels(true);
|
||||
ThemeSwitcher.INSTANCE.restart(mMapController.isRenderingActive());
|
||||
ThemeSwitcher.INSTANCE.restart(isMapRendererActive());
|
||||
NavigationService.stopService(this);
|
||||
mMapButtonsViewModel.setSearchOption(null);
|
||||
mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.planning);
|
||||
@@ -2554,13 +2618,4 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
window.setNavigationBarContrastEnforced(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void reportUnsupported()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setMessage(R.string.unsupported_phone)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.close, (dlg, which) -> this.moveTaskToBack(true))
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
@@ -21,12 +22,14 @@ import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import app.organicmaps.downloader.DownloaderActivity;
|
||||
import app.organicmaps.intent.Factory;
|
||||
import app.organicmaps.sdk.display.DisplayManager;
|
||||
import app.organicmaps.sdk.location.LocationHelper;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.LocationUtils;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.SharingUtils;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import java.io.IOException;
|
||||
@@ -56,6 +59,15 @@ public class SplashActivity extends AppCompatActivity
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
final String theme = Config.UiTheme.getCurrent();
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
setTheme(R.style.MwmTheme_Splash);
|
||||
else if (Config.UiTheme.isNight(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);
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -8,13 +8,14 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
|
||||
public class BaseMwmDialogFragment extends DialogFragment
|
||||
{
|
||||
@StyleRes
|
||||
protected final int getFullscreenTheme()
|
||||
{
|
||||
return R.style.MwmTheme_DialogFragment_Fullscreen;
|
||||
return ThemeUtils.isNightTheme() ? getFullscreenDarkTheme() : getFullscreenLightTheme();
|
||||
}
|
||||
|
||||
protected int getStyle()
|
||||
@@ -22,8 +23,7 @@ public class BaseMwmDialogFragment extends DialogFragment
|
||||
return STYLE_NORMAL;
|
||||
}
|
||||
|
||||
@StyleRes
|
||||
protected int getCustomTheme()
|
||||
protected @StyleRes int getCustomTheme()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -40,6 +40,18 @@ public class BaseMwmDialogFragment extends DialogFragment
|
||||
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()
|
||||
{
|
||||
|
||||
@@ -11,6 +11,7 @@ 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.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
@@ -19,6 +20,7 @@ import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.SplashActivity;
|
||||
import app.organicmaps.sdk.util.Config;
|
||||
import app.organicmaps.sdk.util.concurrency.UiThread;
|
||||
import app.organicmaps.sdk.util.log.Logger;
|
||||
import app.organicmaps.util.RtlUtils;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
@@ -30,9 +32,24 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
|
||||
private boolean mSafeCreated;
|
||||
|
||||
@NonNull
|
||||
private String mThemeName;
|
||||
|
||||
@StyleRes
|
||||
protected int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
if (Config.UiTheme.isDefault(theme))
|
||||
return R.style.MwmTheme;
|
||||
|
||||
if (Config.UiTheme.isNight(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.
|
||||
* <p>
|
||||
*
|
||||
* Do not override this method!
|
||||
* Use {@link #onSafeCreate(Bundle savedInstanceState)}
|
||||
*/
|
||||
@@ -41,6 +58,8 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
protected final void onCreate(@Nullable Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
mThemeName = Config.UiTheme.getCurrent();
|
||||
setTheme(getThemeResourceId(mThemeName));
|
||||
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
|
||||
RtlUtils.manageRtl(this);
|
||||
if (!MwmApplication.from(this).getOrganicMaps().arePlatformAndCoreInitialized())
|
||||
@@ -94,6 +113,18 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
mSafeCreated = false;
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
@Override
|
||||
public void onPostResume()
|
||||
{
|
||||
super.onPostResume();
|
||||
if (!mThemeName.equals(Config.UiTheme.getCurrent()))
|
||||
{
|
||||
// Workaround described in https://code.google.com/p/android/issues/detail?id=93731
|
||||
UiThread.runLater(this::recreate);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
|
||||
@@ -6,11 +6,13 @@ import android.os.Bundle;
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseToolbarActivity;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
|
||||
public class BookmarkCategoriesActivity extends BaseToolbarActivity
|
||||
{
|
||||
@@ -36,6 +38,13 @@ public class BookmarkCategoriesActivity extends BaseToolbarActivity
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
@StyleRes
|
||||
public int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
return ThemeUtils.getWindowBgThemeResourceId(theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends Fragment> getFragmentClass()
|
||||
{
|
||||
|
||||
@@ -6,6 +6,9 @@ import android.text.InputFilter;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -17,7 +20,6 @@ import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.util.InputUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import java.util.Objects;
|
||||
@@ -37,8 +39,6 @@ public class BookmarkCategorySettingsFragment extends BaseMwmToolbarFragment
|
||||
@SuppressWarnings("NullableProblems")
|
||||
@NonNull
|
||||
private TextInputEditText mEditCategoryNameView;
|
||||
@NonNull
|
||||
private ShapeableImageView mSaveView;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState)
|
||||
@@ -54,6 +54,7 @@ public class BookmarkCategorySettingsFragment extends BaseMwmToolbarFragment
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
View root = inflater.inflate(R.layout.fragment_bookmark_category_settings, container, false);
|
||||
setHasOptionsMenu(true);
|
||||
initViews(root);
|
||||
return root;
|
||||
}
|
||||
@@ -84,8 +85,23 @@ public class BookmarkCategorySettingsFragment extends BaseMwmToolbarFragment
|
||||
});
|
||||
mEditDescView = root.findViewById(R.id.edit_description);
|
||||
mEditDescView.setText(mCategory.getDescription());
|
||||
mSaveView = root.findViewById(R.id.save);
|
||||
mSaveView.setOnClickListener(v -> onEditDoneClicked());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater)
|
||||
{
|
||||
inflater.inflate(R.menu.menu_done, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
if (item.getItemId() == R.id.done)
|
||||
{
|
||||
onEditDoneClicked();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private void onEditDoneClicked()
|
||||
|
||||
@@ -5,11 +5,13 @@ import android.os.Bundle;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.base.BaseToolbarActivity;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
|
||||
public class BookmarkListActivity extends BaseToolbarActivity
|
||||
{
|
||||
@@ -35,6 +37,13 @@ public class BookmarkListActivity extends BaseToolbarActivity
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
@StyleRes
|
||||
public int getThemeResourceId(@NonNull String theme)
|
||||
{
|
||||
return ThemeUtils.getCardBgThemeResourceId(theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends Fragment> getFragmentClass()
|
||||
{
|
||||
|
||||
@@ -23,8 +23,6 @@ import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.widget.recycler.RecyclerClickListener;
|
||||
import app.organicmaps.widget.recycler.RecyclerLongClickListener;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
@@ -61,7 +59,7 @@ public class Holders
|
||||
public static class HeaderViewHolder extends RecyclerView.ViewHolder
|
||||
{
|
||||
@NonNull
|
||||
private final MaterialButton mButton;
|
||||
private final MaterialTextView mButton;
|
||||
@NonNull
|
||||
private final MaterialTextView mText;
|
||||
|
||||
@@ -79,7 +77,7 @@ public class Holders
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public MaterialButton getButton()
|
||||
public MaterialTextView getButton()
|
||||
{
|
||||
return mButton;
|
||||
}
|
||||
|
||||