diff --git a/.github/workflows/android-beta.yaml b/.github/workflows/android-beta.yaml index 55880bd400..2f70d6437c 100644 --- a/.github/workflows/android-beta.yaml +++ b/.github/workflows/android-beta.yaml @@ -26,9 +26,6 @@ on: - track_generator/** - xcode/** -env: - JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin - jobs: android-google-beta: name: Android Google Beta diff --git a/.github/workflows/android-check.yaml b/.github/workflows/android-check.yaml index 80223719be..3498d71511 100644 --- a/.github/workflows/android-check.yaml +++ b/.github/workflows/android-check.yaml @@ -25,9 +25,6 @@ on: - track_generator/** - xcode/** -env: - JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin - jobs: lint: name: Android Lint diff --git a/.github/workflows/android-monkey.yaml b/.github/workflows/android-monkey.yaml index be17f66671..ef313cfb36 100644 --- a/.github/workflows/android-monkey.yaml +++ b/.github/workflows/android-monkey.yaml @@ -4,9 +4,6 @@ on: schedule: - cron: '0 5 * * *' # Once per day at 05:00 UTC -env: - JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin - jobs: precondition: runs-on: ubuntu-latest diff --git a/.github/workflows/android-release-metadata.yaml b/.github/workflows/android-release-metadata.yaml index 0cb6e93e6a..0505a997ea 100644 --- a/.github/workflows/android-release-metadata.yaml +++ b/.github/workflows/android-release-metadata.yaml @@ -2,9 +2,6 @@ name: Android Release Metadata on: workflow_dispatch: # Manual trigger -env: - JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin - jobs: android-release-metadata: name: Upload Google Play metadata diff --git a/.github/workflows/android-release.yaml b/.github/workflows/android-release.yaml index 8a2a9ecb57..821417d962 100644 --- a/.github/workflows/android-release.yaml +++ b/.github/workflows/android-release.yaml @@ -5,7 +5,6 @@ on: env: RELEASE_NOTES: android/src/google/play/release-notes/en-US/default.txt FDROID_VERSION: android/src/fdroid/play/version.yaml - JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin jobs: tag: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 7262ce8c17..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1 +0,0 @@ -See [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) \ No newline at end of file diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 4400a72ddf..67838d9f8b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -38,7 +38,6 @@ Code contributions: Roman Tsisyk Caspar Nuël Konstantin Pastbin - Nishant Bhandari Porting to Tizen platform: Sergey Pisarchik diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 2738249474..0000000000 --- a/INSTALL.md +++ /dev/null @@ -1 +0,0 @@ -See [docs/INSTALL.md](docs/INSTALL.md) \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 5e35d7ff5e..54ae2407d0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -12,8 +12,8 @@ buildscript { // Detect flavors from the task name. def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase() - def isFdroid = taskName.contains('fdroid') - def isBeta = taskName.contains('beta') + def isFdroid = taskName.contains("fdroid") + def isBeta = taskName.contains("beta") // Enable Google Mobile Services for all flavors except fdroid. def googleMobileServicesDefault = !isFdroid @@ -26,25 +26,25 @@ buildscript { ext.googleFirebaseServicesEnabled = project.hasProperty('firebase') ?: googleFirebaseServicesDefault dependencies { - classpath 'com.android.tools.build:gradle:8.0.1' + classpath 'com.android.tools.build:gradle:7.4.2' if (googleMobileServicesEnabled) { - println('Building with Google Mobile Services') + println("Building with Google Mobile Services") classpath 'com.google.gms:google-services:4.3.15' } else { - println('Building without Google Services') + println("Building without Google Services") } if (googleFirebaseServicesEnabled) { - println('Building with Google Firebase Services') - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' + println("Building with Google Firebase Services") + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.4' classpath 'com.google.firebase:firebase-appdistribution-gradle:4.0.0' } else { - println('Building without Google Firebase Services') + println("Building without Google Firebase Services") } - classpath('com.github.triplet.gradle:play-publisher:3.8.2') - classpath('ru.cian:huawei-publish-gradle-plugin:1.4.0') + classpath("com.github.triplet.gradle:play-publisher:3.8.1") + classpath("ru.cian:huawei-publish-gradle-plugin:1.3.5") } } @@ -75,7 +75,7 @@ dependencies { // Google Firebase Services if (googleFirebaseServicesEnabled) { // Import the BoM for the Firebase platform - implementation platform('com.google.firebase:firebase-bom:32.0.0') + implementation platform('com.google.firebase:firebase-bom:31.2.3') // Add the dependencies for the Crashlytics and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics' @@ -88,23 +88,23 @@ dependencies { // This line is added as a workaround for duplicate classes error caused by some outdated dependency: // > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable // We don't use Kotlin, but some dependencies are actively using it. - implementation(platform('org.jetbrains.kotlin:kotlin-bom:1.8.21')) + implementation(platform('org.jetbrains.kotlin:kotlin-bom:1.8.10')) implementation 'androidx.annotation:annotation:1.6.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.fragment:fragment:1.5.7' + implementation 'androidx.fragment:fragment:1.5.5' implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' - implementation 'androidx.work:work-runtime:2.8.1' - implementation 'com.google.android.material:material:1.9.0' + implementation 'androidx.work:work-runtime:2.8.0' + implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.code.gson:gson:2.10.1' implementation 'com.github.devnullorthrow:MPAndroidChart:3.2.0-alpha' implementation 'net.jcip:jcip-annotations:1.0' // Test Dependencies testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:5.3.1' - testImplementation 'org.mockito:mockito-inline:5.2.0' + testImplementation 'org.mockito:mockito-core:5.1.1' + testImplementation 'org.mockito:mockito-inline:5.1.1' } def run(cmd) { @@ -162,7 +162,8 @@ android { buildConfigField 'String', 'SUPPORT_MAIL', '"android@organicmaps.app"' // Should be customized in flavors. buildConfigField 'String', 'REVIEW_URL', '""' - resourceConfigurations += [project.ext.supportedLocalizations] + + resConfigs project.ext.supportedLocalizations multiDexEnabled true multiDexKeepFile file('multidex-config.txt') diff --git a/android/gradle.properties b/android/gradle.properties index e8a20bffbe..193756a26a 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -7,9 +7,5 @@ org.gradle.caching=true org.gradle.jvmargs=-Xmx1024m -Xms256m android.useAndroidX=true android.native.buildOutput=verbose -android.defaults.buildfeatures.buildconfig=true -android.nonTransitiveRClass=false -android.nonFinalResIds=false - # Autogenerated by tools/unix/generate_localizations.sh supportedLocalizations=ar,be,bg,ca,cs,da,de,el,en,en_GB,es,es_MX,et,eu,fa,fi,fr,fr_CA,iw,hi,hu,in,it,ja,ko,mr,nb,nl,pl,pt,pt_BR,ro,ru,sk,sv,sw,th,tr,uk,vi,zh,zh_HK,zh_MO,zh_TW diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar index c1962a79e2..943f0cbfa7 100644 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 37aef8d3f0..f398c33c4b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew index aeb74cbb43..65dcd68d65 100755 --- a/android/gradlew +++ b/android/gradlew @@ -85,6 +85,9 @@ done APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -141,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -194,10 +197,6 @@ if "$cygwin" || "$msys" ; then done fi - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/android/jni/app/organicmaps/Framework.cpp b/android/jni/app/organicmaps/Framework.cpp index c32c4e616b..4bd1fe626f 100644 --- a/android/jni/app/organicmaps/Framework.cpp +++ b/android/jni/app/organicmaps/Framework.cpp @@ -245,9 +245,9 @@ bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi m_work.SetMyPositionModeListener(bind(&Framework::MyPositionModeChanged, this, _1, _2)); if (m_vulkanContextFactory) - m_work.CreateDrapeEngine(make_ref(m_vulkanContextFactory), std::move(p)); + m_work.CreateDrapeEngine(make_ref(m_vulkanContextFactory), move(p)); else - m_work.CreateDrapeEngine(make_ref(m_oglContextFactory), std::move(p)); + m_work.CreateDrapeEngine(make_ref(m_oglContextFactory), move(p)); m_work.EnterForeground(); return true; @@ -685,7 +685,7 @@ void Framework::ApplyWidgets() for (auto const & widget : m_guiPositions) layout[widget.first] = widget.second.m_pixelPivot; - m_work.SetWidgetLayout(std::move(layout)); + m_work.SetWidgetLayout(move(layout)); } void Framework::CleanWidgets() diff --git a/android/jni/app/organicmaps/SearchEngine.cpp b/android/jni/app/organicmaps/SearchEngine.cpp index 72dbb410f7..be8719d249 100644 --- a/android/jni/app/organicmaps/SearchEngine.cpp +++ b/android/jni/app/organicmaps/SearchEngine.cpp @@ -295,7 +295,7 @@ extern "C" {}, // Default timeout static_cast(isCategory), {}, // Empty m_onStarted callback - {}, // Empty m_onCompleted callback + bind(&OnResults, _1, std::vector{}, timestamp, isMapAndTable, hasPosition, lat, lon), // Empty m_onCompleted callback }; // TODO (@alexzatsepin): set up vparams.m_onCompleted here and use @@ -303,19 +303,19 @@ extern "C" // Don't move vparams here, because it's used below. g_framework->NativeFramework()->GetSearchAPI().SearchInViewport(vparams); - if (isMapAndTable) - { - search::EverywhereSearchParams eparams{ - std::move(vparams.m_query), - std::move(vparams.m_inputLocale), - {}, // default timeout - static_cast(isCategory), - bind(&OnResults, _1, _2, timestamp, isMapAndTable, hasPosition, lat, lon) - }; - - if (g_framework->NativeFramework()->GetSearchAPI().SearchEverywhere(std::move(eparams))) - g_queryTimestamp = timestamp; - } +// if (isMapAndTable) +// { +// search::EverywhereSearchParams eparams{ +// std::move(vparams.m_query), +// std::move(vparams.m_inputLocale), +// {}, // default timeout +// static_cast(isCategory), +// bind(&OnResults, _1, _2, timestamp, isMapAndTable, hasPosition, lat, lon) +// }; +// +// if (g_framework->NativeFramework()->GetSearchAPI().SearchEverywhere(std::move(eparams))) +// g_queryTimestamp = timestamp; +// } } JNIEXPORT void JNICALL Java_app_organicmaps_search_SearchEngine_nativeRunSearchMaps( diff --git a/android/res/layout/activity_map.xml b/android/res/layout/activity_map.xml index abe4998ff8..9e74ce13d2 100644 --- a/android/res/layout/activity_map.xml +++ b/android/res/layout/activity_map.xml @@ -1,6 +1,7 @@ - + android:layout_height="wrap_content" + style="?attr/bottomSheetStyle" + android:fillViewport="true" + app:layout_behavior="@string/placepage_behavior" > + + + + + diff --git a/android/res/layout/place_page_container_fragment.xml b/android/res/layout/place_page_container_fragment.xml deleted file mode 100644 index f53af67f3a..0000000000 --- a/android/res/layout/place_page_container_fragment.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/android/res/values-ar/strings.xml b/android/res/values-ar/strings.xml index 9a9cce4d3d..ffe5f00af3 100644 --- a/android/res/values-ar/strings.xml +++ b/android/res/values-ar/strings.xml @@ -24,7 +24,7 @@ الأميال موقعي - + ًلاحقا البحث @@ -387,10 +387,6 @@ هل ترغب في أن نرسم مسار لك من موقعك الحالي؟ التالي - - من الساعة - - إلى إضافة جدول حذف جدول @@ -734,9 +730,6 @@ https://wiki.openstreetmap.org/wiki/Ar:About_OpenStreetMap - العنوان / البلوك - العنوان / البلوك - العنوان / البلوك تلفريك محطة تلفريك مطار @@ -911,9 +904,8 @@ منتزه وطني مبنى مبنى - مبنى - مبنى جراج + مبنى محطة سكك حديدية مستودع قبر @@ -934,7 +926,6 @@ عامل معادن رسام مصور فوتوغرافي - متجر الكاميرا سباك منشرة تصليح الاحذية @@ -1290,7 +1281,7 @@ موقف سيارات موقف سيارات موقف سيارات - موقف سيارات + موقف سيارات خاص ﺔﻫﺰﻨﻟﺍ ﺔﻟﻭﺎﻃ ملعب رياضي ملعب @@ -1727,7 +1718,6 @@ محل زراعي ﻒﺤﺘﻟﺍ متجر الأجهزة - ﻥﻮﻨﻔﻟﺍ ﺮﺠﺘﻣ ﻝﺎﻔﻃﻸﻟ ﺮﺠﺘﻣ ﺐﺋﺎﻘﺤﻟﺍ ﺮﺠﺘﻣ @@ -1830,5 +1820,6 @@ دعم محدود لكراسي المعاقين لا يدعم لكراسي المعاقين دعم كامل لكراسي المعاقين + مبنى مكان الأحداث diff --git a/android/res/values-be/strings.xml b/android/res/values-be/strings.xml index 4a84f23df3..c3c62d06a3 100644 --- a/android/res/values-be/strings.xml +++ b/android/res/values-be/strings.xml @@ -24,7 +24,7 @@ Мілі Маё месцазнаходжанне - + Потым Шукаць @@ -383,10 +383,6 @@ Хочаце перапракласці маршрут ад цяперашняга месцазнаходжання? Далей - - З - - Да Дадаць расклад Выдаліць расклад @@ -728,9 +724,6 @@ https://organicmaps.app/ru/ - Адрас/Блок - Адрас/Блок - Адрас/Блок Велапаркоўка Станцыя для зарадкі ровараў Аўтамабільная зарадная станцыя @@ -816,7 +809,6 @@ Металаканструкцыі Мастак Фатограф - Крама фотаапаратаў Вадаправодчык Лесапільня Шавец @@ -1104,7 +1096,6 @@ Сельскагаспадарчы магазін Антыкварыят Крама бытавой тэхнікі - Крама мастацтваў Дзіцячая крама Крама сумак diff --git a/android/res/values-bg/strings.xml b/android/res/values-bg/strings.xml index 03a31c817a..7f1d4ad23b 100644 --- a/android/res/values-bg/strings.xml +++ b/android/res/values-bg/strings.xml @@ -24,7 +24,7 @@ Мили Мое местоположение - + По-късно Търсене @@ -354,10 +354,6 @@ Искате ли да планираме маршрут от текущото ви местоположение? Напред - - От - - До Добавяне на график Изтриване на график @@ -660,9 +656,6 @@ Картографски данни от OpenStreetMap - Адрес/Блок - Адрес/Блок - Адрес/Блок Станция за зареждане на велосипеди Станция за зареждане на автомобили Боулинг писта @@ -705,7 +698,6 @@ Метални конструкции Художник Фотограф - Магазин за фотоапарати Водопроводчик Дъскорезница Обущар @@ -964,7 +956,6 @@ Селскостопански магазин Антики Магазин за техника - Магазин за изкуства Детски магазин Магазин за чанти diff --git a/android/res/values-ca/strings.xml b/android/res/values-ca/strings.xml index 0de2ae9c9d..4d2e1c39ea 100644 --- a/android/res/values-ca/strings.xml +++ b/android/res/values-ca/strings.xml @@ -21,7 +21,7 @@ Milles La meva posició - + Més tard Cerca @@ -376,10 +376,6 @@ Voleu que planifiquem una ruta des de la vostra ubicació actual? Següent - - De - - A Afegeix un horari Esborra l\'horari @@ -722,15 +718,10 @@ Si està activa, no cal desblocar l\'aparell cada vegada mentre l\'aplicació està funcionant. Dades del mapa de l\'OpenStreetMap - - https://organicmaps.app/ca/ https://wiki.openstreetmap.org/wiki/Ca:About - Adreça/Bloc - Adreça/Bloc - Adreça/Bloc Estació de recàrrega de bicicletes Estació de recàrrega de cotxes Bolera @@ -740,7 +731,6 @@ Tall de claus Serraller - Botiga de càmeres Entrada principal diff --git a/android/res/values-cs/strings.xml b/android/res/values-cs/strings.xml index 24fea8521f..9082c86d28 100644 --- a/android/res/values-cs/strings.xml +++ b/android/res/values-cs/strings.xml @@ -21,7 +21,7 @@ Míle Moje poloha - + Později Hledat @@ -367,10 +367,6 @@ Máme naplánovat trasu z vašeho současného umístění? Další - - Od - - Do Přidat rozvrh Smazat rozvrh @@ -699,9 +695,6 @@ https://organicmaps.app/cs/ - Adresa/blok - Adresa/blok - Adresa/blok Stanice lanové dráhy Letiště Letiště @@ -836,9 +829,8 @@ Národní park Stavba Stavba - Stavba - Stavba Garáž + Stavba Železniční stanice Hrob Řemeslo @@ -858,7 +850,6 @@ Kovodílna Malíř Fotograf - Obchod s fotoaparáty Instalatér Pila Opravna obuvi @@ -1578,6 +1569,7 @@ Ovoce a zelenina Potraviny Kadeřnictví + Železářství Prodejna zdravé výživy Obchod s bylinkami HiFi audio @@ -1620,7 +1612,6 @@ Zemědělský obchod Starožitnosti Obchod se spotřebiči - Obchod s uměním Dětský obchod Obchod s taškami @@ -1718,5 +1709,6 @@ Omezený vstup pro vozíčkáře Bez přístupu pro vozíčkáře Plný vstup pro vozíčkáře + Stavba Místo konání akcí diff --git a/android/res/values-da/strings.xml b/android/res/values-da/strings.xml index 81b049b5ec..245e648b2e 100644 --- a/android/res/values-da/strings.xml +++ b/android/res/values-da/strings.xml @@ -21,7 +21,7 @@ Mil Min position - + Senere Søg @@ -363,10 +363,6 @@ Ønsker du, at vi planlægger en rute fra din nuværende placering? Næste - - Fra - - Til Tilføj tidsplan Slet tidsplan @@ -688,9 +684,6 @@ https://wiki.openstreetmap.org/wiki/Da:Om_OpenStreetMap - Adresse/blok - Adresse/blok - Adresse/blok Kabelbanestation Lufthavn Lufthavn @@ -822,7 +815,6 @@ Bygning Bygning Bygning - Bygning Togstation Grav Håndværk @@ -842,7 +834,6 @@ Metalarbejder Maler Fotograf - Kamera butik VVS-mand Savværk Skomager @@ -878,6 +869,7 @@ Filippinsk Eksklusiv Fisk + Fish and chips Fransk Friture Georgisk @@ -1558,6 +1550,7 @@ Grønthandler Købmand Frisør + Isenkræmmer Helsekostbutik Urtebutik HiFi lyd @@ -1601,7 +1594,6 @@ Landbrugsbutik Antikviteter Hvidevarer butik - Kunstbutik Børnebutik Tasker butik @@ -1695,5 +1687,6 @@ Begrænset tilgængelighed for kørestol Ingen tilgængelighed for kørestol Fuld tilgængelighed for kørestol + Bygning Sted for arrangementer diff --git a/android/res/values-de/strings.xml b/android/res/values-de/strings.xml index 0f1841177f..20f4a790a8 100644 --- a/android/res/values-de/strings.xml +++ b/android/res/values-de/strings.xml @@ -21,7 +21,7 @@ Meilen Mein Standort - + Später Suche @@ -380,10 +380,6 @@ Soll eine Route von Ihrem aktuellen Standort aus berechnet werden? Weiter - - Von - - Bis Zeitplan hinzufügen Zeitplan löschen @@ -638,7 +634,7 @@ Routenbeschränkungen In jeder Reiseroute vermeiden Mautstraßen - Unbefestigte Straßen + Erdwege Fährstellen Autobahnen Route kann nicht berechnet werden @@ -729,15 +725,10 @@ Wenn aktiviert, muss das Gerät nicht jedes Mal entsperrt werden, wenn die App ausgeführt wird. Kartendaten von OpenStreetMap - - https://organicmaps.app/de/ https://wiki.openstreetmap.org/wiki/DE:Über_OSM - Adresse/Block - Adresse/Block - Adresse/Block Seilbahn Pendelbahn Sessellift @@ -917,7 +908,6 @@ Gebäude Gebäude Gebäude - Gebäude Bahnhof Grab Handwerk @@ -937,7 +927,6 @@ Schlosser Maler Fotograf - Kamerageschäft Installateur Sägewerk Schuhmacher @@ -973,6 +962,7 @@ Philippinisch Gehoben Fisch + Fish and Chips Französisch Pommes Georgisch @@ -1763,6 +1753,7 @@ Gemüseladen Lebensmittelgeschäft Friseur + Baumarkt Reformhaus Kräuterladen HiFi-Audio @@ -1806,7 +1797,6 @@ Landwirtschaftliches Geschäft Antiquitäten Laden für Haushaltsgeräte - Kunstgeschäft Babybedarf Taschen Shop @@ -1937,5 +1927,6 @@ Anfängerfreundliche Abfahrt Langlaufloipe Rodelbahn + Gebäude Veranstaltungszentrum diff --git a/android/res/values-el/strings.xml b/android/res/values-el/strings.xml index 91dcbaf42c..83c05cfcb1 100644 --- a/android/res/values-el/strings.xml +++ b/android/res/values-el/strings.xml @@ -22,7 +22,7 @@ Μίλια Η θέση μου - + Αργότερα Αναζήτηση @@ -366,10 +366,6 @@ Θέλετε να σχεδιάσουμε μια διαδρομή από την τρέχουσα θέση σας; Επόμενη - - Από τις - - Έως Τις Προσθέσετε χρονοδιάγραμμα Διαγραφή χρονοδιαγράμματος @@ -680,9 +676,6 @@ https://wiki.openstreetmap.org/wiki/El:About_OpenStreetMap - Διεύθυνση/Μπλοκ - Διεύθυνση/Μπλοκ - Διεύθυνση/Μπλοκ Τελεφερίκ Τελεφερίκ Τελεφερίκ @@ -825,9 +818,8 @@ Εθνικό πάρκο Κτίριο Κτίριο - Κτίριο - Κτίριο Γκαράζ + Κτίριο Σιδηροδρομικός σταθμός Τάφος Τεχνική @@ -847,7 +839,6 @@ Μεταλλουργός Μπογιατζής Φωτογράφος - Κατάστημα φωτογραφικών μηχανών Υδραυλικός Πριστήριο Υποδηματοποιός @@ -1615,7 +1606,6 @@ Αγροτικό κατάστημα Αντίκες Κατάστημα οικιακών συσκευών - Κατάστημα Τεχνών Παιδικό κατάστημα Κατάστημα τσαντών @@ -1716,5 +1706,6 @@ Μερικώς εξοπλισμένο για άτομα με ειδικές ανάγκες Δεν υπάρχει πρόβλεψη για άτομα με ειδικές ανάγκες Εξοπλισμένο για άτομα με ειδικές ανάγκες + Κτίριο Κέντρο εκδηλώσεων diff --git a/android/res/values-en-rGB/strings.xml b/android/res/values-en-rGB/strings.xml index 284133eeab..ecc1ae8d9c 100644 --- a/android/res/values-en-rGB/strings.xml +++ b/android/res/values-en-rGB/strings.xml @@ -14,13 +14,6 @@ Petrol - - Grey - - Blue Grey - - - — Exercise caution with routes in border zones: the routes created by our app may sometimes cross country borders in unauthorised places. Postcode @@ -29,141 +22,128 @@ Metro map is unavailable - Petrol Stations Metro navigation in this region is not available yet Metro route is not found Please choose a start or end point closer to a metro station - Arts Centre Petrol Station - Loading Bay - Postbox - - - Recycling Centre - Rubbish Bin - Doughnut - Savoury Pancakes - Blood Donation Centre Lift Common Land - Sports Centre - Governmental Office - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro Underground Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station - Metro Station + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro + Metro Metro Line Metro Line Bridge Metro Line Tunnel @@ -277,37 +257,5 @@ Metro Entrance Metro Entrance Metro Entrance - Bookshop - Car Repair Garage - Caravan Dealership - Computer Shop - Sweet Shop - Convenience Shop - DIY Shop - Furniture Shop - Garden Centre - Grocery Shop - Ironmongers - Housewares Shop - Jewellery Shop - Kitchen Shop - Launderette - Shopping Centre - Mobile Phone Shop - Record Shop - Pet Shop - Toy Shop - Variety Shop - Arts and Crafts Shop - Electrical Supplies Shop - Fishing Shop - Interior Decorations Shop - Medical Supplies Shop - Nutrition Supplement Shop - Tobacco Shop - Watch Shop - Wholesale Shop - Football - Campsite - Caravan Park + Mobile Phones diff --git a/android/res/values-es/strings.xml b/android/res/values-es/strings.xml index 049c9a83ff..c3e350c860 100644 --- a/android/res/values-es/strings.xml +++ b/android/res/values-es/strings.xml @@ -21,7 +21,7 @@ Millas Mi posición - + Luego Buscar @@ -384,10 +384,6 @@ ¿Quiere que planeemos un ruta desde su ubicación actual? Siguiente - - De - - A Añadir horario Eliminar horario @@ -733,15 +729,10 @@ Cuando está habilitado, no tiene que desbloquear su dispositivo mientras la aplicación se está ejecutando. Datos de mapas de OpenStreetMap - - https://organicmaps.app/es/ https://wiki.openstreetmap.org/wiki/ES:Acerca_de_OpenStreetMap - Dirección/Bloque - Dirección/Bloque - Dirección/Bloque Transporte aéreo Teleférico Telesilla @@ -937,9 +928,8 @@ Parque nacional Edificio Edificio - Edificio - Edificio Garaje + Edificio Estación de tren Almacén Tumba @@ -960,7 +950,6 @@ Trabajador del metal Pintor Fotógrafo - Tienda de cámaras Fontanero Serrería Zapatero @@ -1757,6 +1746,7 @@ Frutería Tienda de comestibles Peluquería + Ferretería Tienda de comida saludable Tienda de hierbas Audio de alta fidelidad @@ -1801,7 +1791,6 @@ Tienda agrícola Antigüedades Tienda de electrodomésticos - Tienda de arte Tienda de niños Tienda de bolsos @@ -1932,5 +1921,6 @@ Pista de esquí alpino Pista de esquí nórdico Pista para trineos + Edificio Lugar para eventos diff --git a/android/res/values-et/strings.xml b/android/res/values-et/strings.xml index d11f5d5ed5..e7e98aea0e 100644 --- a/android/res/values-et/strings.xml +++ b/android/res/values-et/strings.xml @@ -21,7 +21,7 @@ Miilid Minu asukoht - + Hiljem Otsi @@ -374,10 +374,6 @@ Kas soovid, et planeeriksime marsruudi Sinu praegusest asukohast? Järgmine - - Kell - - Kuni Lisa ajakava Kustuta ajakava @@ -722,9 +718,6 @@ OpenStreetMap kaardiandmed - Aadress/plokk - Aadress/plokk - Aadress/plokk Õhutee Tramm Tooltõstuk @@ -920,9 +913,8 @@ Rahvuspark Hoone Hoone - Hoone - Hoone Garaaž + Hoone Rongijaam Ladu Haud @@ -943,7 +935,6 @@ Metallitööline Maaler Fotograaf - Kaamerapood Santehnik Saeveski Kingsepp @@ -1828,7 +1819,6 @@ Põllumajanduspood Antikvariaat Tehnikapood - Kunstipood Lastekaubad Kotipood @@ -1959,5 +1949,6 @@ Algajasõbralik laskumine Murdmaa suusarada Kelgurada + Hoone Ürituste toimumiskoht diff --git a/android/res/values-eu/strings.xml b/android/res/values-eu/strings.xml index 0ca6d8c317..9bdda2d9ef 100644 --- a/android/res/values-eu/strings.xml +++ b/android/res/values-eu/strings.xml @@ -9,19 +9,19 @@ Utzi - Ezabatu + Kendu Deskargatu mapak Errore bat gertatu da deskargatzean, hasi berriro Deskargatzen… - Kilometro + Kilometroak Milia - Nire kokapena - + Nire posizioa + Geroago Bilatu @@ -30,47 +30,39 @@ Ezin da kokapen-zerbitzuetara sartu. Mesedez, aktibatu ezarpenetan. - Erakutsi mapan + Mapan erakutsi - Deskargak huts egin du + Errore bat deskargatzean Saiatu berriro - Organic Maps-i buruz - - Denontzat doan, maitasunez egina - - • Ez iragarkirik, ez jarraipenik, ez datu-bilketarik + Organic Maps buruz • Bateria aurrezten du, ez du atzeko planoko daturik erabiltzen - - • Azkarra, minimalista, zaborrik gabe - - Kode irekiko aplikazioa zaleek eta boluntarioek sortutakoa. Konexio ezarpenak Itxi - Aplikazioak hardwarez azeleratutako OpenGL behar du. Zoritxarrez, zure gailua ez da onartzen. + Aplikazioak hardware-azeleratutako OpenGL behar du. Zoritxarrez, zure gailua ez da onartzen. Deskargatu Mesedez, deskonektatu USB kablea edo sartu SD memoria Organic Maps erabiltzeko Mesedez, egin lekua SD memorian/USB biltegian aplikazioa erabiltzeko - Hasi baino lehen, utzi mundu-mapa orokor bat zure gailuan deskargatzen.\nDatuen %s beharrezkoa da. + Hasi baino lehen, utzi mundu-mapa orokor bat zure gailura deskargatzeko.\nDatuen %s beharrezkoa da. Joan mapara %s deskargatzen. Orain mapara\n joan zaitezke. %s deskargatu? - %s eguneratu? + %s eguneratzeko? Pausa Jarraitu - %s deskargak huts egin du + %s deskargatu huts egin du - Gehitu zerrenda berri bat + Gehitu talde berri bat - Markagailuaren kolorea + Markatzailearen kolorea - Markagailuen zerrendaren izena + Markatzaile taldearen izena Markagailuak @@ -78,35 +70,23 @@ Izena - Helbidea + Norabidea Zerrenda Ezarpenak - Mapak gordetzeko tokia + Mapak gordetzeko Hautatu mapak non deskargatu behar diren - Deskargatutako mapak - - Barne biltegiratze pribatua - - Barne biltegiratze partekatua - - SD txartela - - Kanpoko biltegiratze partekatua - - %2$s-tik %1$s libre + Mapak Mapak mugitu? - - Ezin izan dira mapak mugitu Honek minutu batzuk iraun ditzake.\n Itxaron mesedez… - Neurketa unitateak + Neurketa-unitateak Aukeratu mila eta kilometroen artean @@ -114,11 +94,11 @@ Non jan - Janari-denda + Janariak Garraioa - Gasolindegia + Erregai-geltokia Aparkalekua @@ -132,7 +112,7 @@ Kutxazain automatikoa - Gaueko giroa + Gaueko bizitza Familiako jarduerak @@ -142,7 +122,7 @@ Ospitalea - Komuna + Komunak Posta bulegoa @@ -156,16 +136,16 @@ Karabanak - Oharrak + Notak - Organic Maps markagailuak zurekin partekatu dira - Kaixo!\nNire markagailuak Organic Maps aplikazioan erantsi ditut. Mesedez, ireki itzazu Organic Maps instalatuta baduzu. Edo, ez baduzu, deskargatu aplikazioa zure iOS edo Android gailurako esteka hau jarraituz: https://omaps.app/get?kmz\n\nGozatu bidaiatzen Organic Maps-ekin! + Organic Maps markatzaileak zurekin partekatu dira + Kaixo!\nNire markatzaileak Mapak organikoak aplikaziotik erantsi ditut. Mesedez, ireki itzazu Organic Maps instalatuta baduzu. Edo, ez baduzu, deskargatu aplikazioa zure iOS edo Android gailurako esteka hau jarraituz: https://omaps.app/get?kmz\n\nGozatu bidaiatzen Organic Maps-ekin! - Markagailuak kargatzen + Markatzaileak kargatzen - Markagailuak behar bezala kargatu dira! Mapan edo markagailuak kudeatzeko pantailan aurki ditzakezu. + Gogokoak behar bezala kargatu dira! Mapan edo kudeatu gogokoak pantailan aurki ditzakezu. - Ezin izan dira markagailuak kargatu. Fitxategia hondatuta edo akastuna izan daiteke. + Ezin izan da gogokoak kargatu. Fitxategia hondatuta edo akastuna izan daiteke. Editatu @@ -175,17 +155,17 @@ Mapak deskargatzen ari dira. - Ikusi nire uneko kokapena Organic Maps-en! %1$s edo %2$s Ez al duzu lineaz kanpoko maparik? Deskargatu hemendik: https://omaps.app/get + Ikusi nire uneko kokapena Organic Maps-en! %1$s edo %2$s Ez al duzu lineaz kanpoko maparik? Deskargatu hemen: https://omaps.app/get - Begiratu nire markagailua Organic Maps mapan! + Begiratu nire markatzailea Map organikoak mapan! - Ikusi nire uneko kokapena Organic Maps mapan! + Ikusi nire uneko kokapena mapan Organic Maps-en! Kaixo:\n\nOrain hemen nago: %1$s. Egin klik esteka honetan %2$s edo %3$s honetan mapan ikusteko.\n\nEskerrik asko. Partekatu - Posta elektronikoa + Email Arbelean kopiatu da: %1$s @@ -195,17 +175,17 @@ Ziur jarraitu nahi duzula? - Arrastoak + Ibilbideak Luzera Partekatu nire kokapena - Ezarpen orokorrak + Doikuntza orokorrak Informazioa Nabigazioa Zoom botoiak - Erakutsi mapan + Pantailan bistaratzea Gaueko modua @@ -219,7 +199,7 @@ 3D eraikinak - 3D eraikinak desgaituta daude energia aurrezteko moduan + 3D eraikinak itzalita daude energia aurrezteko moduan Ahots argibideak @@ -228,18 +208,14 @@ Ez dago erabilgarri Zoom automatikoa Desaktibatuta - ordu 1 + 1 ordu 2 ordu 6 ordu 12 ordu - egun 1 + 1 egun Ikusi mapan - - Menua Webgunea - - Albisteak Iruzkinak @@ -247,21 +223,21 @@ Laguntza - Ohiko galderak + Maiz galderak Dohaintza eman - Proiektuari laguntza eman + Proiektuari laguntza ematea - Egile eskubideak + Copyright - Errore baten berri eman + Errore bat dago Eguneratu guztiak - Utzi guztiak + Guztiak bertan behera utzi - Deskargatuta + Alta Ilaran Nigandik gertu @@ -270,27 +246,27 @@ Deskargatu guztiak Deskargatzen: - Mapa ezabatzeko, gelditu nabigazioa. + Mapa kentzeko, utzi nabigazioa. - Eskualde bakarreko mapa batean guztiz bilduta dauden arrastoak soilik sor daitezke. + Eskualde bakarreko mapa batean guztiz bilduta dauden ibilbideak soilik sor daitezke. Deskargatu mapa Saiatu berriro - Ezabatu mapa + Mapa ezabatu Eguneratu mapa Google Play Zerbitzuak - Erabili Google Play zerbitzuak zure uneko kokapena zehazteko + Erabili Google Play zerbitzuak zure uneko kokapena lortzeko - Deskargatu zure arrastoaren mapa guztiak + Deskargatu zure ibilbidearen mapa guztiak - Arrasto bat sortzeko beharrezkoa da helmugako kokapenaren mapa guztiak deskargatzea eta eguneratzea. + Ibilbide bat sortzeko beharrezkoa da helmugako kokapenaren mapa guztiak deskargatu eta eguneratzea. - Leku nahikorik ez + Leku nahikoa ez Mesedez, aktibatu kokapen zerbitzuak Gorde @@ -317,11 +293,11 @@ Urdin argia - Ziana + Zian Berde urdinxka - Lima + Karea Laranja iluna @@ -330,28 +306,28 @@ Gris urdinxka - Arrastoa jarraitzean, kontuan izan: - — Bidearen egoera, zirkulazio arauek eta bide seinaleek lehentasuna dute beti nabigazio-iradokizunen gainetik; - — Mapa zehazgabea izan daiteke eta helmugara iristeko biderik onena ez den ibilbide bat iradoki dezake; - — Iradokitako ibilbideak gomendio gisa soilik hartu behar dira; + Ibilbidea jarraitzean, kontuan izan: + — Ibilbideen baldintzek, zirkulazio arauek eta bide seinaleek lehentasuna dute beti nabigazio-iradokizunen gainetik; + — Mapa zehaztugabea izan daiteke eta helmugara iristeko biderik onena ez den ibilbide bat iradoki dezake; + — Iradokitako ibilbideak gomendio gisa soilik ulertu behar dira; — Kontuz ibili muga-eremuak dituzten ibilbideetan: gure aplikazioak sortutako ibilbideek batzuetan herrialdeen mugak zeharkatu ditzakete baimendu gabeko tokietan; Egon adi eta seguru errepideetan! Egiaztatu GPS seinalea Ezin da ibilbidea sortu. Ezin izan dira uneko GPS koordenatuak identifikatu. - Egiaztatu GPS seinalea. WiFi konexioa aktibatuz gero, zure kokapenaren zehaztasuna hobetuko da. + Egiaztatu GPS seinalea. Wi-Fi konexioa aktibatuz gero, zure kokapenaren zehaztasuna hobetuko da. Aktibatu kokapen zerbitzuak - Ezin dira GPS koordenatuak aurkitu. Aktibatu kokapen zerbitzuak arrastoa kalkulatzeko. + Ezin dira GPS koordenatuak aurkitu. Aktibatu kokapen zerbitzuak ibilbidea kalkulatzeko. Ezin da ibilbiderik aurkitu Ezin da ibilbidea sortu. Ezarri zure abiapuntua edo helmuga. Ezarri abiapuntua Ibilbidea ez da sortu. Abiapuntua ezin izan da aurkitu. - Hautatu errepide batetik gertuko abiapuntua. - Zehaztu helmuga + Hautatu errepide batetik gertu abiapuntua. + Helmuga ezarri Ibilbidea ez da sortu. Ezin izan da helmuga aurkitu. Hautatu helmuga puntu bat errepide batetik gertu. - Ezin izan da tarteko puntua kokatu. - Mesedez, zehaztu tarteko puntua. + Ezin izan da tarteko geralekua kokatu. + Mesedez, egokitu tarteko geldialdia. Sistemaren errorea Ibilbidea ezin izan da sortu aplikazioaren errore baten ondorioz. Saiatu berriro @@ -366,14 +342,14 @@ Ezkutatu - Iristeko unea: %s + Iritsiera: %s Kategoriak - Historiala + Grabatu Barkatu, ez dut ezer aurkitu. - Saiatu bilaketa-irizpideak aldatzen. - Bilaketa historia + Mesedez, saiatu beste kontsulta bat. + Bilaketa-historia Ikusi azken bilaketak. - Garbitu bilaketa historia + Ezabatu bilaketa-historia Zure kokapena Hasi Hemendik @@ -381,11 +357,7 @@ Nabigazioa zure uneko kokapenetik soilik dago erabilgarri. Zure uneko kokapenetik ibilbide bat antolatzea nahi duzu? - Hurrengoa - - etatik - - Etara + Jarraian Gehitu ordutegia Ezabatu ordutegia @@ -393,88 +365,85 @@ Ireki Itxita Gehitu ixteko ordutegia - Irekitzeko ordutegia + Ordutegiak Modu aurreratua Modu erraza Ixteko orduak - Adibide balioak - Konpondu akatsa + Adibide-balioak + Akats zuzena Kokapena Mesedez, deskribatu arazoa xehetasunez, OpenStreetMap komunitateak akatsa konpondu dezan. - Edo zuk zeuk egin hemen https://www.openstreetmap.org/ helbidean + Edo egin ezazu zeure burua https://www.openstreetmap.org/ helbidean Bidali Arazoa Tokia ez da existitzen - Mantentze lanetarako itxita + Mantentze-lanetarako itxita Toki bikoiztua Deskarga automatikoa Egunero 24/7 Gaur atseden eguna - Itxita + Egun librea Gaur - %s barru irekiko da - %s barru itxiko da + %s barru irekitzen da + %s barru ixten da Itxita Editatu ordutegia Ez al duzu OpenStreetMap konturik? - Eman izena OpenStreetMap-en + Eman izena OpenStreetMap Saioa hasi Hasi saioa OpenStreetMap-en Pasahitza - Pasahitza ahaztu duzu? + Pasahitza ahaztu al duzu? Saioa itxi Editatu tokia Gehitu hizkuntza bat Kalea - Etxeko zenbakia + Etxe zenbakia Xehetasunak Gehitu kale bat - Sartu kalearen izena - Aukeratu hizkuntza bat - Aukeratu kale bat + Sartu kale-izena + Hizkuntza bat aukeratu + Kale bat aukeratu Posta kodea Sukaldea Aukeratu sukaldea Posta elektronikoa edo erabiltzailea - Gehitu telefonoa Solairua Maparen aldaketa guztiak maparekin batera ezabatuko dira. - Eguneratu mapak + Mapak deskargatu automatikoki Ibilbide bat sortzeko, beharrezkoa da mapa guztiak eguneratzea eta ibilbidea berriro planifikatzea. - Bilatu mapa + Bilatu mapan Mesedez, egiaztatu ezarpenak eta ziurtatu zure gailua Internetera konektatuta dagoela. - Leku nahikorik ez + Leku nahikoa ez Ezabatu beharrezkoak ez diren datuak Saioa hasteko errorea. Egiaztatutako aldaketak Arrastatu mapa objektuaren kokapen zuzena hautatzeko. - Editatzen - Gehitzen + Editatu + Gehitu Tokiaren izena Kategoria Arazoaren deskribapen zehatza Beste arazo bat - Gehitu aktibitatea + Negozioa gehitu Hemen ezin da objekturik jarri - - OpenStreetMap-eko datu kartografikoak %s-tik aurrera. OSM mapen Wikipedia bezalakoa da, non mundu osoko erabiltzaile guztientzat lekuak gehitu edo edita ditzakezun - Hasi saioa OpenStreetMapen beste erabiltzaileek zuk egindako aldaketak ikus ditzaten. + Hasi saioa beste erabiltzaileek zuk egindako aldaketak ikus ditzaten. %1$d/%2$d Deskargatu sare mugikorreko konexioarekin? - Oso garestia izan daiteke roaming plan batzuekin edo datu-ibiltaritzarekin. - Sartu etxeko zenbaki baliozkoa + Oso garestia izan daiteke plan batzuekin edo datu-ibiltaritzarekin. + Sartu etxe-zenbaki zuzena Solairu kopurua (gehienez %d) - Solairu kopurua ez da %d-tik gorakoa izan behar + Landare kopurua ez da %detik gorakoa izan behar Posta kodea - Sartu baliozko posta-kodea + Mesedez, idatzi posta-kode zuzena Toki ezezaguna Bidali oharra OSM editoreei @@ -487,39 +456,36 @@ Zure uneko kokapena detektatzen jarraitu nahi duzu? - Uneko kokapena ezezaguna da. Agian eraikin batean edo tunel batean zaudelako. + Uneko kokapena ezezaguna da. Eraikin batean edo tunel batean egon daiteke. Jarraitu Gelditu m km km/h - mi + ni - oin + oina mph h min Deskribapena - Gehiago - Deitu - Editatu markagailua + Gainera + Deitzeko + Editatu laster-marka Iruzkina… Tokiko aldaketa guztiak berrezarri nahi dituzu? Berreskuratu Gehitutako tokia ezabatu? - Ezabatu + Kendu Tokia ez da existitzen - - Zehaztu tokia ezabatzeko arrazoia - Idatzi baliozko telefono zenbaki bat - Sartu baliozko web helbide bat + Mesedez, idatzi telefono-zenbaki zuzena + Mesedez, sartu baliozko web-helbide bat Sartu baliozko posta elektroniko bat - Idatzi baliozko Facebook-eko web helbide, kontu edo orri izena + Mesedez, idatzi baliozko Facebook-eko web-helbide, kontu edo orri-izena Sartu baliozko Instagram kontuaren izena edo web helbidea - Sartu baliozko Twitter erabiltzaile izena edo web helbide bat - Sartu baliozko web helbide bat edo VK kontuaren izena - Sartu baliozko web helbidea edo LINEko IDa + Sartu baliozko Twitter erabiltzaile-izena edo web-helbide bat + Mesedez, idatzi baliozko web helbide bat edo VK kontuaren izena Gehitu toki bat mapan Erabiltzaile guztiei bidali nahi diezu? @@ -527,104 +493,88 @@ Ziurtatu ez duzula datu pertsonalik sartu. OpenStreetMap editoreek aldaketak egiaztatuko dituzte eta zurekin harremanetan jarriko dira zalantzaren bat izanez gero. - Organic Maps lineaz kanpoko mapa aplikazio doako eta irekia da. Iragarkirik ez. Ez dago jarraipenik. Mapan errore bat ikusten baduzu, konpondu OpenStreetMap-en. Proiektua zaleek sortu dute haien aisialdian, beraz, zure iritzia eta laguntza behar dugu. + Organic Maps lineaz kanpoko mapa aplikazio doako eta irekia da. Iragarkirik ez. Ez dago jarraipenik. Mapan errore bat ikusten baduzu, konpondu OpenStreetMap-en. Proiektua zaleek sortu dute gure aisialdian, beraz, zure iritzia eta laguntza behar dugu. - Onartu + Onartzeko - Ukatu + Gainbehera Internet mugikorra erabili informazio zehatza bistaratzeko? - Erabili beti + Beti erabili Gaur bakarrik Ez erabili gaur Internet mugikorra Internet mugikorra behar da tokiei buruzko informazio zehatza bistaratzeko, hala nola argazkiak, prezioak eta iritziak. - Ez erabili inoiz - Galdetu beti + Inoiz erabili + Beti galdetu Trafiko datuak bistaratzeko, mapak eguneratu behar dira. - Handitu letra tamaina mapan - Eguneratu Organic Maps + Handitu letra-tamaina mapan + Mesedez, eguneratu Organic Maps Trafiko datuak ez daude eskuragarri Historia gaitu Iritzi orokorra - Martxan - Itzalita - TTS sistema erabiltzen dugu ahots argibideetarako. Android gailu askok Google TTS erabiltzen dute. Google Play-tik deskargatu edo egunera dezakezu (https://play.google.com/store/apps/details?idu003dcom.google.android.tts) + Ekin. + Itzali + TTS sistema erabiltzen dugu ahots-argibideetarako. Android gailu askok Google TTS erabiltzen dute. Google Play-tik deskargatu edo egunera dezakezu (https://play.google.com/store/apps/details?idu003dcom.google.android.tts) Zenbait hizkuntzatan, beste ahots-sintetizadore bat edo hizkuntza-pakete gehigarri bat instalatu behar duzu aplikazio-dendatik (Google Play, Galaxy Store, App Gallery, FDroid). Ireki gailua Ezarpenak > Hizkuntza eta sarrera > Hizkera > Hizketarako testurako aukerak. Hemen ahots-sintesiaren ezarpenak kudea ditzakezu (adibidez, hizkuntza pakete bat deskargatu, konexiorik gabe erabiltzeko) edo testu-hizketarako beste motor bat hauta dezakezu. Informazio gehiago lortzeko, ikusi gida hau. Latinezko transliterazioa Irakurri gehiago - Irten - Gehitu abiapuntu bat ibilbide bat antolatzeko - Gehitu helmuga bat ibilbide bat antolatzeko - Irten + Irteera + Bilatu ibilbide-planaren iturria + Bilatu ibilbide-planaren helmuga + Utzi Kendu - Gehitu geldiunea + Gehitu stop Biltegiratze sarbidearen arazoa - Kanpoko biltegiratzea ez dago erabilgarri; Baliteke SD txartela kendu edo hondatuta egotea, edo fitxategi sistema irakurtzeko soilik izatea. Mesedez, begiratu edo idatzi iezaguzu support\@organicmaps.app helbidera + Kanpoko biltegiratzea ez dago erabilgarri; Baliteke SD txartela kendu edo hondatuta egotea, edo fitxategi-sistema irakurtzeko soilik izatea. Mesedez, begiratu edo idatzi iezaguzu support\@organicmaps.app helbidera Emulatu kaltetutako biltegiratzea Sarrera - Mesedez, idatzi baliozko izen bat + Mesedez, idatzi izen zuzena Zerrendak Ezkutatu guztiak - Erakutsi guztiak + Erakutsi dena Sortu zerrenda berria - Inportatu markagailuak + Inportatu laster-markak Ezin izan da partekatu aplikazioaren errore baten ondorioz Partekatzeak huts egin du Ezin da partekatu zerrenda hutsik Izena ezin da hutsik egon - Idatzi zerrendaren izena + Mesedez, idatzi zerrendaren izena Zerrenda berria Izen hau dagoeneko hartua da - Aukeratu beste izen bat + Mesedez, aukeratu beste izen bat Itxaron mesedez… Telefono zenbakia OpenStreetMap profila - - fitxategi %d aurkitu da. Elkarrizketaren ondoren ikusiko duzu. - %d fitxategi aurkitu dira. Elkarrizketaren ondoren ikusiko dituzu. - Ez dago Interneteko konexiorik - - objektu %d - %d objektu - - - toki %d - %d toki - - - arrasto %d - %d arrasto - Jarraipen ezarpenak - Akatsen txostena + Gertakarien txostena Zure datuak Organic Maps-en esperientzia hobetzeko erabil ditzakegu. Aldaketak aplikazioa berrabiarazi ondoren jarriko dira indarrean. - Pribatutasun politika + Pribatutasun-politika Erabilera baldintzak Trafikoa Metroa - Mapako geruzak + Mapa geruzak Metroaren mapa ez dago erabilgarri Zerrenda hau hutsik dago - Markagailu bat gehitzeko, ukitu mapako toki bat eta, ondoren, ukitu izarraren ikonoa - …gehiago - Esportatu fitxategia - Zerrendaren ezarpenak - Ezabatu zerrenda + Pin bat gehitzeko, ukitu mapako toki bat eta, ondoren, ukitu izarraren ikonoa + …gehi + Esportatu fitxategi gisa + Zerrenda konfiguratu + Zerrenda ezabatu Sarbide publikoa - Sarbide mugatua + Sarbide pribatua Gehitu deskribapen bat (testua edo html) Pribatua Abiadura kamerak - Automatikoa + Kotxea Beti Inoiz ez Tokiaren deskribapena @@ -634,20 +584,20 @@ Energia aurrezteko modua aktibatuta badago, aplikazioak energia kontsumitzen duten funtzioak itzaliko ditu, telefonoaren uneko kargaren arabera. Inoiz ez Automatikoa - Energia aurrezpen handiena - Aukera hau diagnostiko helburua duten erregistro ekintzetarako gaituta dago. Honek gure taldeari aplikazioarekin arazoak identifikatzen laguntzen dio. Gaitu aukera Organic Maps laguntzari eskatuta soilik. - Sarean editatzen - Bideratzeko aukerak + Energia-aurrezpen handiena + Aukera hau diagnostiko-helburuetarako erregistro-ekintzetarako gaituta dago. Honek gure taldeari aplikazioarekin arazoak identifikatzen laguntzen dio. Gaitu aukera Organic Maps laguntzari eskatuta soilik. + Sarean editatzen da + Birbidali ezarpenak Ibilbide guztietan saihestu Ordainpeko errepideak Asfaltatu gabeko errepideak Ferry pasabideak Autobideak - Ezin da ibilbidea proposatu - Zoritxarrez, ezin izan dugu aukeratutako aukerekin ibilbiderik proposatu. Aldatu ezarpenak eta saiatu berriro - Zehaztu saihestu beharreko bideak - Bideratze aukerak gaituta - Ordainpeko errepidea + Ezin da ibilbiderik eraiki + Zoritxarrez, ezin izan dugu aukeratutako aukerekin ibilbiderik egin. Aldatu ezarpenak eta saiatu berriro + Pertsonalizatu saihesbidearen ibilbidea + Birbidaltze ezarpena aktibatuta dago + Bidesaria Asfaltatu gabeko errepidea Ferry zeharkaldia Saihestu ordainpeko errepideak @@ -658,20 +608,20 @@ Ez - bai + Bai - ez - Ados + Ez + Ok - Ordenatu… + Agindu… - Ordenatu markagailuak + Ordenatu laster-markak Lehenetsia Motaren arabera - Distantziaren arabera + Distantziaz Dataren arabera Duela aste bat @@ -682,62 +632,49 @@ Beste batzuk - Janariak + Janari Toki interesgarriak Museoak Parkeak - Igerilekua + Igeriketa Mendiak Animaliak Hotelak Eraikinak Dirua Dendak - Aparkalekuak - Gasolindegiak + Aparkaleku + Erregai-geltokia Medikuntza Bilatu zerrendan - Erlijio guneak + Erlijio-guneak Hautatu zerrenda - Metroko nabigazioa oraindik ez dago erabilgarri eskualde honetan - Ez da aurkitu metroko ibilbiderik + Metro-nabigazioa oraindik ez dago erabilgarri eskualde honetan + Ez da aurkitu metroko ibilbidea Aukeratu metrotik hurbilen dagoen ibilbidearen hasiera edo amaiera puntua - Sestra kurbak - Sestra kurbak erabiltzeko, eguneratu edo deskargatu nahi duzun eremuko mapa + Altuerak + Erliebe-altuera erabiltzeko, eguneratu edo deskargatu nahi duzun eremuko mapa Erliebearen altitudea oraindik ez dago eskuragarri eskualde honetan - Maldan gora - Maldan behera + Igoera + Gainbehera Gutxieneko altuera Gehieneko altuera Zailtasuna Distantzia: - Denbora: - Handitu mapa sestra kurbak ikusteko + Hutsunea: + Handitu mapa isolineak ikusteko Deskargatu munduko mapa - Ezin da karpeta sortu eta fitxategiak mugitu barneko gailuaren memorian edo sd txartelan - - Diskoaren akatsa - Konexio arazoa Deskonektatu USB kablea Utzi pantailari lo egiten Gaituta dagoenean, pantailak lo egin ahal izango du jarduerarik gabe egon ondoren. - - Erakutsi pantaila blokeatuan - - Gaituta dagoenean, ez duzu gailua desblokeatu beharrik aplikazioa abian dagoen bitartean. - Maparen datuak OpenStreetMap-etik - - https://organicmaps.app/eu/ + Maparen datuak OpenStreetMap-en - Helbidea/Blokea - Helbidea/Blokea - Helbidea/Blokea Aire Garraioa Teleferikoa Teleaulkia @@ -928,9 +865,8 @@ Parke Nazionala Eraikin Eraikin - Eraikin - Eraikin Garajea + Eraikin Tren geltokian Denda Hilobia @@ -951,7 +887,6 @@ Metalgintzako langilea Margolaria Argazkilaria - Kamera Denda Iturgina Zerrategi Zapataria @@ -1725,7 +1660,6 @@ Nekazaritza denda Antigoalekoak Etxetresna elektrikoen denda - Arte Denda Haurrentzako denda Poltsen Denda @@ -1823,5 +1757,6 @@ Ezinduentzako partzialki hornitua Ezinduentzako ekipatuta ez dago Ezinduentzako hornitua + Eraikin Ekitaldien Lekua diff --git a/android/res/values-fa/strings.xml b/android/res/values-fa/strings.xml index ae9f0345f5..f398eca797 100644 --- a/android/res/values-fa/strings.xml +++ b/android/res/values-fa/strings.xml @@ -24,7 +24,7 @@ مایل مکان من - + بعداً جست‌وجو @@ -358,10 +358,6 @@ آیا می خواهید یک مسیر را از موقعیت فعلیتان برنامه ریزی کنیم؟ بعدی - - از ساعت - - الی اضافه کردن برنامه ریزی حذف کردن برنامه ریزی @@ -688,9 +684,6 @@ https://wiki.openstreetmap.org/wiki/Fa:About_OpenStreetMap - آدرس/بلاک - آدرس/بلاک - آدرس/بلاک فرودگاه فرودگاه پد فرود بالگرد @@ -826,9 +819,8 @@ پارک ملی ساختمان ساختمان - ساختمان - ساختمان گاراژ + ساختمان ایستگاه قطار ﺮﺒﻗ صنعت‌گری @@ -848,7 +840,6 @@ اهن کار نقاش عکاس - فروشگاه دوربین لوله کش کارخانه چوب‌بری کفاش @@ -1526,7 +1517,6 @@ مغازه کشاورزی ﺕﺎﺟ ﻪﻘﯿﺘﻋ فروشگاه لوازم خانگی - ﺮﻨﻫ ﻩﺎﮕﺷﻭﺮﻓ ﻥﺎﮐﺩﻮﮐ ﻩﺎﮕﺷﻭﺮﻓ ﻒﯿﮐ ﻩﺎﮕﺷﻭﺮﻓ @@ -1626,5 +1616,6 @@ دسترسی محدود با صندلی چرخ دار بدون دسترسی با صندلی چرخ دار دسترسی کامل با صندلی چرخ دار + ساختما محل برگزاری رویدادها diff --git a/android/res/values-fi/strings.xml b/android/res/values-fi/strings.xml index 563d84a874..2d6b4c42e7 100644 --- a/android/res/values-fi/strings.xml +++ b/android/res/values-fi/strings.xml @@ -23,7 +23,7 @@ Mailit Sijaintini - + Myöhemmin Haku @@ -369,10 +369,6 @@ Haluatko valita vaihtoehtoisen reitin? Seuraava - - alkaen - - Asti Lisää aikataulu Poista aikataulu @@ -697,9 +693,6 @@ OpenStreetMapin karttatiedot - Osoite/lohko - Osoite/lohko - Osoite/lohko Köysirata Kabiinihissi Tuolihissi @@ -877,9 +870,8 @@ Kansallispuisto Rakennus Rakennus - Rakennus - Rakennus Autotalli + Rakennus Rautatieasema Varasto Hauta @@ -900,7 +892,6 @@ Metallimies Maalari Valokuvaaja - Kamerakauppa Putkimies Saha Suutari @@ -936,6 +927,7 @@ Filippiiniläinen keittiö Hieno ravintola Kala + Fish & chips Ranskalainen keittiö Uppopaistettu Georgialainen keittiö @@ -1620,6 +1612,7 @@ Vihanneskauppias Päivittäistavarakauppa Kampaamo + Rautakauppa Terveysruokakauppa Yrttikauppa HiFi Audio @@ -1664,7 +1657,6 @@ Maatalouskauppa Antiikkia Kodinkoneet kauppa - Taidekauppa Lasten kauppa Laukkukauppa @@ -1787,5 +1779,6 @@ Laskettelurinne Latu Kelkkarata + Rakennus Tapahtumapaikka diff --git a/android/res/values-fr/strings.xml b/android/res/values-fr/strings.xml index a124126c44..c8f736ff7b 100644 --- a/android/res/values-fr/strings.xml +++ b/android/res/values-fr/strings.xml @@ -23,7 +23,7 @@ Miles Ma position - + Plus tard Recherche @@ -386,10 +386,6 @@ Souhaitez-vous que nous planifiions un itinéraire à partir de votre emplacement actuel ? Suivant - - De - - À Ajouter un horaire d\'ouverture Supprimer un horaire d\'ouverture @@ -734,15 +730,10 @@ Lorsqu\'il est activé, vous n\'avez pas besoin de déverrouiller votre appareil à chaque fois que l\'application est en fonctionnement. Données cartographiques d\'OpenStreetMap - - https://organicmaps.app/fr/ https://wiki.openstreetmap.org/wiki/FR:À_propos_d’OpenStreetMap - Adresse/Bloc - Adresse/Bloc - Adresse/Bloc Transport par câble aérien Téléphérique Télésiège @@ -922,7 +913,6 @@ Bâtiment Bâtiment Bâtiment - Bâtiment Gare Entrepôt Tombe @@ -943,7 +933,6 @@ Métallo Peintre Photographe - Boutique d\'appareils photo Plombier Scierie Cordonnier @@ -979,6 +968,7 @@ Cuisine philippine Restaurant gastronomique Poisson + Fish and chips Cuisine française Friterie Cuisine géorgienne @@ -1771,7 +1761,6 @@ Magasin d\'agriculture Antiquités Magasin d\'électroménager - Boutique d\'art Magasin de puériculture Magasin de sacs @@ -1884,5 +1873,6 @@ Piste de ski alpin Piste de ski de fond Piste de luge + Bâtiment Lieu des événements diff --git a/android/res/values-hu/strings.xml b/android/res/values-hu/strings.xml index 576204b86d..0db704221a 100644 --- a/android/res/values-hu/strings.xml +++ b/android/res/values-hu/strings.xml @@ -21,21 +21,21 @@ Mérföld Saját helyzet - + Később Keresés Keresés a térképen - Jelenleg az eszköz vagy alkalmazás helymeghatározási szolgáltatásai le vannak tiltva. Kérjük, engedélyezze őket a Beállításokban. + Ezen az eszközön jelenleg minden helyzetmeghatározó szolgáltatás ki van kapcsolva. Kérjük kapcsolja be ezeket a Beállítások között. Megjelenítés a térképen Letöltése sikertelen Újrapróbálkozás - Az Organic Mapsről + A Organic Maps programról Ingyenes mindenkinek, szeretettel készítve @@ -46,7 +46,7 @@ • Gyors, minimalista, nincs szemét A rajongók és az önkéntesek által létrehozott nyílt forráskódú alkalmazás. - Helymeghatározási beállítások + Kapcsolat beállítások Bezár Hardware-s gyorsítású OpenGL szükséges. Sajnos az Ön eszköze nem támogatott. Letöltés @@ -84,25 +84,13 @@ Beállítások - Térképek mentési helye + Térképek mentése ide: Válassza ki, hogy hova töltsük le a térképeket - Letöltött térképek - - Belső privát tárhely - - Belső közös tárhely - - SD-kártya - - Külső közös tárhely - - %1$s szabad %2$s-ból + Térképek - Áthelyezzük a térképfájlokat? - - Hiba történt a térképfájlok áthelyezése közben + Áthelyezzük a térképeket? Ez több percig is eltarthat.\nKérjük várjon… @@ -114,9 +102,9 @@ Hol lehet enni valamit - Élelmiszerek + Termékek - Tömegközlekedés + Közlekedés Benzinkút @@ -126,7 +114,7 @@ Szálloda - Látnivalók + Látnivaló Szórakozás @@ -134,7 +122,7 @@ Éjjeli élet - Családi kiruccanás + Pihenés a gyerekekkel Bank @@ -198,8 +186,6 @@ Hossz Helyzetem megosztása - - Információk Navigáció Nagyítás/kicsinyítés gombok Mutassa a kijelzőn @@ -234,7 +220,7 @@ Honlap - Újdonságok + Hírek Visszajelzés @@ -242,7 +228,7 @@ Segítség - Gyakran Ismételt Kérdések + Kérdések és válaszok Adományozni @@ -288,7 +274,7 @@ Nincs elég hely Kérjük kapcsolja be a helyzetmeghatározó szolgáltatást - Mentés + Simpan Az ön leírásai (sima szöveg vagy html) létrehoz @@ -371,16 +357,12 @@ A keresési előzmények törlése Az Ön helyzete Indítás - Kiindulópont - Célpont + Innen + Ide A navigáció csak a jelenlegi helyzetéből érhető el. Szeretne útvonaltervet készíttetni a jelenlegi pozíciójától? Következő - - tól - - Ig Időrend felvitele Időrend törlése @@ -521,7 +503,7 @@ Ma nem használhatja Mobil Internet - Mobilinternet szükséges a térképfrissítési értesítésekhez, valamint a helyszínekre és könyvjelzőkre vonatkozó részletes információk megjelenítéséhez. + Mobil internetre van szükség helyszínekre vonatkozó részletes információ, mint például fotók, árak és szemlék megjelenítéséhez. Soha se használja Mindig kérdezze meg Forgalmi adatok megjelenítéséhez a térképeket frissíteni kell. @@ -551,13 +533,11 @@ Sérült tároló emulálása Bejárat Kérjük adja meg a helyes nevet - Listák + List Összes elrejtése Összes megjelenítése Új lista létrehozása - - Könyvjelzők importálása Nem lehet megosztani alkalmazáshiba miatt Megosztási hiba Üres lista nem osztható meg @@ -604,7 +584,7 @@ Leírás hozzáadása (szöveg vagy html) Privát Sebességmérő kamerák - Automatikus + Autó Mindig Soha A hely ismertetése @@ -682,7 +662,7 @@ Metró navigáció ebben a régióban még nem érhető el Metró útvonal nem található Válasszon indulási vagy végpontot közelebb a metróállomáshoz - Domborzat + Terep A topográfiai réteg aktiválásához és használatához kérjük frissítse vagy töltse le az adott terület térképét Ezen a területen a topográfiai réteg még nem elérhető Felemelkedés @@ -702,15 +682,10 @@ Ha engedélyezve van, nem kell minden alkalommal feloldanod a telefonod, amíg az alkalmazás fut. Térképadatok az OpenStreetMapből - - https://organicmaps.app/hu/ https://wiki.openstreetmap.org/wiki/Hu:Névjegy - Cím/blokk - Cím/blokk - Cím/blokk Felvonóállomás Repülőtér Repülőtér @@ -847,9 +822,8 @@ Nemzeti park Épület Épület - Épület - Épület Garázs + Épület Vonatmegálló Sír Kézművesség @@ -869,7 +843,6 @@ Lakatos Festő Fényképész - Fényképezőgép bolt Vízvezeték-szerelő Fűrészmalom Cipész @@ -1264,7 +1237,7 @@ Vizes terület Láp Mocsár - Iroda + Hivatal Vállalati iroda Ingatlanügynök Állami iroda @@ -1633,7 +1606,6 @@ Mezőgazdasági bolt Régiségek Készülék bolt - Művészeti Bolt Bababolt Táskák bolt @@ -1733,5 +1705,6 @@ Korlátozottan akadálymentesített Nem akadálymentesített Teljesen akadálymentesített + Épület Rendezvények helyszíne diff --git a/android/res/values-in/strings.xml b/android/res/values-in/strings.xml index 3636229d5c..5bb6e53aa6 100644 --- a/android/res/values-in/strings.xml +++ b/android/res/values-in/strings.xml @@ -23,7 +23,7 @@ Mil Posisi Saya - + Nanti Cari @@ -365,10 +365,6 @@ Apakah Anda ingin kami merencanakan sebuah rute dari lokasi Anda saat ini? Berikut - - Dari pukul - - Hingga Tambah Jadwal Hapus Jadwal @@ -684,13 +680,8 @@ Jika diaktifkan, layar akan diizinkan untuk tidur setelah beberapa saat tidak aktif. Data peta dari OpenStreetMap - - https://organicmaps.app/id/ - Alamat/Blokir - Alamat/Blokir - Alamat/Blokir Stasiun kereta gantung Bandar udara Bandar udara @@ -822,9 +813,8 @@ Taman Nasional Gedung Gedung - Gedung - Gedung Garasi + Gedung Rel kereta api Kuburan Kerajinan @@ -844,7 +834,6 @@ Tukang besi Tukang cat Juru foto - Toko Kamera Tukang pipa Penggergajian kayu Tukang sepatu @@ -1563,6 +1552,7 @@ Penjual sayuran Kebutuhan sehari-hari Penata rambut + Toko perangkat keras Toko Makanan Kesehatan Toko jamu Audio HI FI @@ -1605,7 +1595,6 @@ Toko pertanian Barang antik Toko peralatan - Toko Seni Toko anak-anak Toko Tas @@ -1703,5 +1692,6 @@ Akses kursi roda terbatas Tidak ada akses kursi roda Akses penuh kursi roda + Gedung Tempat acara diff --git a/android/res/values-it/strings.xml b/android/res/values-it/strings.xml index 0e30424534..00adf3850b 100644 --- a/android/res/values-it/strings.xml +++ b/android/res/values-it/strings.xml @@ -21,7 +21,7 @@ Miglia La mia posizione - + Più tardi Cerca @@ -368,10 +368,6 @@ Vuoi che pianifichiamo un percorso dalla tua posizione attuale? Avanti - - Dalle - - Alle Aggiungi pianificazione Elimina pianificazione @@ -716,9 +712,6 @@ https://wiki.openstreetmap.org/wiki/IT:About - Indirizzo/Blocco - Indirizzo/Blocco - Indirizzo/Blocco Impianto a fune Teleferica Seggiovia @@ -902,9 +895,8 @@ Parco nazionale Edificio Edificio - Edificio - Edificio Garage + Edificio Stazione ferroviaria Magazzino Tomba @@ -925,7 +917,6 @@ Metalmeccanico Imbianchino Fotografo - Negozio di macchine fotografiche Idraulico Segheria Calzolaio @@ -961,6 +952,7 @@ Cucina filippina Ristorante elegante Pesce + Fish and chips Cucina francese Fritture Cucina georgiana @@ -1284,7 +1276,7 @@ Parco Parco Parco - Parco + Parco privato Tavolo da picnic Campo sportivo Campo giochi @@ -1702,6 +1694,7 @@ Fruttivendolo Drogheria Parrucchiera + Ferramenta Negozio di alimenti naturali Negozio di erbe Audio ad alta fedeltà @@ -1746,7 +1739,6 @@ Negozio agricolo Oggetti d\'antiquariato Negozio di elettrodomestici - Negozio d\'arte Negozio per neonati Negozio di borse @@ -1861,5 +1853,6 @@ Non accessibile ai disabili Accessibile ai disabili Pista per slitte + Edificio Sede degli eventi diff --git a/android/res/values-iw/strings.xml b/android/res/values-iw/strings.xml index 577925f004..ba964148b3 100644 --- a/android/res/values-iw/strings.xml +++ b/android/res/values-iw/strings.xml @@ -21,7 +21,7 @@ מ\"ב מיקומי - + מאוחר יותר חפש במפה @@ -227,10 +227,6 @@ על מנת להתחיל לחפש וליצור מסלולים, הורידו בבקשה את המפה ולא תזדקקו יותר לחיבור לאינטרנט. בחרו את המפה - - משעה - - עד יום ולילה OpenStreetMap-ל סנכיה קוֹמָה @@ -251,9 +247,6 @@ OpenStreetMap-מ הפמ ינותנ - כתובת/חסימה - כתובת/חסימה - כתובת/חסימה תחנת טעינה לאופניים תחנת טעינה למכוניות גנילואב םלוא @@ -295,7 +288,6 @@ עובד מתכת צייר צלם - חנות מצלמות שרברב מנסרה סנדלר @@ -633,7 +625,6 @@ חנות חקלאית תוֹקיתִעַ חנות מוצרי חשמל - תויונמוא תונח םידליל תונח םיקית תונח diff --git a/android/res/values-ja/strings.xml b/android/res/values-ja/strings.xml index 28561b2cda..bfeef200d1 100644 --- a/android/res/values-ja/strings.xml +++ b/android/res/values-ja/strings.xml @@ -21,7 +21,7 @@ マイル 現在地 - + 次の機会に 検索 @@ -361,10 +361,6 @@ 現在位置からのルートを作成しますか? 次へ - - から - - まで スケジュール追加 スケジュール削除 @@ -683,9 +679,6 @@ https://wiki.openstreetmap.org/wiki/JA:参加する - アドレス/ブロック - アドレス/ブロック - アドレス/ブロック 索道 ロープウェイ チェアリフト @@ -855,9 +848,8 @@ 国立公園 建物 建物 - 建物 - 建物 車庫 + 建物 鉄道駅 工房 @@ -877,7 +869,6 @@ 金属工 塗装工 写真家 - カメラショップ 配管工 製材所 靴修理 @@ -1742,7 +1733,6 @@ 農産物直売所 骨董品 家電店 - アートショップ キッズストア バッグストア @@ -1858,5 +1848,6 @@ 車椅子でのアクセス制限 車椅子でのアクセスなし 車椅子でのアクセスあり + 建物 イベント会場 diff --git a/android/res/values-ko/strings.xml b/android/res/values-ko/strings.xml index 4e6aa3f771..e0927dadf6 100644 --- a/android/res/values-ko/strings.xml +++ b/android/res/values-ko/strings.xml @@ -21,7 +21,7 @@ 마일 나의 위치 - + 나중에 검색하기 @@ -363,10 +363,6 @@ 현재 위치에서 경로를 계획하시겠습니까? 다음 - - 부터 - - 까지 스케줄 추가 스케줄 삭제 @@ -685,9 +681,6 @@ https://wiki.openstreetmap.org/wiki/Ko:OpenStreetMap_소개 - 주소/블록 - 주소/블록 - 주소/블록 케이블카 역 공항 공항 @@ -825,9 +818,8 @@ 국립 공원 건물 건물 - 건물 - 건물 차고 + 건물 기차역 무덤 공예 @@ -847,7 +839,6 @@ 금속공 페인트공 사진작가 - 카메라 샵 배관공 제재소 구두수선 @@ -1568,6 +1559,7 @@ 청과상 \"식료품점\" 이발사 + 철물점 \"건강식품 가게\" 허브 가게 하이파이 오디오 @@ -1612,7 +1604,6 @@ 농산물 가게 고물 가전제품 매장 - 아트샵 어린이 가게 가방 판매점 @@ -1715,5 +1706,6 @@ 휠체어 접근 제한 휠체어 접근 금지 휠체어 접근 가능 + 건물 행사장 diff --git a/android/res/values-mr/strings.xml b/android/res/values-mr/strings.xml index 9f9140ef38..5d3de9fe11 100644 --- a/android/res/values-mr/strings.xml +++ b/android/res/values-mr/strings.xml @@ -21,7 +21,7 @@ मैल माझे स्थान - + नंतर शोधा @@ -356,10 +356,6 @@ तुमच्या वर्तमान स्थानापासून मार्ग नियोजन करायचे का? पुढे - - ते - - पर्यंत वेळापत्रक जोडा वेळापत्रक मिटवा @@ -693,13 +689,8 @@ लॉक पटलावर (स्क्रीनवर) दाखवा चालू असल्यास, ऍप चालू असताना प्रत्येक वेळी तुम्हाला तुमचे उपकरण अनलॉक करण्याची आवश्यकता नाही. - - https://organicmaps.app/mr/ - पत्ता/ब्लॉक - पत्ता/ब्लॉक - पत्ता/ब्लॉक हवाई मार्ग हवाई मार्ग हवाई मार्ग @@ -871,9 +862,8 @@ राष्ट्रीय उद्यान इमारत इमारत - इमारत - इमारत गराज + इमारत रेल्वे स्थानक वखार हस्तकला @@ -891,7 +881,6 @@ धातू कामगार चित्रकार छायाचित्रकार - कॅमेरा शॉप नळकामगार सुमेल चांभार @@ -1627,6 +1616,7 @@ भेटवस्तूंचे दुकान भाजीवाला न्हावी + हार्डवेअर दुकान औषधी वनस्पतींचे दुकान हायफाय ऑडिओ हार्डवेअर दुकान @@ -1746,5 +1736,6 @@ चाकखुर्चीसाठी मर्यादित प्रवेश चाकखुर्चीसाठी प्रवेश नाही चाकखुर्चीसाठी प्रवेश + इमारत कार्यक्रमाचे ठिकाण diff --git a/android/res/values-nb/strings.xml b/android/res/values-nb/strings.xml index 51cf842a63..3121dc780b 100644 --- a/android/res/values-nb/strings.xml +++ b/android/res/values-nb/strings.xml @@ -23,7 +23,7 @@ Miles Min posisjon - + Senere Søk @@ -384,10 +384,6 @@ Vil du vi skal planlegge en rute fra din nåværende posisjon? Neste - - Fra - - Til Legg til tidsrom Slett tidsrom @@ -732,9 +728,6 @@ Kartdata fra OpenStreetMap - Adresse/blokk - Adresse/blokk - Adresse/blokk Taubane Pendeltaubane Stolheis @@ -876,9 +869,8 @@ Nasjonalpark Bygning Bygning - Bygning - Bygning Garasje + Bygning Togstasjon Grav Håndverk @@ -898,7 +890,6 @@ Metallarbeider Maler Fotograf - Kamerabutikk Rørlegger Sagbruk Skoreparasjon @@ -1625,6 +1616,7 @@ Frukt- og grønnsakshandler Dagligvare Frisør + Jernvareforretning Helsekostbutikk Urtebutikk HiFi lyd @@ -1669,7 +1661,6 @@ Landbruksbutikk Antikviteter Hvitevarebutikk - Kunstbutikk Barnebutikk Veskerbutikk @@ -1771,5 +1762,6 @@ Begrenset tilgang for rullestol Ingen tilgang for rullestol Full tilgang for rullestol + Bygning Arrangementssted diff --git a/android/res/values-nl/strings.xml b/android/res/values-nl/strings.xml index 5399ff0945..7ebfdd4dac 100644 --- a/android/res/values-nl/strings.xml +++ b/android/res/values-nl/strings.xml @@ -21,7 +21,7 @@ Mijlen Mijn locatie - + Later Zoeken @@ -380,10 +380,6 @@ Wilt u dat wij een route plannen vanaf uw huidige locatie? Volgende - - Van - - Tot Schema toevoegen Schema verwijderen @@ -726,15 +722,10 @@ Indien ingeschakeld, hoeft het scherm niet te worden ontgrendeld wanneer de app actief is. Kaartgegevens van OpenStreetMap - - https://organicmaps.app/nl/ https://wiki.openstreetmap.org/wiki/NL:Wat_is_OpenStreetMap%3F - Adres/blok - Adres/blok - Adres/blok Kabelbaan Cabinelift Stoeltjeslift @@ -819,8 +810,8 @@ Parkeeringang Parkeerplek Parkeerplek - Parkeerplek - Parkeerplek + Privé parkeerplek + Ondergrondse parkeerplek Invalide parkeerplaats Betaalautomaat Apotheek @@ -927,9 +918,8 @@ Nationaal park Gebouw Gebouw - Gebouw - Gebouw Garage + Gebouw Treinstation Magazijn Graf @@ -950,7 +940,6 @@ Metaalarbeider Schilder Fotograaf - Camerawinkel Loodgieter Zagerij Schoenmaker @@ -986,6 +975,7 @@ Filipijns Gastronomisch Vis + Fish and chips Frans Frituur Georgisch @@ -1318,9 +1308,9 @@ Jachthaven Natuurreservaat Park - Park + Ontoegankelijk park Park - Park + Privé park Picknicktafel Sportveld Speeltuin @@ -1831,7 +1821,6 @@ Agrarische winkel Antiekhandel Apparaten winkel - Kunstwinkel Babyspullenwinkel Tassenwinkel @@ -1961,5 +1950,6 @@ Beginnersafdaling Langlaufroute Sleebaan + Gebouw Evenementenlocatie diff --git a/android/res/values-pl/strings.xml b/android/res/values-pl/strings.xml index 344909e675..96e4651aae 100644 --- a/android/res/values-pl/strings.xml +++ b/android/res/values-pl/strings.xml @@ -21,7 +21,7 @@ Mile Moje położenie - + Później Wyszukaj @@ -384,10 +384,6 @@ Czy chcesz, byśmy zaplanowali trasę z Twojej bieżącej lokalizacji? Dalej - - Od - - Do Dodaj harmonogram Usuń harmonogram @@ -731,15 +727,10 @@ Po włączeniu tej funkcji nie będziesz musieć odblokowywać urządzenia za każdym razem, gdy aplikacja jest uruchomiona. Dane mapy z OpenStreetMap - - https://organicmaps.app/pl/ https://wiki.openstreetmap.org/wiki/Pl:Wstęp - Adres/Blok - Adres/Blok - Adres/Blok Transport linowy Kolej linowa Wyciąg krzesełkowy @@ -916,10 +907,9 @@ Granica przedmieść Park narodowy Budynek - Budynek - Budynek - Budynek + Adres Garaż + Część budynku Dworzec kolejowy Mogiła Rzemiosło @@ -939,7 +929,6 @@ Ślusarz, obrabiacz metalu Malarz Studio fotograficzne - Sklep z aparatami Hydraulik Tartak Szewc @@ -1756,7 +1745,6 @@ Sklep rolniczy Antyki Sklep AGD - Sklep artystyczny Sklep dla dzieci Sklep z torbami @@ -1860,5 +1848,6 @@ Częściowo wyposażono dla osób niepełnosprawnych Nie wyposażono dla osób niepełnosprawnych Wyposażono dla osób niepełnosprawnych + Część budynku Miejsce wydarzeń diff --git a/android/res/values-pt-rBR/strings.xml b/android/res/values-pt-rBR/strings.xml index c508066d4f..5da75d3582 100644 --- a/android/res/values-pt-rBR/strings.xml +++ b/android/res/values-pt-rBR/strings.xml @@ -21,7 +21,7 @@ Milhas Minha posição - + Mais tarde Buscar @@ -712,13 +712,8 @@ Quando ativado, você não precisará debloquear seu dispositivo toda vez que o aplicativo estiver funcionando Dados do mapa do OpenStreetMap - - https://organicmaps.app/pt-BR/ - Endereço/Bloco - Endereço/Bloco - Endereço/Bloco Transporte aéreo Teleférico Telecadeira @@ -898,9 +893,8 @@ Parque nacional Edifício Edifício - Edifício - Edifício Garagem + Edifício Estação de trem Armazém Túmulo @@ -909,7 +903,6 @@ Aquecimento, Ventilação e Ar Condicionado Chaveiro Serralheiro - Loja de câmeras Encanador Vinícola Cozinha africana @@ -1686,7 +1679,6 @@ Loja agrícola Antiguidades Loja de eletrodomésticos - Loja de artes Loja infantil Loja de bolsas @@ -1795,5 +1787,6 @@ Esqui alpino iniciante Pista tipo nórdico Pista para trenós + Parte de edifício Local do evento diff --git a/android/res/values-pt/strings.xml b/android/res/values-pt/strings.xml index 82a613bfe3..e05eb9c164 100644 --- a/android/res/values-pt/strings.xml +++ b/android/res/values-pt/strings.xml @@ -21,7 +21,7 @@ Milhas A minha posição - + Mais tarde Pesquisar @@ -370,10 +370,6 @@ Quer planear uma rota a partir da sua localização atual? Próxima - - Das - - Às Adicionar horário Eliminar horário @@ -701,9 +697,6 @@ https://wiki.openstreetmap.org/wiki/Pt:Sobre_o_OpenStreetMap - Endereço/Bloco - Endereço/Bloco - Endereço/Bloco Transporte aéreo Teleférico Telecadeira @@ -791,8 +784,8 @@ Entrada do estacionamento Lugar de estacionamento Lugar de estacionamento - Lugar de estacionamento - Lugar de estacionamento + Lugar de estacionamento privado + Lugar de estacionamento subterrâneo Estacionamento para deficientes Terminal de pagamento Farmácia @@ -884,9 +877,8 @@ Parque nacional Edifício Edifício - Edifício - Edifício Garagem + Edifício Estação de comboios Armazém Túmulo @@ -907,7 +899,6 @@ Serralheiro metálico Pintor Fotógrafo - Loja de câmeras Picheleiro Serraria Sapateiro @@ -1279,7 +1270,7 @@ Parque urbano Parque urbano Parque urbano - Parque urbano + Parque urbano privado Mesa de piqueniques Campo de desportos Parque infantil @@ -1780,7 +1771,6 @@ Loja agrícola Antiguidades Loja de eletrodomésticos - Loja de artes Loja infantil Loja de bolsas @@ -1911,5 +1901,6 @@ Esqui alpino iniciante Pista tipo nórdico Pista para trenós + Parte de edifício Local dos eventos diff --git a/android/res/values-ro/strings.xml b/android/res/values-ro/strings.xml index 60a42d3abf..a9a3359d8e 100644 --- a/android/res/values-ro/strings.xml +++ b/android/res/values-ro/strings.xml @@ -21,7 +21,7 @@ Mile Poziția mea - + Mai târziu Caută @@ -370,10 +370,6 @@ Vrei să planifici un traseu din poziția ta actuală? Următorul - - De la - - La Adaugă planificare Elimină planificarea @@ -712,9 +708,6 @@ Date cartografice din OpenStreetMap - Adresă/Bloc - Adresă/Bloc - Adresă/Bloc Stație de teleferic Aeroport Aeroport @@ -843,9 +836,8 @@ Parcul național Clădire Clădire - Clădire - Clădire Garaj + Clădire Feroviar Mormânt Meșteșuguri @@ -865,7 +857,6 @@ Metalurgist Pictor Fotograf - Magazin de aparate foto Instalator Fabrica de cherestea Reparații încălțăminte @@ -901,6 +892,7 @@ Bucătărie filipinez Restaurant elegant Pește + Restaurant fish and chips Bucătărie francez Prăjit Bucătărie georgian @@ -1627,7 +1619,6 @@ Magazin agricol Antichități Magazin de electrocasnice - Magazin de arte Magazin pentru copii Magazin de genti @@ -1722,5 +1713,6 @@ Parțial utilat pentru invalizi Nu este utilat pentru invalizi Utilat pentru invalizi + Clădire Locul de desfășurare a evenimentelor diff --git a/android/res/values-ru/strings.xml b/android/res/values-ru/strings.xml index 949e302a0c..995824f070 100644 --- a/android/res/values-ru/strings.xml +++ b/android/res/values-ru/strings.xml @@ -24,7 +24,7 @@ Мили Мое местоположение - + Не сейчас Поиск @@ -387,10 +387,6 @@ Хотите перестроить маршрут от вашего местоположения? Далее - - С - - До Добавить расписание Удалить расписание @@ -758,9 +754,6 @@ Продолжить в авто - Адрес/Блок - Адрес/Блок - Адрес/Блок Канатная дорога Канатная дорога Кресельная канатная дорога @@ -956,9 +949,8 @@ Национальный парк Здание Здание - Здание - Здание Гараж + Здание Ж/д вокзал Склад Могила @@ -979,7 +971,6 @@ Металлоконструкции Маляр Фотограф - Магазин фотоаппаратов Сантехник Лесопилка Ремонт обуви @@ -1868,7 +1859,6 @@ Сельскохозяйственный магазин Антиквариат Магазин бытовой техники - Художественный магазин Детский магазин Магазин сумок @@ -1999,5 +1989,6 @@ Горнолыжная трасса для новичков Лыжня Трасса для саней + Здание Место проведения мероприятий diff --git a/android/res/values-sk/strings.xml b/android/res/values-sk/strings.xml index c6c0cff2de..5889e3a5a8 100644 --- a/android/res/values-sk/strings.xml +++ b/android/res/values-sk/strings.xml @@ -21,7 +21,7 @@ Míle Moja poloha - + Neskôr Hľadať @@ -361,10 +361,6 @@ Doriți să vă planificăm o rută având ca punct de pornire locația actuală? Nasledujúca - - Od - - Do Pridať rozvrh Zmazať rozvrh @@ -683,9 +679,6 @@ Mapové údaje z OpenStreetMap - Adresa/blok - Adresa/blok - Adresa/blok Lanovka Letisko Letisko @@ -821,9 +814,8 @@ Národný park Budova Budova - Budova - Budova Garáž + Budova Železničná stanica Hrob Remeslo @@ -843,7 +835,6 @@ Kovorobotník Maliar natierač Fotograf - Obchod s fotoaparátmi Klampiarstvo Píla Oprava obuvy @@ -1561,6 +1552,7 @@ Zelovoc Potraviny Kaderníctvo + Železiarstvo Obchod so zdravou výživou Obchod s bylinkami HiFi audio @@ -1603,7 +1595,6 @@ Poľnohospodársky obchod Starožitnosti Obchod so spotrebičmi - Obchod s umením Obchod pre deti Obchod s taškami @@ -1699,5 +1690,6 @@ Obmedzený bezbariérový prístup Žiaden bezbariérový prístup Úplný bezbariérový prístup + Budova Miesto konania podujatí diff --git a/android/res/values-sv/strings.xml b/android/res/values-sv/strings.xml index f8b6514cc3..28e1b190f3 100644 --- a/android/res/values-sv/strings.xml +++ b/android/res/values-sv/strings.xml @@ -21,7 +21,7 @@ Mil Min position - + Senare Sök @@ -361,10 +361,6 @@ Vill du att vi planerar en färdväg från din nuvarande plats? Nästa - - Från - - Till Lägg till schema Ta bort schema @@ -680,13 +676,8 @@ När den är aktiverad får skärmen sova efter en period av inaktivitet. Kartdata från OpenStreetMap - - https://organicmaps.app/sv/ - Adress/Block - Adress/Block - Adress/Block Linbanestation Flygplats Flygplats @@ -822,7 +813,6 @@ Byggnad Byggnad Byggnad - Byggnad Tågstation Grav Hantverk @@ -842,7 +832,6 @@ Metallarbetare Målare Fotograf - Kameraaffär Vvs-montör Sågverk Skomakare @@ -1602,7 +1591,6 @@ Lantbruksbutik Antikviteter Vitvarubutik - Konstaffär Barnbutik Väskor butik @@ -1700,5 +1688,6 @@ Delvis utrustad för handikappade Ej utrustad för handikappade Utrustad för handikappade + Byggnad Evenemangslokal diff --git a/android/res/values-sw/strings.xml b/android/res/values-sw/strings.xml index 950ea0abe0..cac4d5adf7 100644 --- a/android/res/values-sw/strings.xml +++ b/android/res/values-sw/strings.xml @@ -242,9 +242,6 @@ Data ya ramani kutoka OpenStreetMap - Anwani/Zuia - Anwani/Zuia - Anwani/Zuia Kistawishi Kituo cha sanaa Cykelreparationsstation @@ -296,7 +293,6 @@ Mfanyikazi wa chuma Mchoraji Mpiga picha - Duka la Kamera Fundi bomba Sumel Mtengeneza viatu @@ -677,7 +673,6 @@ Duka la kilimo Mambo ya kale Duka la vifaa - Duka la Sanaa Duka la watoto Hifadhi ya Mifuko diff --git a/android/res/values-th/strings.xml b/android/res/values-th/strings.xml index aa45f7d75d..eab70b3123 100644 --- a/android/res/values-th/strings.xml +++ b/android/res/values-th/strings.xml @@ -23,7 +23,7 @@ ไมล์ ตำแหน่งของฉัน - + ภายหลัง ค้นหา @@ -365,10 +365,6 @@ คุณต้องการให้เราาวงแผนเส้นทางจากสถานที่ตั้งปัจจุบันของคุณหรือไม่? ถัดไป - - เวลา - - เพิ่มวัน ลบวัน @@ -685,9 +681,6 @@ ข้อมูลแผนที่จาก OpenStreetMap - ที่อยู่/บล็อค - ที่อยู่/บล็อค - ที่อยู่/บล็อค สถานีกระเช้าลอยฟ้า สนามบิน สนามบิน @@ -826,9 +819,8 @@ อุทยานแห่งชาติ อาคาร อาคาร - อาคาร - อาคาร อาคารจอดรถ + อาคาร สถานีรถไฟ หลุมฝังศพ งานฝีมือ @@ -848,7 +840,6 @@ ช่างเหล็ก ช่างทาสี ช่างภาพ - ร้านกล้อง ช่างประปา ซูเมล ช่างซ่อมรองเท้า @@ -1613,7 +1604,6 @@ ร้านเกษตร ของเก่า ร้านเครื่องใช้ไฟฟ้า - ร้านศิลปะ ร้านขายของสำหรับเด็ก ร้านกระเป๋า @@ -1713,5 +1703,6 @@ พื้นที่จำกัดการใช้รถเข็นสำหรับผู้ป่วย/ผู้สูงอายุ พื้นที่ไม่สามารถใช้รถเข็นสำหรับผู้ป่วย/ผู้สูงอายุ พื้นใช้รถเข็นสำหรับผู้ป่วย/ผู้สูงอายุได้ + อาคาร สถานที่จัดงาน diff --git a/android/res/values-tr/strings.xml b/android/res/values-tr/strings.xml index 099905a867..754c79cf1b 100644 --- a/android/res/values-tr/strings.xml +++ b/android/res/values-tr/strings.xml @@ -23,7 +23,7 @@ Mil Konumum - + Daha sonra Ara @@ -384,10 +384,6 @@ Mevcut konumunuzdan bir rota planlamamızı ister misiniz? Sonraki - - Den itibaren - - A Plan Ekle Planı Sil @@ -739,9 +735,6 @@ https://wiki.openstreetmap.org/wiki/Tr:About - Adres/Blok - Adres/Blok - Adres/Blok Teleferik Teleferik Telesiyej @@ -932,9 +925,8 @@ Ulusal Park Bina Bina - Bina - Bina Garaj + Bina Tren İstasyonu Depo Mezar @@ -955,7 +947,6 @@ Dökümcü Boyacı Fotoğraf Stüdyosu - Kamera Dükkanı Tesisatçı Kereste Fabrikası Ayakkabı Tamircisi @@ -1833,7 +1824,6 @@ Tarım dükkanı Antikalar Beyaz eşya dükkanı - Sanat Mağazası Çocuk mağazası Çanta Mağazası @@ -1964,5 +1954,6 @@ Yeni başlayanlar için kayak pisti İskandinav Kayak Pisti Kızak Pisti + Bina Etkinlik mekanı diff --git a/android/res/values-uk/strings.xml b/android/res/values-uk/strings.xml index d2b2c78974..fd0c24bfbf 100644 --- a/android/res/values-uk/strings.xml +++ b/android/res/values-uk/strings.xml @@ -24,7 +24,7 @@ Милі Моє місцезнаходження - + Не зараз Пошук @@ -380,10 +380,6 @@ Хочете спланувати маршрут із поточного місцезнаходження? Далі - - З - - До Додати розклад Видалити розклад @@ -715,15 +711,10 @@ Якщо ввімкнено, вам не потрібно щоразу розблоковувати пристрій під час роботи програми. Картографічні дані з OpenStreetMap - - https://organicmaps.app/uk/ https://wiki.openstreetmap.org/wiki/Uk:Про_проект - Адреса/блок - Адреса/блок - Адреса/блок Канатна дорога Канатна дорога Канатна дорога @@ -915,9 +906,8 @@ Національний парк Будівля Будівля - Будівля - Будівля Гараж + Будівля Залізничний вокзал Склад Могила @@ -938,7 +928,6 @@ Металоконструкції Маляр Фотограф - Магазин фотоапаратів Сантехнік Лісопильня Ремонт взуття @@ -1817,7 +1806,6 @@ Сільськогосподарський магазин Антикваріат Магазин побутової техніки - Магазин мистецтв Дитячий магазин Магазин сумок @@ -1948,5 +1936,6 @@ Гірськолижна траса для новеньких Лижня Траса для санок + Будівля Місце проведення подій diff --git a/android/res/values-vi/strings.xml b/android/res/values-vi/strings.xml index 36a998c8b8..8b2ccefe24 100644 --- a/android/res/values-vi/strings.xml +++ b/android/res/values-vi/strings.xml @@ -21,7 +21,7 @@ Dặm Vị trí của Tôi - + Để sau Tìm kiếm @@ -363,10 +363,6 @@ Bạn có muốn chúng tôi vạch đường từ vị trí hiện tại của bạn không? Tiếp theo - - Từ - - Đến Thêm lịch biểu Xóa lịch biểu @@ -684,9 +680,6 @@ Dữ liệu bản đồ từ OpenStreetMap - Địa chỉ/Khối - Địa chỉ/Khối - Địa chỉ/Khối Trạm Cáp Treo Sân bay Sân bay @@ -823,9 +816,8 @@ Công viên quốc gia Tòa nhà Tòa nhà - Tòa nhà - Tòa nhà Gara + Tòa nhà Đường tàu hỏa Phần mộ Thủ công @@ -845,7 +837,6 @@ Nhà kim khí Họa sỹ Thợ chụp ảnh - Cửa hàng máy ảnh Thợ đường ống Sumel Sửa giày @@ -1564,6 +1555,7 @@ Cửa hàng rau củ Cửa hàng tạp hóa Tiệm làm tóc + Cửa hàng phần cứng Cửa hàng thực phẩm sức khỏe Cửa hàng thảo mộc Âm thanh hifi @@ -1608,7 +1600,6 @@ Cửa hàng nông sản Đồ cổ Cửa hàng đồ gia dụng - Cửa hàng nghệ thuật Cửa hàng trẻ em Cửa hàng túi xách @@ -1710,5 +1701,6 @@ Được trang bị một phần cho người khuyết tật Không trang bị cho người khuyết tật Được trang bị cho người khuyết tật + Tòa nhà Địa điểm tổ chức sự kiện diff --git a/android/res/values-zh-rTW/strings.xml b/android/res/values-zh-rTW/strings.xml index dfa4ca334d..a73c8ead26 100644 --- a/android/res/values-zh-rTW/strings.xml +++ b/android/res/values-zh-rTW/strings.xml @@ -21,7 +21,7 @@ 英哩 我的位置 - + 稍後 搜尋 @@ -376,10 +376,6 @@ 你是否想要規劃目前位置的路線? 下一頁 - - - - 新增排程 刪除排程 @@ -705,9 +701,6 @@ 來自 OpenStreetMap 的地圖數據 - 地址/區塊 - 地址/區塊 - 地址/區塊 纜車要素 纜車 纜車要素 @@ -858,9 +851,8 @@ 國家公園 建築物 建築物 - 建築物 - 建築物 車庫 + 建築物 鐵道 墓穴 工藝作坊 @@ -880,7 +872,6 @@ 鐵工 油漆工 攝影師 - 相機店 水管工人 鋸木廠 修鞋工 @@ -1655,7 +1646,6 @@ 農產品店 古董 家電店 - 藝術商店 兒童商店 箱包店 @@ -1758,5 +1748,6 @@ 部分配備為殘疾人專用 未配備殘疾人專用 配備殘疾人專用 + 建築物 活動場所 diff --git a/android/res/values-zh/strings.xml b/android/res/values-zh/strings.xml index 96f4557dd3..e69423f2de 100644 --- a/android/res/values-zh/strings.xml +++ b/android/res/values-zh/strings.xml @@ -21,7 +21,7 @@ 英里 我的位置 - + 稍后 搜索 @@ -373,10 +373,6 @@ 你是否想要规划当前位置的路线? 下一页 - - - - 添加计划 删除计划 @@ -693,9 +689,6 @@ 地图数据来自OpenStreetMap - 地址/区块 - 地址/区块 - 地址/区块 缆车要素 缆车 登山吊椅 @@ -874,9 +867,8 @@ 国家公园 建筑物 建筑物 - 建筑物 - 建筑物 独立1车库 + 建筑物 火车站建筑 仓库 墓穴 @@ -897,7 +889,6 @@ 金属制造工 油漆匠 摄影棚 - 相机店 管道工 锯木厂 鞋匠 @@ -1744,7 +1735,6 @@ 农产品店 古董 家电店 - 艺术商店 儿童商店 箱包店 @@ -1857,5 +1847,6 @@ 部分配备为残疾人专用 未配备残疾人专用 配备残疾人专用 + 建筑部分 活动场所 diff --git a/android/res/values/strings-tts.xml b/android/res/values/strings-tts.xml index 2f066e4228..153b57188e 100644 --- a/android/res/values/strings-tts.xml +++ b/android/res/values/strings-tts.xml @@ -12,7 +12,7 @@ zh_TW, zh_MO and zh_HK correspond to zh-Hant. Otherwise we consider that this is zh-Hans. - TODO: Move language list to core, now sync manually with platform/languages.hpp + TODO: Move language list to core. languages should be added alphabetically in tts_language_names --> @@ -24,7 +24,6 @@ da de es - es-MX eu fr hr @@ -35,7 +34,6 @@ nb pl pt - pt-BR ro sk fi @@ -66,7 +64,6 @@ Dansk Deutsch Español - Español (México) Euskara Français Hrvatski @@ -77,7 +74,6 @@ Norsk Bokmål Polski Português - Português (Brasil) Română Slovenčina Suomi diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index becffeae7c..24610bf462 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -24,7 +24,7 @@ Miles My Position - + Later Search @@ -57,7 +57,7 @@ Please disconnect USB cable or insert memory card to use Organic Maps Please free up some space on the SD card/USB storage first in order to use the app - Before you start using the app, please download the general world map to your device.\nIt will use %s of storage. + Before you start using the app, allow us to download the general world map to your device.\nIt will use %s of storage. Go to Map Downloading %s. You can now\nproceed to the map. Download %s? @@ -69,7 +69,7 @@ %s download has failed - Add a New List + Add New List Bookmark Color @@ -89,7 +89,7 @@ Save maps to - Select the folder to download maps to. + Select the place where maps should be downloaded to Downloaded maps @@ -162,7 +162,7 @@ Notes Organic Maps bookmarks were shared with you - Hello!\n\nAttached are my bookmarks; please open them in Organic Maps. If you don\'t have it installed you can download it here: https://omaps.app/get?kmz\n\nEnjoy travelling with Organic Maps! + Hello!\n\nAttached are my bookmarks from Organic Maps app. Please open them if you have Organic Maps installed. Or, if you don\'t, download the app for your iOS or Android device by following this link: https://omaps.app/get?kmz\n\nEnjoy traveling with Organic Maps! Loading Bookmarks @@ -178,7 +178,7 @@ Map download is in progress now. - Check out my current location in Organic Maps! %1$s or %2$s Don\'t have offline maps? Download here: https://omaps.app/get + Hey, check out my current location in Organic Maps! %1$s or %2$s Don\'t have offline maps? Download here: https://omaps.app/get Hey, check out my pin in Organic Maps! @@ -222,7 +222,7 @@ 3D buildings - 3D buildings are disabled in power saving mode + 3D buildings are turned off in power saving mode Voice Instructions @@ -248,7 +248,7 @@ Telegram - [Matrix] + [matrix] Mastodon @@ -366,7 +366,7 @@ Unable to locate current GPS coordinates. Enable location services to calculate route. Unable to locate route Unable to create route. - Please adjust your starting point or destination. + Please adjust your starting point or your destination. Adjust starting point Route was not created. Unable to locate starting point. Please select a starting point closer to a road. @@ -395,7 +395,7 @@ Oops, no results found. Try changing your search criteria. Search History - View your recent searches. + View recent searches. Clear Search History Wikipedia @@ -405,14 +405,10 @@ Start Route from Route to - Navigation is only available from your current location. - Do you want to plan a route from your current location? + Navigation is available only from your current location. + Do you want us to plan a route from your current location? Next - - From - - To Add Schedule Delete Schedule @@ -427,14 +423,14 @@ Example Values Correct mistake Location - Please describe the problem in detail so that the OpenStreetMap community can fix it. + Please describe the problem in detail so that the OpenStreetMap community can fix the error. Or do it yourself at https://www.openstreetmap.org/ Send Issue - This place does not exist + The place does not exist Сlosed for maintenance - Duplicate place - Auto-download maps + Duplicated place + Auto-download Daily 24/7 @@ -447,7 +443,7 @@ Edit business hours Don\'t have an OpenStreetMap account? Register at OpenStreetMap - OpenStreetMap Login + Log In Login to OpenStreetMap Password Forgot your password? @@ -471,11 +467,11 @@ Email or username Add Phone Floor - All of your map edits will be deleted with the map. + All of your map edits will be deleted together with the map. Update Maps To create a route, you need to update all maps and then plan the route again. Find map - Please make sure your device is connected to the Internet. + Please check your settings and make sure your device is connected to the Internet. Not enough space Please delete any unnecessary data Login error. @@ -490,8 +486,8 @@ Add business No object can be located here - Cartographic data from OpenStreetMap as of %s. OSM is like Wikipedia for maps, where you can add and edit places for users around the world. - Log in to openstreetmap.org to publish your changes to the world. + Cartographic data from OpenStreetMap as of %s. OSM is like Wikipedia for maps, where you can add or edit places for all users around the world. + Log in to OpenStreetMap.org so other users can see the changes you have made. %1$d of %2$d Download over a cellular network connection? @@ -506,15 +502,15 @@ Unknown Place Send a note to OSM editors Detailed comment - Your suggested map changes will be sent to the OpenStreetMap community. Please describe any additional details that cannot be edited in Organic Maps. + Your suggested map changes will be sent to the OpenStreetMap community. Describe any additional details that cannot be edited in Organic Maps. More about OpenStreetMap Owner You haven\'t downloaded any maps - Download maps to search and navigate offline. + Download maps to search for a location and use navigation offline. - Continue detecting your location? + Continue detecting your current location? - Current location is unknown. You may be in a building or tunnel. + Current location is unknown. Maybe you are in a building or in a tunnel. Continue Stop m @@ -543,16 +539,16 @@ Enter a valid web address Enter a valid email Enter a valid Facebook web address, account, or page name - Enter a valid Instagram username or web address - Enter a valid Twitter username or web address - Enter a valid VK username or web address - Enter a valid LINE ID or web address + Enter a valid Instagram web address or account name + Enter a valid Twitter web address or username + Enter a valid VK web address or account name + Enter a valid LINE web address or LINE ID Add a place to the map Do you want to send it to all users? - Make sure you did not enter any private or personal data. - OpenStreetMap editors will check the changes and contact you if they have any questions. + Make sure you did not enter any personal data. + OpenStreetMap editors will check the changes and get in contact with you if they have any questions. Organic Maps is a fast and free offline maps app without ads and tracking. Maps are based on crowd-sourced OpenStreetMap.org data, so you can fix mapping errors and add features there yourself. Organic Maps is an open-source project created by enthusiasts in their spare time. Your feedback and support are much appreciated! @@ -565,11 +561,11 @@ Do not Use Today Mobile Internet - Mobile internet is required for map update notifications and uploading edits. + Mobile internet is required for map update notifications and for displaying detailed information about places and bookmarks. Never Use Always Ask To display traffic data, maps must be updated. - Increase size for map labels + Increase font size on the map Please update Organic Maps Traffic data is not available @@ -581,7 +577,7 @@ We use system TTS for voice instructions. Many Android devices use Google TTS, you can download or update it from Google Play (https://play.google.com/store/apps/details?id=com.google.android.tts) For some languages, you will need to install a speech synthesizer or an additional language pack from the app store (Google Play, Galaxy Store, App Gallery, FDroid).\nOpen your device\'s settings → Language and input → Speech → Text to speech output.\nHere you can manage settings for speech synthesis (for example, download language pack for offline use) and select another text-to-speech engine. For more information please check this guide. - Transliteration into Latin alphabet + Transliteration into Latin Learn more Exit @@ -594,18 +590,18 @@ External storage is not accessible. The SD Card may have been removed, damaged, or the file system is read-only. Please, check your SD Card or contact us at support\@organicmaps.app Emulate bad storage Entrance - Please enter a correct name + Please, enter a correct name Lists Hide all Show all - Create a new list + Create new list Import bookmarks Unable to share due to an application error Sharing error Cannot share an empty list - The name can\'t be empty + The name couldn\'t be empty Please enter the list name New list This name is already taken @@ -633,7 +629,7 @@ Tracking settings Crash report - We may use your crash reports to improve Organic Maps. Changes will take effect after you restart the app. + We may use your data to improve Organic Maps experience. Changes will take effect after you restart the app. Privacy policy Terms of use Traffic @@ -648,7 +644,7 @@ Delete list Public access Limited access - Enter a description (text or html) + Type a description (text or html) Private Speed cameras Auto @@ -658,11 +654,11 @@ Map downloader Power saving mode - Try to reduce power usage at the expense of some functionality. + When automatic mode is selected the application starts to disable battery draining features depending on the current battery charge level Never - When battery is low - Always - Enable this option temporarily to record and manually send detailed diagnostic logs about your issue to us using \"Report a bug\" in the Help dialog. Logs may include location info. + Automatic + Maximum power saving + The option turns on logging for diagnostic purposes. It can be helpful for our team to troubleshoot issues with the app. Enable this option temporarily to record and send detailed logs about your issue to us. Online editing Routing options Avoid on every route @@ -671,7 +667,7 @@ Ferry crossings Motorways Unable to calculate route - A route could not be found. This may be caused by your routing options or incomplete OpenStreetMap data. Please change your routing options and retry. + Unfortunately, we couldn\'t find a route, probably due to the options you have chosen. Please change the settings and try again. Define roads to avoid Routing options enabled Toll road @@ -729,9 +725,9 @@ Subway navigation in this region is not available yet Subway route is not found Please choose a start or end point closer to a subway station - Contour Lines - Activating contour lines requires downloading map data for this area - Contour lines are not yet available in this area + Terrain + To activate and use the topographic layer please update or download the map of the area + The topographic layer is not yet available in this area Ascent Descent Min. altitude @@ -749,13 +745,13 @@ Connection failure Disconnect USB cable - Allow the screen to sleep + Allow screen to sleep - When enabled, the screen will be allowed to sleep after a period of inactivity. + When enabled the screen will be allowed to sleep after a period of inactivity. Show on the lock screen - When enabled, the app will work on the lockscreen even when the device is locked. + When enabled, you don\'t need to unlock your device every time while the app is running. Map data from OpenStreetMap @@ -778,9 +774,6 @@ Continue in car - Address/Block - Address/Block - Address/Block Aerialway Cable Car Chair Lift @@ -798,7 +791,7 @@ Taxiway Terminal Amenity - Arts Center + Art Center ATM Bank Bar @@ -818,7 +811,7 @@ Casino Charging Station Bicycle Charging Station - Car Charging Station + Motorcar Charging Station Nursery Cinema Bowling Alley @@ -861,11 +854,11 @@ Private Parking Private Parking Private Parking - Park And Ride Parking + Parking Underground Parking - Parking Entrance - Parking Entrance - Parking Entrance + Parking entrance + Parking entrance + Parking entrance Parking Space Parking Space Parking Space @@ -874,15 +867,15 @@ Payment Terminal Pharmacy Place of Worship - Buddhist Temple + Temple Church - Hindu Temple + Temple Synagogue Mosque - Shinto Shrine - Taoist Temple + Shrine + Temple Police - Mailbox + Post Box Post Office Prison Pub @@ -892,7 +885,7 @@ Recycling Center Recycling Container Recycling Container - Batteries + Household Batteries Clothes Glass Bottles Paper @@ -904,7 +897,7 @@ Cans Shoes Green/Organic Waste - Cartons + Beverage Cartons Restaurant Holding Tank Dump Station School @@ -922,21 +915,21 @@ Condoms Dispenser Drinks Dispenser Food Dispenser - Newspaper Dispenser - Parking Meter + Newspapers Dispenser + Parking Tickets Ticket Machine Sweets Dispenser Excrement Bags Dispenser Parcel Locker - Fuel Pump + Fuel Dispenser Veterinary Doctor Trash Bin Dumpster Waste Transfer Station - Water Tank Refill Point + RV Water Point Barrier Block - Bollard + Pillar Border Control Chain City Wall @@ -976,9 +969,8 @@ National Park Building Building - Building - Building Garage + Building Train Station Warehouse Grave @@ -987,19 +979,18 @@ Blacksmith Craft Brewery Carpenter - Confectioner + Confectionery Electrician Electronics Repair Gardener Handicraft - HVAC Shop + HVAC Key Cutting Locksmith Metal Worker Painter Photographer - Camera Shop Plumber Sawmill Shoe Repair @@ -1065,7 +1056,7 @@ Mexican Moroccan Noodles - East Asian + Far Eastern Pancake Pasta Persian @@ -1101,13 +1092,13 @@ Main Entrance Medical Laboratory Physiotherapist - Alternative Medicine - Audiologist - Blood Donation Center - Optometrist - Podiatrist - Psychotherapist - Sample Collection Centre + Alternative medicine + Audiology + Blood donation center + Optometry + Podiatry + Psychotherapy + Sample collection Logopedics @@ -1118,7 +1109,7 @@ Bridle Path Tunnel - Dedicated Bus Road + Dedicated bus road Bus Stop Road Under Construction Cycle Path @@ -1130,7 +1121,7 @@ Elevator Foot Path Path - Pedestrian Area + Pedestrian Zone Pedestrian Bridge Path @@ -1173,7 +1164,7 @@ Tunnel Pedestrian Street - Pedestrian Area + Pedestrian Zone Pedestrian Bridge @@ -1189,8 +1180,8 @@ Tunnel Racetrack - Residential Street - Residential Street + Street + Street Bridge @@ -1273,7 +1264,7 @@ Path Pedestrian Street Primary Road - Residential Street + Street Secondary Road Service Road Tertiary Road @@ -1285,39 +1276,39 @@ highway-world_towns_level - Historic Object + Historic object Archaeological Site - Historic Battlefield + Battlefield Boundary Stone Castle - Roman Fort - Stronghold Castle - Fortified Church + Roman fort + Castle + Fortified church Fortress Hillfort Kremlin - Manor House + Manor house Palace - Japanese Castle - Stately Castle - City Gate + Japanese castle + Castle + City gate City Wall Fort Gallows Memorial - Memorial Cross - Commemorative Plaque + Memorial cross + Commemorative plaque Sculpture Statue Stolperstein - War Memorial + War memorial Monument Pillory - Historic Ruins + Ruins Ship Tomb - Wayside Cross - Wayside Shrine + Wayside cross + Wayside shrine hwtag hwtag-bidir_bicycle hwtag-onedir_bicycle @@ -1345,8 +1336,8 @@ Christian Cemetery Churchyard Commercial Area - Construction Area - Educational Facility + Construction + Educational Facilities Farm Farmland Farmyard @@ -1354,9 +1345,9 @@ Forest Coniferous Forest Deciduous Forest - Mixed-Leaf Forest + Mixed Forest Garages - Grass + Lawn Greenfield Greenhouse Industrial Area @@ -1367,10 +1358,10 @@ Quarry Railway Premises Recreation Ground - Reservoir + Water Residential Area Retail Area - Salt Pond + Pond Land Vineyard Leisure @@ -1387,11 +1378,11 @@ Marina Nature Reserve Park - Private Park + Park Park - Private Park + Park Picnic Table - Sport Pitch + Sports Ground Playground Recreation Ground Sauna @@ -1409,7 +1400,7 @@ Man Made Breakwater Cairn - Chimney + Factory Chimney Cutline Survey Point Flagpole @@ -1423,7 +1414,7 @@ Surveillance Camera Tower Communications Tower - Wastewater Treatment Plant + Wastewater treatment plant Water Tap Water Tower Water Well @@ -1438,10 +1429,10 @@ Bare Rock Bay Beach - Sandy Beach + Sand Beach Gravel Beach Cape - Cave Entrance + Cave Cliff Earth Bank Embankment @@ -1465,13 +1456,13 @@ Mountain Saddle Rock Scrub - Natural Spring + Spring Strait Tree Tree Row Vineyard Volcano - Water + Waterbody Wetland Bog Marsh @@ -1504,7 +1495,7 @@ Farm Hamlet Island - Islet + Island Isolated Dwelling Locality Neighbourhood @@ -1518,21 +1509,21 @@ Town Village Power - Power Generator + Generator Solar Generator Wind Generator - Gas Turbine Power Plant + Gas turbine Power Plant Hydroelectric Power Plant Power Line Underground Power Line Minor Power Line Power Plant Coal Power Plant - Gas Turbine Power Plant + Gas turbine Power Plant Hydroelectric Power Plant Solar Power Plant Wind Power Plant - Power Pole + Power Tower Power Station Substation Power Tower @@ -1549,11 +1540,11 @@ Abandoned Railway Tunnel Railway Construction Railway Crossing - Disused Railway + Disused railway Funicular Funicular Bridge Funicular Tunnel - Rail Halt + Train Station Level Crossing Light Rail Light Rail Bridge @@ -1580,118 +1571,118 @@ Spur Rail Bridge Spur Rail Tunnel Train Station - Light Rail Station - Monorail Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station + Train Station + Train Station + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway Underground Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station - Subway Station + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway + Subway Subway Line Subway Line Bridge Subway Line Tunnel @@ -1812,11 +1803,11 @@ Railway Yard Railway Yard Bridge Railway Yard Tunnel - Route + route Ferry Shuttle Train Shop - Liquor Shop + Liquor Store Bakery Bathroom Furnishings Beauty Shop @@ -1824,110 +1815,109 @@ Bicycle Shop Bookmaker Bookstore - Butcher - Cannabis Shop + Butcher’s + Cannabis Store Car Dealership - Car Parts Shop - Car Repair Workshop + Car Parts + Car Repair Shop Tyre Repair RV Dealership - Carpet Shop - Chemist + Carpets + Chemist Shop Chocolate Shop Clothes Shop - Coffee Shop + Coffee Store Computer Store - Candy Shop + Sweets Convenience Store - Copyshop - Cosmetics Shop - Curtain Shop - Delicatessen + Copy Shop + Cosmetics + Curtains + Delicatessen Shop Department Store - Home Improvement Store - Dry Cleaner - Electronics Shop + Hardware Store + Dry Cleaning + Electronics Erotic Shop Fabric Shop Farm Food Shop Fashion Accessories - Florist + Florist’s Funeral Directors Furniture Store - Garden Center + Garden Store Gas Store Gift Shop Greengrocer - Grocery Store + Grocery Hairdresser Hardware Store Health Food Shop - Herbalist - HiFi Audio Shop - Housewares Store - Jewelry Store + Herbs Store + HiFi Audio + Houseware + Jewelry Kiosk Kitchen Store Laundry Mall Massage Salon - Cell Phone Store + Cell Phones Money Lender Motorcycle Shop Motorcycle Repair Record Store - Musical Instrument Shop + Musical Instruments Newspaper Stand - Optician - Outdoor Equipment Shop + Optician’s + Outdoor Equipment Pickup Point - Pastry Shop + Pastry Pawnbroker Pet Store Pet Grooming Photo Shop - Fishmonger - Second Hand Shop - Shoe Shop - Sports Shop + Seafood Shop + Second Hand + Shoe Store + Sports Goods Stationery Shop Supermarket Tattoo Parlour - Tea Shop + Tea Store Ticket Shop Toy Store Travel Agency Tyre Shop Variety Store Video Shop - Video Game Shop + Video Games Shop Wine Shop Agricultural Shop - Antiques Shop - Appliance Shop - - Artwork Shop - Baby Goods Shop - Bag Shop - Bed Shop + Antiques + Appliances Shop + Arts Shop + Baby Goods + Bags Store + Beds Shop Boutique Charity Shop - Cheese Shop - Craft Supplies Store - Dairy Shop - Electrical Supplies Store + Cheese Store + Arts and Crafts + Dairy Products + Electrical Store Fishing Store - Interior Decorations Store + Interior Decorations Lottery Tickets - Medical Supplies Store - Nutrition Supplement Store - Paint Shop - Perfume Shop - Sewing Supplies Shop + Medical Supplies + Nutrition Supplements + Paints + Perfumery + Sewing Supplies Storage Rental - Smoke Shop - Trade Supplies - Watch Store + Tobacco + Trades Supplies + Watches Wholesale Store Sport American Football @@ -1936,7 +1926,7 @@ Australian Football Baseball Basketball - Beach Volleyball + Beach volleyball Bowls Chess Cricket @@ -1947,13 +1937,13 @@ Handball Various Sports - Scuba Diving Site + Scuba diving site Shooting Skateboarding Skiing Soccer Swimming - Table Tennis + Table tennis Tennis Court Volleyball Bowling @@ -1963,22 +1953,22 @@ Ice Hockey Field Hockey Badminton - Basque Pelota + Basque pelota Tourism - Alpine Lodging - Holiday Apartment + Mountains Lodging + Apartments Artwork - Architectural Artwork - Painting - Sculpture - Statue + Artwork + Artwork + Artwork + Artwork Attraction - Animal Enclosure + Animal enclosure Attraction - Campground + Camping RV Park Chalet - Art Gallery + Gallery Guest House Hostel Hotel @@ -2000,7 +1990,7 @@ Traffic Hump Waterway Canal - Canal Tunnel + Canal Dam Ditch Ditch @@ -2011,10 +2001,10 @@ River River River - Stream - Ephemeral Stream - Intermittent Stream - Stream + River + River + River + River Waterfall Weir Wheelchair @@ -2028,13 +2018,14 @@ T-bar Lift Piste Type Downhill Ski Run - Advanced Downhill Ski Run - Easy Downhill Ski Run - Expert Downhill Ski Run + Downhill Ski Run + Downhill Ski Run + Downhill Ski Run Downhill Ski Run - Intermediate Downhill Ski Run - Novice Downhill Ski Run + Downhill Ski Run + Downhill Ski Run Nordic Ski Trail Sledding Piste + Building Events Venue diff --git a/android/src/app/organicmaps/MwmActivity.java b/android/src/app/organicmaps/MwmActivity.java index 0b44f8d08f..eb2ac7e01e 100644 --- a/android/src/app/organicmaps/MwmActivity.java +++ b/android/src/app/organicmaps/MwmActivity.java @@ -19,15 +19,15 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentFactory; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.ViewModelProvider; import app.organicmaps.Framework.PlacePageActivationListener; import app.organicmaps.api.Const; @@ -60,7 +60,6 @@ import app.organicmaps.location.LocationHelper; import app.organicmaps.location.LocationListener; import app.organicmaps.location.LocationState; import app.organicmaps.maplayer.MapButtonsController; -import app.organicmaps.maplayer.MapButtonsViewModel; import app.organicmaps.maplayer.Mode; import app.organicmaps.maplayer.ToggleMapLayerFragment; import app.organicmaps.maplayer.isolines.IsolinesManager; @@ -94,15 +93,18 @@ import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment; import app.organicmaps.util.bottomsheet.MenuBottomSheetItem; import app.organicmaps.util.log.Logger; import app.organicmaps.widget.menu.MainMenu; +import app.organicmaps.widget.placepage.PlacePageButtons; import app.organicmaps.widget.placepage.PlacePageController; import app.organicmaps.widget.placepage.PlacePageData; -import app.organicmaps.widget.placepage.PlacePageViewModel; +import app.organicmaps.widget.placepage.PlacePageView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.ArrayList; import java.util.Objects; import java.util.Stack; +import static app.organicmaps.widget.placepage.PlacePageButtons.PLACEPAGE_MORE_MENU_ID; + public class MwmActivity extends BaseMwmFragmentActivity implements PlacePageActivationListener, View.OnTouchListener, @@ -115,10 +117,12 @@ public class MwmActivity extends BaseMwmFragmentActivity RoutingBottomMenuListener, BookmarkManager.BookmarksLoadingListener, FloatingSearchToolbarController.SearchToolbarListener, + PlacePageController.SlideListener, NoConnectionListener, MenuBottomSheetFragment.MenuBottomSheetInterfaceWithHeader, - PlacePageController.PlacePageRouteSettingsListener, - MapButtonsController.MapButtonClickListener + ToggleMapLayerFragment.LayerItemClickListener, + PlacePageButtons.PlacePageButtonClickListener, + PlacePageView.PlacePageViewListener { private static final String TAG = MwmActivity.class.getSimpleName(); @@ -133,6 +137,8 @@ public class MwmActivity extends BaseMwmFragmentActivity EditorHostFragment.class.getName(), ReportFragment.class.getName() }; + private static final String EXTRA_CURRENT_LAYOUT_MODE = "CURRENT_LAYOUT_MODE"; + private static final String EXTRA_IS_FULLSCREEN = "IS_FULLSCREEN"; public static final int REQ_CODE_ERROR_DRIVING_OPTIONS_DIALOG = 5; public static final int REQ_CODE_DRIVING_OPTIONS = 6; private static final int REQ_CODE_ISOLINES_ERROR = 8; @@ -170,7 +176,12 @@ public class MwmActivity extends BaseMwmFragmentActivity private PanelAnimator mPanelAnimator; @Nullable private OnmapDownloader mOnmapDownloader; + + @Nullable + private MapButtonsController mMapButtonsController; + private boolean mIsTabletLayout; + private boolean mIsFullscreen; @SuppressWarnings("NotNullFieldNotInitialized") @NonNull private FloatingSearchToolbarController mSearchController; @@ -178,15 +189,15 @@ public class MwmActivity extends BaseMwmFragmentActivity private boolean mRestoreRoutingPlanFragmentNeeded; @Nullable private Bundle mSavedForTabletState; + @SuppressWarnings("NotNullFieldNotInitialized") + @NonNull + private PlacePageController mPlacePageController; + private MapButtonsController.LayoutMode mCurrentLayoutMode; + private String mDonatesUrl; private int mNavBarHeight; - private PlacePageViewModel mPlacePageViewModel; - private MapButtonsViewModel mMapButtonsViewModel; - private MapButtonsController.LayoutMode mPreviousMapLayoutMode; - private Mode mPreviousLayerMode; - @Nullable private WindowInsetsCompat mCurrentWindowInsets; @@ -271,6 +282,11 @@ public class MwmActivity extends BaseMwmFragmentActivity mPanelAnimator.show(fragmentClass, args, completionListener); } + public boolean containsFragment(@NonNull Class fragmentClass) + { + return mIsTabletLayout && getFragment(fragmentClass) != null; + } + private void showBookmarks() { BookmarkCategoriesActivity.start(this); @@ -386,6 +402,15 @@ public class MwmActivity extends BaseMwmFragmentActivity protected void onSafeCreate(@Nullable Bundle savedInstanceState) { super.onSafeCreate(savedInstanceState); + if (savedInstanceState != null) + { + mCurrentLayoutMode = MapButtonsController.LayoutMode.values()[savedInstanceState.getInt(EXTRA_CURRENT_LAYOUT_MODE)]; + mIsFullscreen = savedInstanceState.getBoolean(EXTRA_IS_FULLSCREEN); + } + else + { + mCurrentLayoutMode = MapButtonsController.LayoutMode.regular; + } mIsTabletLayout = getResources().getBoolean(R.bool.tabletLayout); if (!mIsTabletLayout) @@ -394,13 +419,8 @@ public class MwmActivity extends BaseMwmFragmentActivity setContentView(R.layout.activity_map); UiUtils.setupTransparentStatusBar(this); - mPlacePageViewModel = new ViewModelProvider(this).get(PlacePageViewModel.class); - mMapButtonsViewModel = new ViewModelProvider(this).get(MapButtonsViewModel.class); - // We don't need to manually handle removing the observers it follows the activity lifecycle - mMapButtonsViewModel.getBottomButtonsHeight().observe(this, this::onMapBottomButtonsHeightChange); - mMapButtonsViewModel.getLayoutMode().observe(this, this::initNavigationButtons); - mPreviousLayerMode = mMapButtonsViewModel.getMapLayerMode().getValue(); - mMapButtonsViewModel.getMapLayerMode().observe(this, this::onLayerChange); + mPlacePageController = new PlacePageController(this, this); + mPlacePageController.initialize(this); mSearchController = new FloatingSearchToolbarController(this, this); mSearchController.getToolbar() @@ -441,7 +461,7 @@ public class MwmActivity extends BaseMwmFragmentActivity UiUtils.setViewInsetsPaddingBottom(mPointChooser, windowInsets); UiUtils.setViewInsetsPaddingNoBottom(mPointChooserToolbar, windowInsets); - mNavBarHeight = isFullscreen() ? 0 : windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom; + mNavBarHeight = mIsFullscreen ? 0 : windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom; // For the first loading, set compass top margin to status bar size // The top inset will be then be updated by the routing controller if (mCurrentWindowInsets == null) @@ -483,7 +503,7 @@ public class MwmActivity extends BaseMwmFragmentActivity removeCurrentFragment(false); } - mNavigationController = new NavigationController(this, v -> onSettingsOptionSelected(), this::updateBottomWidgetsOffset); + mNavigationController = new NavigationController(this, mMapButtonsController, v -> onSettingsOptionSelected(), this::updateBottomWidgetsOffset); //TrafficManager.INSTANCE.attach(mNavigationController); initMainMenu(); @@ -583,7 +603,7 @@ public class MwmActivity extends BaseMwmFragmentActivity mPointChooserMode = mode; closeFloatingToolbarsAndPanels(false); UiUtils.show(mPointChooser); - mMapButtonsViewModel.setButtonsHidden(true); + mMapButtonsController.showMapButtons(false); Framework.nativeTurnOnChoosePositionMode(isBusiness, applyPosition); refreshLightStatusBar(); } @@ -592,7 +612,7 @@ public class MwmActivity extends BaseMwmFragmentActivity { UiUtils.hide(mPointChooser); Framework.nativeTurnOffChoosePositionMode(); - mMapButtonsViewModel.setButtonsHidden(false); + mMapButtonsController.showMapButtons(true); if (mPointChooserMode == PointChooserMode.API) finish(); mPointChooserMode = PointChooserMode.NONE; @@ -633,39 +653,43 @@ public class MwmActivity extends BaseMwmFragmentActivity } } - private void initNavigationButtons() + public boolean isMapAttached() { - initNavigationButtons(mMapButtonsViewModel.getLayoutMode().getValue(), false /* force */); + return mMapFragment != null && mMapFragment.isAdded(); } - private void initNavigationButtons(MapButtonsController.LayoutMode layoutMode) + + private void initNavigationButtons() { - initNavigationButtons(layoutMode, false /* force */); + initNavigationButtons(mCurrentLayoutMode, false /* force */); } private void initNavigationButtons(MapButtonsController.LayoutMode layoutMode, boolean force) { - // Recreate the navigation buttons with the correct layout when it changes - if (mPreviousMapLayoutMode != layoutMode || force) + if (mMapButtonsController == null || mMapButtonsController.getLayoutMode() != layoutMode) { + mCurrentLayoutMode = layoutMode; + + mMapButtonsController = new MapButtonsController(); + mMapButtonsController.init( + layoutMode, + LocationState.nativeGetMode(), + this::onMapButtonClick, + (v) -> closeSearchToolbar(true, true), + mPlacePageController, + this::updateBottomWidgetsOffset); + + FragmentTransaction transaction = getSupportFragmentManager() - .beginTransaction().replace(R.id.map_buttons, new MapButtonsController()); + .beginTransaction().replace(R.id.map_buttons, mMapButtonsController); if (force) transaction.commitNowAllowingStateLoss(); else transaction.commit(); - mPreviousMapLayoutMode = layoutMode; } } - @Override - public void onSearchCanceled() - { - closeSearchToolbar(true, true); - } - - @Override - public void onMapButtonClick(MapButtonsController.MapButtons button) + void onMapButtonClick(MapButtonsController.MapButtons button) { switch (button) { @@ -726,10 +750,10 @@ public class MwmActivity extends BaseMwmFragmentActivity */ public boolean closePlacePage() { - if (mPlacePageViewModel.getMapObject().getValue() == null) + if (mPlacePageController.isClosed()) return false; - mPlacePageViewModel.setMapObject(null); + mPlacePageController.close(true); return true; } @@ -789,7 +813,7 @@ public class MwmActivity extends BaseMwmFragmentActivity if (stopSearch) { mSearchController.cancelSearchApiAndHide(clearText); - mMapButtonsViewModel.setSearchOption(null); + mMapButtonsController.resetSearch(); } else { @@ -856,6 +880,7 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override protected void onSaveInstanceState(@NonNull Bundle outState) { + mPlacePageController.onSave(outState); if (!mIsTabletLayout && RoutingController.get().isPlanning()) mRoutingPlanInplaceController.onSaveState(outState); @@ -869,6 +894,8 @@ public class MwmActivity extends BaseMwmFragmentActivity mNavigationController.onActivitySaveInstanceState(this, outState); RoutingController.get().onSaveState(); + outState.putInt(EXTRA_CURRENT_LAYOUT_MODE, mCurrentLayoutMode.ordinal()); + outState.putBoolean(EXTRA_IS_FULLSCREEN, mIsFullscreen); if (!isChangingConfigurations()) RoutingController.get().saveRoute(); @@ -884,6 +911,7 @@ public class MwmActivity extends BaseMwmFragmentActivity protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); + mPlacePageController.onRestore(savedInstanceState); if (mIsTabletLayout) { RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class); @@ -912,8 +940,12 @@ public class MwmActivity extends BaseMwmFragmentActivity if (resultCode != Activity.RESULT_OK) return; - if (requestCode == REQ_CODE_DRIVING_OPTIONS) - rebuildLastRoute(); + switch (requestCode) + { + case REQ_CODE_DRIVING_OPTIONS: + rebuildLastRoute(); + break; + } } private void rebuildLastRoute() @@ -1010,11 +1042,11 @@ public class MwmActivity extends BaseMwmFragmentActivity { super.onResume(); refreshSearchToolbar(); - setFullscreen(isFullscreen()); + setFullscreen(mIsFullscreen); if (Framework.nativeIsInChoosePositionMode()) { UiUtils.show(mPointChooser); - mMapButtonsViewModel.setButtonsHidden(true); + mMapButtonsController.showMapButtons(false); } if (mOnmapDownloader != null) mOnmapDownloader.onResume(); @@ -1055,12 +1087,13 @@ public class MwmActivity extends BaseMwmFragmentActivity protected void onStart() { super.onStart(); - Framework.nativePlacePageActivationListener(this); BookmarkManager.INSTANCE.addLoadingListener(this); - RoutingController.get().attach(this); IsolinesManager.from(getApplicationContext()).attach(this::onIsolinesStateChanged); if (mDisplayManager.isDeviceDisplayUsed()) { + Logger.d(TAG, "Activate"); + RoutingController.get().attach(this); + Framework.nativePlacePageActivationListener(this); LocationState.nativeSetListener(this); onMyPositionModeChanged(LocationState.nativeGetMode()); } @@ -1075,13 +1108,16 @@ public class MwmActivity extends BaseMwmFragmentActivity protected void onStop() { super.onStop(); - Framework.nativeRemovePlacePageActivationListener(); BookmarkManager.INSTANCE.removeLoadingListener(this); LocationHelper.INSTANCE.removeListener(this); if (mDisplayManager.isDeviceDisplayUsed()) + { + Logger.d(TAG, "Deactivate"); + Framework.nativeRemovePlacePageActivationListener(); LocationState.nativeRemoveListener(); + RoutingController.get().detach(); + } LocationHelper.INSTANCE.detach(); - RoutingController.get().detach(); IsolinesManager.from(getApplicationContext()).detach(); mSearchController.detach(); Utils.keepScreenOn(false, getWindow()); @@ -1093,6 +1129,8 @@ public class MwmActivity extends BaseMwmFragmentActivity { super.onSafeDestroy(); mNavigationController.destroy(); + //TrafficManager.INSTANCE.detachAll(); + mPlacePageController.destroy(); } @Override @@ -1172,8 +1210,8 @@ public class MwmActivity extends BaseMwmFragmentActivity public void onPlacePageActivated(@NonNull PlacePageData data) { setFullscreen(false); - // This will open the place page - mPlacePageViewModel.setMapObject((MapObject) data); + + mPlacePageController.openFor(data); } // Called from JNI. @@ -1186,7 +1224,7 @@ public class MwmActivity extends BaseMwmFragmentActivity UiUtils.isVisible(mSearchController.getToolbar())) return; - setFullscreen(!isFullscreen()); + setFullscreen(!mIsFullscreen); } else { @@ -1201,14 +1239,15 @@ public class MwmActivity extends BaseMwmFragmentActivity || RoutingController.get().isPlanning()) return; - mMapButtonsViewModel.setButtonsHidden(isFullscreen); + mIsFullscreen = isFullscreen; + mMapButtonsController.showMapButtons(!isFullscreen); UiUtils.setFullscreen(this, isFullscreen); } - private boolean isFullscreen() + @Override + public void onPlacePageSlide(int top) { - // Buttons are hidden in position chooser mode but we are not in fullscreen - return Boolean.TRUE.equals(mMapButtonsViewModel.getButtonsHidden().getValue()) && !Framework.nativeIsInChoosePositionMode(); + mMapButtonsController.move(top); } @Override @@ -1243,10 +1282,6 @@ public class MwmActivity extends BaseMwmFragmentActivity Map.onCompassUpdated(north, true); } - public void onMapBottomButtonsHeightChange(float height) { - updateBottomWidgetsOffset(); - } - public void updateBottomWidgetsOffset() { updateBottomWidgetsOffset(-1); @@ -1258,9 +1293,8 @@ public class MwmActivity extends BaseMwmFragmentActivity return; int offsetY = mNavBarHeight; - final Float bottomButtonHeight = mMapButtonsViewModel.getBottomButtonsHeight().getValue(); - if (bottomButtonHeight != null) - offsetY = Math.max(offsetY, bottomButtonHeight.intValue() + mNavBarHeight); + if (mMapButtonsController != null) + offsetY = Math.max(offsetY, (int) mMapButtonsController.getBottomButtonsHeight() + mNavBarHeight); if (mMainMenu != null) offsetY = Math.max(offsetY, mMainMenu.getMenuHeight()); @@ -1290,17 +1324,17 @@ public class MwmActivity extends BaseMwmFragmentActivity { mNavigationController.show(true); closeSearchToolbar(false, false); - mMainMenu.setState(MainMenu.State.NAVIGATION, isFullscreen()); + mMainMenu.setState(MainMenu.State.NAVIGATION, mIsFullscreen); return; } if (RoutingController.get().isPlanning()) { - mMainMenu.setState(MainMenu.State.ROUTE_PREPARE, isFullscreen()); + mMainMenu.setState(MainMenu.State.ROUTE_PREPARE, mIsFullscreen); return; } - mMainMenu.setState(MainMenu.State.MENU, isFullscreen()); + mMainMenu.setState(MainMenu.State.MENU, mIsFullscreen); } private boolean adjustMenuLineFrameVisibility() @@ -1487,7 +1521,7 @@ public class MwmActivity extends BaseMwmFragmentActivity public void showNavigation(boolean show) { // TODO: - // mPlacePage.refreshViews(); +// mPlacePage.refreshViews(); mNavigationController.show(show); if (mOnmapDownloader != null) mOnmapDownloader.updateState(false); @@ -1527,8 +1561,7 @@ public class MwmActivity extends BaseMwmFragmentActivity mRoutingPlanInplaceController.hideDrivingOptionsView(); mNavigationController.stop(this); - mMapButtonsViewModel.setSearchOption(null); - mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.regular); + initNavigationButtons(MapButtonsController.LayoutMode.regular, false /* force */); refreshLightStatusBar(); } @@ -1538,7 +1571,7 @@ public class MwmActivity extends BaseMwmFragmentActivity closeFloatingToolbarsAndPanels(true); ThemeSwitcher.INSTANCE.restart(isMapRendererActive()); mNavigationController.start(this); - mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.navigation); + initNavigationButtons(MapButtonsController.LayoutMode.navigation, false /* force */); refreshLightStatusBar(); } @@ -1546,7 +1579,7 @@ public class MwmActivity extends BaseMwmFragmentActivity public void onPlanningCancelled() { closeFloatingToolbarsAndPanels(true); - mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.regular); + initNavigationButtons(MapButtonsController.LayoutMode.regular, false /* force */); refreshLightStatusBar(); } @@ -1554,7 +1587,7 @@ public class MwmActivity extends BaseMwmFragmentActivity public void onPlanningStarted() { closeFloatingToolbarsAndPanels(true); - mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.planning); + initNavigationButtons(MapButtonsController.LayoutMode.planning, false /* force */); refreshLightStatusBar(); } @@ -1564,8 +1597,7 @@ public class MwmActivity extends BaseMwmFragmentActivity closeFloatingToolbarsAndPanels(true); ThemeSwitcher.INSTANCE.restart(isMapRendererActive()); mNavigationController.stop(this); - mMapButtonsViewModel.setSearchOption(null); - mMapButtonsViewModel.setLayoutMode(MapButtonsController.LayoutMode.planning); + initNavigationButtons(MapButtonsController.LayoutMode.planning, false /* force */); refreshLightStatusBar(); } @@ -1625,9 +1657,9 @@ public class MwmActivity extends BaseMwmFragmentActivity } @Override - public void onShowDisclaimer(@Nullable MapObject startPoint, @Nullable MapObject endPoint) + public void onShowDisclaimer() { - final StringBuilder builder = new StringBuilder(); + StringBuilder builder = new StringBuilder(); for (int resId : new int[] { R.string.dialog_routing_disclaimer_priority, R.string.dialog_routing_disclaimer_precision, R.string.dialog_routing_disclaimer_recommendations, R.string.dialog_routing_disclaimer_borders, R.string.dialog_routing_disclaimer_beware }) @@ -1640,7 +1672,7 @@ public class MwmActivity extends BaseMwmFragmentActivity .setNegativeButton(R.string.decline, null) .setPositiveButton(R.string.accept, (dlg, which) -> { Config.acceptRoutingDisclaimer(); - RoutingController.get().prepare(startPoint, endPoint); + RoutingController.get().prepare(); }) .show(); } @@ -1653,7 +1685,7 @@ public class MwmActivity extends BaseMwmFragmentActivity .setCancelable(false) .setNegativeButton(R.string.cancel, null); - final TextView titleView = (TextView)View.inflate(this, R.layout.dialog_suggest_reroute_title, null); + TextView titleView = (TextView)View.inflate(this, R.layout.dialog_suggest_reroute_title, null); titleView.setText(R.string.p2p_only_from_current); builder.setCustomTitle(titleView); @@ -1674,7 +1706,7 @@ public class MwmActivity extends BaseMwmFragmentActivity public void onMyPositionModeChanged(int newMode) { Logger.d(TAG, "location newMode = " + newMode); - mMapButtonsViewModel.setMyPositionMode(newMode); + mMapButtonsController.updateNavMyPositionButton(newMode); RoutingController controller = RoutingController.get(); if (controller.isPlanning()) showAddStartOrFinishFrame(controller, true); @@ -1850,11 +1882,12 @@ public class MwmActivity extends BaseMwmFragmentActivity shareMyLocation(); } - public void onLayerChange(Mode mode) + @Override + public void onLayerItemClick(@NonNull Mode mode) { - if (mPreviousLayerMode != mode) - closeFloatingPanels(); - mPreviousLayerMode = mode; + closeFloatingPanels(); + if (mMapButtonsController != null) + mMapButtonsController.toggleMapLayer(mode); } @Override @@ -1878,6 +1911,8 @@ public class MwmActivity extends BaseMwmFragmentActivity items.add(new MenuBottomSheetItem(R.string.share_my_location, R.drawable.ic_share, this::onShareLocationOptionSelected)); return items; } + else if (id.equals(PLACEPAGE_MORE_MENU_ID)) + return mPlacePageController.getMenuBottomSheetItems(id); return null; } @@ -1890,6 +1925,30 @@ public class MwmActivity extends BaseMwmFragmentActivity return null; } + @Override + public void onPlacePageButtonClick(PlacePageButtons.ButtonType item) + { + mPlacePageController.onPlacePageButtonClick(item); + } + + @Override + public void onPlacePageContentChanged(int previewHeight, int frameHeight) + { + mPlacePageController.onPlacePageContentChanged(previewHeight, frameHeight); + } + + @Override + public void onPlacePageRequestClose() + { + mPlacePageController.onPlacePageRequestClose(); + } + + @Override + public void onPlacePageRequestToggleState() + { + mPlacePageController.onPlacePageRequestToggleState(); + } + @Override public void onPlacePageRequestToggleRouteSettings(@NonNull RoadType roadType) { @@ -1910,19 +1969,25 @@ public class MwmActivity extends BaseMwmFragmentActivity private void disableControls() { initNavigationButtons(MapButtonsController.LayoutMode.regular, true /* force */); - mMapButtonsViewModel.setButtonsHidden(true); - mPlacePageViewModel.setMapObject(null); + if (mMapButtonsController != null) + mMapButtonsController.showMapButtons(false); + mPlacePageController.close(false); mMainMenu.show(false); mNavigationController.show(false); mRoutingPlanInplaceController.show(false); closeFloatingToolbarsAndPanels(false); - Framework.nativeDeactivatePopup(); + Logger.d(TAG, "Deactivate"); + Framework.nativeRemovePlacePageActivationListener(); if (mOnmapDownloader != null) mOnmapDownloader.onPause(); + RoutingController.get().onSaveState(); + RoutingController.get().detach(); } private void enableControls() { + RoutingController.get().attach(this); + RoutingController.get().restore(); if (RoutingController.get().isNavigating()) { showNavigation(true); @@ -1930,14 +1995,18 @@ public class MwmActivity extends BaseMwmFragmentActivity } else if (RoutingController.get().isPlanning()) { - mMainMenu.show(true); mRoutingPlanInplaceController.show(true); initNavigationButtons(MapButtonsController.LayoutMode.planning, true /* force */); } else + { initNavigationButtons(MapButtonsController.LayoutMode.regular, true /* force */); - mMapButtonsViewModel.setButtonsHidden(false); + if (mMapButtonsController != null) + mMapButtonsController.showMapButtons(true); + } LocationState.nativeSetListener(this); + Logger.d(TAG, "Activate"); + Framework.nativePlacePageActivationListener(this); onMyPositionModeChanged(LocationState.nativeGetMode()); updateViewsInsets(); if (mOnmapDownloader != null) diff --git a/android/src/app/organicmaps/car/NavigationSession.java b/android/src/app/organicmaps/car/NavigationSession.java index f670ea0bf2..58ade2c293 100644 --- a/android/src/app/organicmaps/car/NavigationSession.java +++ b/android/src/app/organicmaps/car/NavigationSession.java @@ -14,8 +14,12 @@ import androidx.car.app.SessionInfo; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; +import app.organicmaps.Framework; import app.organicmaps.Map; +import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.car.screens.NavigationScreen; +import app.organicmaps.car.screens.PlaceScreen; +import app.organicmaps.car.screens.hacks.PopToRootHack; import app.organicmaps.display.DisplayChangedListener; import app.organicmaps.display.DisplayManager; import app.organicmaps.display.DisplayType; @@ -29,10 +33,11 @@ import app.organicmaps.location.LocationListener; import app.organicmaps.location.LocationState; import app.organicmaps.routing.RoutingController; import app.organicmaps.util.log.Logger; +import app.organicmaps.widget.placepage.PlacePageData; import java.io.IOException; -public final class NavigationSession extends Session implements DefaultLifecycleObserver, LocationListener, LocationState.ModeChangeListener, DisplayChangedListener +public final class NavigationSession extends Session implements DefaultLifecycleObserver, LocationListener, LocationState.ModeChangeListener, DisplayChangedListener, Framework.PlacePageActivationListener { private static final String TAG = NavigationSession.class.getSimpleName(); @@ -81,6 +86,8 @@ public final class NavigationSession extends Session implements DefaultLifecycle LocationHelper.INSTANCE.addListener(this); LocationHelper.INSTANCE.onTransit(true); onMyPositionModeChanged(LocationState.nativeGetMode()); + Logger.d(TAG, "Activate"); + Framework.nativePlacePageActivationListener(this); } @Override @@ -90,6 +97,8 @@ public final class NavigationSession extends Session implements DefaultLifecycle LocationHelper.INSTANCE.onTransit(false); LocationHelper.INSTANCE.removeListener(this); LocationState.nativeRemoveListener(); + Logger.d(TAG, "Deactivate"); + Framework.nativeRemovePlacePageActivationListener(); } @Override @@ -109,6 +118,12 @@ public final class NavigationSession extends Session implements DefaultLifecycle init(); } + @Override + public void onPause(@NonNull LifecycleOwner owner) + { + Logger.d(TAG); + } + @Override public void onDestroy(@NonNull LifecycleOwner owner) { @@ -153,19 +168,49 @@ public final class NavigationSession extends Session implements DefaultLifecycle Logger.d(TAG); final ScreenManager screenManager = getCarContext().getCarService(ScreenManager.class); final boolean isUsedOnDeviceScreenShown = screenManager.getTop() instanceof MapPlaceholderScreen; - if (newDisplayType == DisplayType.Car && isUsedOnDeviceScreenShown) + if (newDisplayType == DisplayType.Car) { LocationState.nativeSetListener(this); onMyPositionModeChanged(LocationState.nativeGetMode()); screenManager.popToRoot(); + RoutingController.get().restore(); if (RoutingController.get().isNavigating()) screenManager.push(new NavigationScreen(getCarContext(), mSurfaceRenderer)); + else if (RoutingController.get().isPlanning() && RoutingController.get().getEndPoint() != null) + screenManager.push(new PlaceScreen.Builder(getCarContext(), mSurfaceRenderer).setMapObject(RoutingController.get().getEndPoint()).build()); mSurfaceRenderer.enable(); + Framework.nativePlacePageActivationListener(this); } else if (newDisplayType == DisplayType.Device && !isUsedOnDeviceScreenShown) { + Framework.nativeRemovePlacePageActivationListener(); mSurfaceRenderer.disable(); - screenManager.push(new MapPlaceholderScreen(getCarContext())); + final PopToRootHack hack = new PopToRootHack.Builder(getCarContext()).setScreenToPush(new MapPlaceholderScreen(getCarContext())).build(); + screenManager.push(hack); + RoutingController.get().onSaveState(); } } + + @Override + public void onPlacePageActivated(@NonNull PlacePageData data) + { + final ScreenManager screenManager = getCarContext().getCarService(ScreenManager.class); + if (screenManager.getTop() instanceof PlaceScreen) + { + final PlaceScreen screen = (PlaceScreen) screenManager.getTop(); + if (screen.getMapObject().equals(data)) + return; + } + final PlaceScreen placeScreen = new PlaceScreen.Builder(getCarContext(), mSurfaceRenderer).setMapObject((MapObject) data).build(); + final PopToRootHack hack = new PopToRootHack.Builder(getCarContext()).setScreenToPush(placeScreen).build(); + screenManager.push(hack); + } + + @Override + public void onPlacePageDeactivated(boolean switchFullScreenMode) + { + final ScreenManager screenManager = getCarContext().getCarService(ScreenManager.class); + if (screenManager.getTop() instanceof PlaceScreen) + screenManager.popToRoot(); + } } diff --git a/android/src/app/organicmaps/car/SurfaceRenderer.java b/android/src/app/organicmaps/car/SurfaceRenderer.java index fd9493d136..3fbf5a5113 100644 --- a/android/src/app/organicmaps/car/SurfaceRenderer.java +++ b/android/src/app/organicmaps/car/SurfaceRenderer.java @@ -28,6 +28,8 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @NonNull private Rect mVisibleArea = new Rect(); + @NonNull + private Rect mStableArea = new Rect(); private boolean mIsRunning; @@ -65,9 +67,10 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac public void onStableAreaChanged(@NonNull Rect stableArea) { Logger.d(TAG, "Stable area changed. stableArea: " + stableArea); + mStableArea = stableArea; - if (!stableArea.isEmpty()) - Framework.nativeSetVisibleRect(stableArea.left, stableArea.top, stableArea.right, stableArea.bottom); + if (!mStableArea.isEmpty()) + Framework.nativeSetVisibleRect(mStableArea.left, mStableArea.top, mStableArea.right, mStableArea.bottom); else if (!mVisibleArea.isEmpty()) Framework.nativeSetVisibleRect(mVisibleArea.left, mVisibleArea.top, mVisibleArea.right, mVisibleArea.bottom); } @@ -82,10 +85,10 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onCreate(@NonNull LifecycleOwner owner) { - Logger.d(TAG); + Logger.d(TAG, "onCreate"); mCarContext.getCarService(AppManager.class).setSurfaceCallback(this); - // TODO (AndrewShkrob): Properly process deep links from other apps on AA. + // TODO: Properly process deep links from other apps on AA. boolean launchByDeepLink = false; mMap.onCreate(launchByDeepLink); } @@ -93,7 +96,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onStart(@NonNull LifecycleOwner owner) { - Logger.d(TAG); + Logger.d(TAG, "onStart"); mMap.onStart(); mMap.setCallbackUnsupported(this::reportUnsupported); } @@ -101,7 +104,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onStop(@NonNull LifecycleOwner owner) { - Logger.d(TAG); + Logger.d(TAG, "onStop"); mMap.onStop(); mMap.setCallbackUnsupported(null); } @@ -109,14 +112,14 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac @Override public void onPause(@NonNull LifecycleOwner owner) { - Logger.d(TAG); + Logger.d(TAG, "onPause"); mMap.onPause(mCarContext); } @Override public void onResume(@NonNull LifecycleOwner owner) { - Logger.d(TAG); + Logger.d(TAG, "onResume"); mMap.onResume(); } @@ -168,8 +171,7 @@ public class SurfaceRenderer implements DefaultLifecycleObserver, SurfaceCallbac public void onClick(float x, float y) { Logger.d(TAG, "x: " + x + ", y: " + y); - // TODO (AndrewShkrob): Will be implemented together with PlaceScreen - // Map.onClick(x, y); + Map.onClick(x, y); } public void disable() diff --git a/android/src/app/organicmaps/car/util/UiHelpers.java b/android/src/app/organicmaps/car/UiHelpers.java similarity index 81% rename from android/src/app/organicmaps/car/util/UiHelpers.java rename to android/src/app/organicmaps/car/UiHelpers.java index f75e1e89fb..bde27023d8 100644 --- a/android/src/app/organicmaps/car/util/UiHelpers.java +++ b/android/src/app/organicmaps/car/UiHelpers.java @@ -1,9 +1,8 @@ -package app.organicmaps.car.util; +package app.organicmaps.car; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.car.app.CarContext; -import androidx.car.app.ScreenManager; import androidx.car.app.model.Action; import androidx.car.app.model.ActionStrip; import androidx.car.app.model.CarColor; @@ -12,7 +11,7 @@ import androidx.car.app.navigation.model.MapController; import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; -import app.organicmaps.car.SurfaceRenderer; +import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.car.screens.settings.SettingsScreen; import app.organicmaps.location.LocationHelper; import app.organicmaps.location.LocationState; @@ -20,9 +19,9 @@ import app.organicmaps.location.LocationState; public final class UiHelpers { @NonNull - public static ActionStrip createSettingsActionStrip(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) + public static ActionStrip createSettingsActionStrip(@NonNull BaseMapScreen mapScreen, @NonNull SurfaceRenderer surfaceRenderer) { - return new ActionStrip.Builder().addAction(createSettingsAction(context, surfaceRenderer)).build(); + return new ActionStrip.Builder().addAction(createSettingsAction(mapScreen, surfaceRenderer)).build(); } @NonNull @@ -50,12 +49,19 @@ public final class UiHelpers } @NonNull - public static Action createSettingsAction(@NonNull CarContext context, @NonNull SurfaceRenderer surfaceRenderer) + public static Action createSettingsAction(@NonNull BaseMapScreen mapScreen, @NonNull SurfaceRenderer surfaceRenderer) { + final CarContext context = mapScreen.getCarContext(); final CarIcon iconSettings = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_settings)).build(); return new Action.Builder().setIcon(iconSettings).setOnClickListener( - () -> context.getCarService(ScreenManager.class).push(new SettingsScreen(context, surfaceRenderer)) + () -> { + // Action.onClickListener for the Screen A maybe called even if the Screen B is shown now. + // We need to check it + if (mapScreen.getScreenManager().getTop() != mapScreen) + return; + mapScreen.getScreenManager().push(new SettingsScreen(context, surfaceRenderer)); + } ).build(); } diff --git a/android/src/app/organicmaps/car/screens/BookmarksScreen.java b/android/src/app/organicmaps/car/screens/BookmarksScreen.java index f7ba08171d..56d9d92df7 100644 --- a/android/src/app/organicmaps/car/screens/BookmarksScreen.java +++ b/android/src/app/organicmaps/car/screens/BookmarksScreen.java @@ -20,7 +20,7 @@ import app.organicmaps.bookmarks.data.BookmarkCategory; import app.organicmaps.bookmarks.data.BookmarkInfo; import app.organicmaps.bookmarks.data.BookmarkManager; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.Graphics; @@ -54,7 +54,7 @@ public class BookmarksScreen extends BaseMapScreen final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); - builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); + builder.setActionStrip(UiHelpers.createSettingsActionStrip(this, getSurfaceRenderer())); builder.setItemList(mBookmarkCategory == null ? createBookmarkCategoriesList() : createBookmarksList()); return builder.build(); } @@ -114,7 +114,7 @@ public class BookmarksScreen extends BaseMapScreen R.dimen.bookmark_icon_size, getCarContext()); itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithBitmap(Graphics.drawableToBitmap(icon))).build()); - itemBuilder.setOnClickListener(() -> { /* TODO (AndrewShkrob): Will be implemented together with PlaceScreen */ }); + itemBuilder.setOnClickListener(() -> BookmarkManager.INSTANCE.showBookmarkOnMap(bookmarkId)); builder.addItem(itemBuilder.build()); } return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/CategoriesScreen.java b/android/src/app/organicmaps/car/screens/CategoriesScreen.java index 3a0c240b35..c66f678641 100644 --- a/android/src/app/organicmaps/car/screens/CategoriesScreen.java +++ b/android/src/app/organicmaps/car/screens/CategoriesScreen.java @@ -16,9 +16,9 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.screens.search.SearchOnMapScreen; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; +import app.organicmaps.car.screens.search.SearchScreen; import java.util.Arrays; import java.util.List; @@ -40,7 +40,6 @@ public class CategoriesScreen extends BaseMapScreen } } - // TODO (AndrewShkrob): discuss categories and their priority for this list private static final List CATEGORIES = Arrays.asList( new CategoryData(R.string.fuel, R.drawable.ic_category_fuel), new CategoryData(R.string.parking, R.drawable.ic_category_parking), @@ -67,7 +66,7 @@ public class CategoriesScreen extends BaseMapScreen final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); - builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); + builder.setActionStrip(UiHelpers.createSettingsActionStrip(this, getSurfaceRenderer())); builder.setItemList(createCategoriesList()); return builder.build(); } @@ -92,7 +91,9 @@ public class CategoriesScreen extends BaseMapScreen final String title = getCarContext().getString(CATEGORIES.get(i).nameResId); itemBuilder.setTitle(title); itemBuilder.setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), CATEGORIES.get(i).iconResId)).build()); - itemBuilder.setOnClickListener(() -> getScreenManager().push(new SearchOnMapScreen.Builder(getCarContext(), getSurfaceRenderer()).setCategory(title).build())); + // TODO: replace with this line when implementation of {@link SearchOnMapScreen} will be finished + // itemBuilder.setOnClickListener(() -> getScreenManager().push(new SearchOnMapScreen.Builder(getCarContext(), getSurfaceRenderer()).setCategory(title).build())); + itemBuilder.setOnClickListener(() -> getScreenManager().push(new SearchScreen.Builder(getCarContext(), getSurfaceRenderer()).setCategory(title).build())); builder.addItem(itemBuilder.build()); } return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/ErrorScreen.java b/android/src/app/organicmaps/car/screens/ErrorScreen.java index ff2eecefa0..bcdaf8525f 100644 --- a/android/src/app/organicmaps/car/screens/ErrorScreen.java +++ b/android/src/app/organicmaps/car/screens/ErrorScreen.java @@ -1,15 +1,19 @@ package app.organicmaps.car.screens; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.car.app.CarContext; +import androidx.car.app.Screen; import androidx.car.app.model.LongMessageTemplate; import androidx.car.app.model.Template; import app.organicmaps.R; -import app.organicmaps.car.screens.base.BaseScreen; -public class ErrorScreen extends BaseScreen +public class ErrorScreen extends Screen { + private static final String TAG = ErrorScreen.class.getSimpleName(); + public ErrorScreen(@NonNull CarContext carContext) { super(carContext); @@ -19,7 +23,8 @@ public class ErrorScreen extends BaseScreen @Override public Template onGetTemplate() { - final LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(getCarContext().getString(R.string.dialog_error_storage_message)); + Log.d(TAG, "onGetTemplate"); + LongMessageTemplate.Builder builder = new LongMessageTemplate.Builder(getCarContext().getString(R.string.dialog_error_storage_message)); builder.setTitle(getCarContext().getString(R.string.dialog_error_storage_title)); return builder.build(); diff --git a/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java b/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java index 827c92fbe5..30a1f00e06 100644 --- a/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java +++ b/android/src/app/organicmaps/car/screens/MapPlaceholderScreen.java @@ -12,9 +12,12 @@ import app.organicmaps.car.screens.base.BaseScreen; import app.organicmaps.display.DisplayManager; import app.organicmaps.display.DisplayType; import app.organicmaps.R; +import app.organicmaps.util.log.Logger; public class MapPlaceholderScreen extends BaseScreen { + private static final String TAG = MapPlaceholderScreen.class.getSimpleName(); + public MapPlaceholderScreen(@NonNull CarContext carContext) { super(carContext); @@ -24,6 +27,7 @@ public class MapPlaceholderScreen extends BaseScreen @Override public Template onGetTemplate() { + Logger.d(TAG, "onGetTemplate"); final MessageTemplate.Builder builder = new MessageTemplate.Builder(getCarContext().getString(R.string.aa_used_on_phone_screen)); builder.setHeaderAction(Action.APP_ICON); builder.setTitle(getCarContext().getString(R.string.app_name)); diff --git a/android/src/app/organicmaps/car/screens/MapScreen.java b/android/src/app/organicmaps/car/screens/MapScreen.java index 7c9bdb155e..f4ed59b4c8 100644 --- a/android/src/app/organicmaps/car/screens/MapScreen.java +++ b/android/src/app/organicmaps/car/screens/MapScreen.java @@ -14,7 +14,7 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.car.screens.search.SearchScreen; @@ -32,7 +32,7 @@ public class MapScreen extends BaseMapScreen final MapTemplate.Builder builder = new MapTemplate.Builder(); builder.setHeader(createHeader()); builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); - builder.setActionStrip(UiHelpers.createSettingsActionStrip(getCarContext(), getSurfaceRenderer())); + builder.setActionStrip(UiHelpers.createSettingsActionStrip(this, getSurfaceRenderer())); builder.setItemList(createList()); return builder.build(); } @@ -91,16 +91,22 @@ public class MapScreen extends BaseMapScreen private void openSearch() { + if (getScreenManager().getTop() != this) + return; getScreenManager().push(new SearchScreen.Builder(getCarContext(), getSurfaceRenderer()).build()); } private void openCategories() { + if (getScreenManager().getTop() != this) + return; getScreenManager().push(new CategoriesScreen(getCarContext(), getSurfaceRenderer())); } private void openBookmarks() { + if (getScreenManager().getTop() != this) + return; getScreenManager().push(new BookmarksScreen(getCarContext(), getSurfaceRenderer())); } } diff --git a/android/src/app/organicmaps/car/screens/NavigationScreen.java b/android/src/app/organicmaps/car/screens/NavigationScreen.java index 1f123c3d1d..c099bbd9d0 100644 --- a/android/src/app/organicmaps/car/screens/NavigationScreen.java +++ b/android/src/app/organicmaps/car/screens/NavigationScreen.java @@ -9,19 +9,19 @@ import androidx.car.app.navigation.model.NavigationTemplate; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.routing.RoutingController; -public class NavigationScreen extends BaseMapScreen +public class NavigationScreen extends BaseMapScreen implements RoutingController.Container { - @NonNull private final RoutingController mRoutingController; - public NavigationScreen(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer) { super(carContext, surfaceRenderer); mRoutingController = RoutingController.get(); + mRoutingController.attach(this); + mRoutingController.restore(); } @NonNull @@ -39,16 +39,13 @@ public class NavigationScreen extends BaseMapScreen { final Action.Builder stopActionBuilder = new Action.Builder(); stopActionBuilder.setTitle(getCarContext().getString(R.string.current_location_unknown_stop_button)); - stopActionBuilder.setOnClickListener(this::stop); + stopActionBuilder.setOnClickListener(() -> { + mRoutingController.cancel(); + getScreenManager().popToRoot(); + }); final ActionStrip.Builder builder = new ActionStrip.Builder(); - builder.addAction(UiHelpers.createSettingsAction(getCarContext(), getSurfaceRenderer())); + builder.addAction(UiHelpers.createSettingsAction(this, getSurfaceRenderer())); builder.addAction(stopActionBuilder.build()); return builder.build(); } - - private void stop() - { - mRoutingController.cancel(); - getScreenManager().popToRoot(); - } } diff --git a/android/src/app/organicmaps/car/screens/PlaceScreen.java b/android/src/app/organicmaps/car/screens/PlaceScreen.java new file mode 100644 index 0000000000..b8fb5ebb83 --- /dev/null +++ b/android/src/app/organicmaps/car/screens/PlaceScreen.java @@ -0,0 +1,385 @@ +package app.organicmaps.car.screens; + +import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; +import static android.text.Spanned.SPAN_INCLUSIVE_INCLUSIVE; + +import android.content.Intent; +import android.net.Uri; +import android.text.SpannableString; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.car.app.CarContext; +import androidx.car.app.model.Action; +import androidx.car.app.model.CarColor; +import androidx.car.app.model.CarIcon; +import androidx.car.app.model.DurationSpan; +import androidx.car.app.model.ForegroundCarColorSpan; +import androidx.car.app.model.Header; +import androidx.car.app.model.Pane; +import androidx.car.app.model.Row; +import androidx.car.app.model.Template; +import androidx.car.app.navigation.model.MapTemplate; +import androidx.core.graphics.drawable.IconCompat; +import androidx.lifecycle.LifecycleOwner; + +import app.organicmaps.Framework; +import app.organicmaps.R; +import app.organicmaps.bookmarks.data.BookmarkManager; +import app.organicmaps.bookmarks.data.MapObject; +import app.organicmaps.bookmarks.data.Metadata; +import app.organicmaps.car.SurfaceRenderer; +import app.organicmaps.car.UiHelpers; +import app.organicmaps.car.screens.base.BaseMapScreen; +import app.organicmaps.car.screens.settings.DrivingOptionsScreen; +import app.organicmaps.car.util.OnBackPressedCallback; +import app.organicmaps.editor.OpeningHours; +import app.organicmaps.editor.data.Timetable; +import app.organicmaps.location.LocationHelper; +import app.organicmaps.routing.RoutingController; +import app.organicmaps.routing.RoutingInfo; +import app.organicmaps.util.Config; +import app.organicmaps.util.Utils; + +import java.util.Calendar; + +public class PlaceScreen extends BaseMapScreen implements RoutingController.Container, OnBackPressedCallback.Callback +{ + @NonNull + private final MapObject mMapObject; + + @NonNull + private final RoutingController mRoutingController; + + @NonNull + private final OnBackPressedCallback mOnBackPressedCallback; + + private PlaceScreen(@NonNull Builder builder) + { + super(builder.mCarContext, builder.mSurfaceRenderer); + + assert builder.mMapObject != null; + mMapObject = builder.mMapObject; + + mRoutingController = RoutingController.get(); + mOnBackPressedCallback = new OnBackPressedCallback(getCarContext(), this); + } + + @NonNull + @Override + public Template onGetTemplate() + { + final MapTemplate.Builder builder = new MapTemplate.Builder(); + builder.setHeader(createHeader()); + builder.setActionStrip(UiHelpers.createSettingsActionStrip(this, getSurfaceRenderer())); + builder.setMapController(UiHelpers.createMapController(getCarContext(), getSurfaceRenderer())); + builder.setPane(createPane()); + + return builder.build(); + } + + @NonNull + public MapObject getMapObject() + { + return mMapObject; + } + + @NonNull + private Header createHeader() + { + final Header.Builder builder = new Header.Builder(); + builder.setStartHeaderAction(Action.BACK); + getCarContext().getOnBackPressedDispatcher().addCallback(this, mOnBackPressedCallback); + if (!mRoutingController.isBuilding() && !mRoutingController.isBuilt()) + builder.addEndHeaderAction(createBookmarkAction()); + if (mRoutingController.isBuilt()) + { + builder.addEndHeaderAction( + new Action.Builder() + .setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_settings)).build()) + .setOnClickListener(() -> getScreenManager().push(new DrivingOptionsScreen(getCarContext(), getSurfaceRenderer()))) + .build() + ); + } + + return builder.build(); + } + + @NonNull + private Pane createPane() + { + final Pane.Builder builder = new Pane.Builder(); + + if (mRoutingController.isBuilding()) + { + builder.setLoading(true); + return builder.build(); + } + + builder.addRow(getPlaceDescription()); + if (mRoutingController.isBuilt()) + builder.addRow(getPlaceRouteInfo()); + + final Row placeOpeningHours = getPlaceOpeningHours(); + if (placeOpeningHours != null) + builder.addRow(placeOpeningHours); + + createPaneActions(builder); + + return builder.build(); + } + + @NonNull + private Row getPlaceDescription() + { + final Row.Builder builder = new Row.Builder(); + builder.setTitle(mMapObject.getTitle()); + if (!mMapObject.getSubtitle().isEmpty()) + builder.addText(mMapObject.getSubtitle()); + String address = mMapObject.getAddress(); + if (address.isEmpty()) + address = Framework.nativeGetAddress(mMapObject.getLat(), mMapObject.getLon()); + if (!address.isEmpty()) + builder.addText(address); + return builder.build(); + } + + @NonNull + private Row getPlaceRouteInfo() + { + final RoutingInfo routingInfo = RoutingController.get().getCachedRoutingInfo(); + if (routingInfo == null) + { + throw new IllegalStateException("routingInfo == null"); + } + + final Row.Builder builder = new Row.Builder(); + + builder.setTitle(routingInfo.distToTarget + " " + routingInfo.targetUnits); + + final SpannableString time = new SpannableString(" "); + time.setSpan(DurationSpan.create(routingInfo.totalTimeInSeconds), 0, 1, SPAN_INCLUSIVE_INCLUSIVE); + time.setSpan(ForegroundCarColorSpan.create(CarColor.BLUE), 0, 1, SPAN_EXCLUSIVE_EXCLUSIVE); + builder.addText(time); + + return builder.build(); + } + + @Nullable + private Row getPlaceOpeningHours() + { + if (!mMapObject.hasMetadata()) + return null; + + final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS); + final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr); + final boolean isEmptyTT = (timetables == null || timetables.length == 0); + + if (ohStr.isEmpty() && isEmptyTT) + return null; + + final Row.Builder builder = new Row.Builder(); + builder.setImage(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_operating_hours)).build()); + if (isEmptyTT) + builder.setTitle(ohStr); + else if (timetables[0].isFullWeek()) + { + if (timetables[0].isFullday) + builder.setTitle(getCarContext().getString(R.string.twentyfour_seven)); + else + builder.setTitle(timetables[0].workingTimespan.toWideString()); + } + else + { + boolean containsCurrentWeekday = false; + final int currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); + for (final Timetable tt : timetables) + { + if (tt.containsWeekday(currentDay)) + { + containsCurrentWeekday = true; + String openTime; + + if (tt.isFullday) + openTime = Utils.unCapitalize(getCarContext().getString(R.string.editor_time_allday)); + else + openTime = tt.workingTimespan.toWideString(); + + builder.setTitle(openTime); + + break; + } + } + // Show that place is closed today. + if (!containsCurrentWeekday) + builder.setTitle(getCarContext().getString(R.string.day_off_today)); + } + + return builder.build(); + } + + @NonNull + private String getPhoneNumber() + { + if (!mMapObject.hasMetadata()) + return ""; + + final String phones = mMapObject.getMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER); + return phones.split(";", 1)[0]; + } + + private void createPaneActions(@NonNull Pane.Builder builder) + { + final String phoneNumber = getPhoneNumber(); + if (!phoneNumber.isEmpty()) + { + final Action.Builder openDialBuilder = new Action.Builder(); + openDialBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_phone)).build()); + openDialBuilder.setOnClickListener(() -> getCarContext().startCarApp(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber)))); + builder.addAction(openDialBuilder.build()); + } + + final Action.Builder startRouteBuilder = new Action.Builder(); + startRouteBuilder.setBackgroundColor(CarColor.GREEN); + + if (mRoutingController.isNavigating()) + { + startRouteBuilder.setFlags(Action.FLAG_PRIMARY); + startRouteBuilder.setTitle(getCarContext().getString(R.string.placepage_add_stop)); + startRouteBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_route_via)).build()); + // TODO: implement with navigation screen + startRouteBuilder.setOnClickListener(() -> { + }); + } + else if (mRoutingController.isBuilt()) + { + startRouteBuilder.setFlags(Action.FLAG_DEFAULT); + startRouteBuilder.setTitle(getCarContext().getString(R.string.p2p_start)); + startRouteBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_follow_and_rotate)).build()); + startRouteBuilder.setOnClickListener(() -> { + mRoutingController.start(); + getScreenManager().push(new NavigationScreen(getCarContext(), getSurfaceRenderer())); + }); + } + else + { + startRouteBuilder.setFlags(Action.FLAG_PRIMARY); + startRouteBuilder.setTitle(getCarContext().getString(R.string.p2p_to_here)); + startRouteBuilder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_route_to)).build()); + startRouteBuilder.setOnClickListener(() -> { + mRoutingController.setRouterType(Framework.ROUTER_TYPE_VEHICLE); + mRoutingController.prepare(LocationHelper.INSTANCE.getMyPosition(), mMapObject); + Framework.nativeDeactivatePopup(); + }); + } + builder.addAction(startRouteBuilder.build()); + } + + @NonNull + private Action createBookmarkAction() + { + final Action.Builder builder = new Action.Builder(); + final CarIcon.Builder iconBuilder = new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_bookmarks)); + if (mMapObject.getMapObjectType() == MapObject.BOOKMARK) + iconBuilder.setTint(CarColor.YELLOW); + builder.setIcon(iconBuilder.build()); + builder.setOnClickListener(() -> { + if (MapObject.isOfType(MapObject.BOOKMARK, mMapObject)) + Framework.nativeDeleteBookmarkFromMapObject(); + else + BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getLat(), mMapObject.getLon()); + }); + return builder.build(); + } + + @Override + public void onBuiltRoute() + { + invalidate(); + } + + @Override + public void onPlanningStarted() + { + invalidate(); + } + + @Override + public void onPlanningCancelled() + { + invalidate(); + } + + @Override + public void showRoutePlan(boolean show, @Nullable Runnable completionListener) + { + if (completionListener != null) + completionListener.run(); + } + + @Override + public void onShowDisclaimer() + { + // TODO: show disclaimer screen or not? + Config.acceptRoutingDisclaimer(); + mRoutingController.prepare(); + } + + @Override + public void onCreate(@NonNull LifecycleOwner owner) + { + mRoutingController.attach(this); + if (mRoutingController.isPlanning() && mRoutingController.getLastRouterType() != Framework.ROUTER_TYPE_VEHICLE) + { + mRoutingController.setRouterType(Framework.ROUTER_TYPE_VEHICLE); + mRoutingController.rebuildLastRoute(); + } + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) + { + mRoutingController.detach(); + } + + @Override + public void onBackPressed() + { + if (!mRoutingController.isNavigating()) + mRoutingController.cancel(); + Framework.nativeDeactivatePopup(); + } + + /** + * A builder of {@link PlaceScreen}. + */ + public static final class Builder + { + @NonNull + private final CarContext mCarContext; + @NonNull + private final SurfaceRenderer mSurfaceRenderer; + @Nullable + private MapObject mMapObject; + + public Builder(@NonNull final CarContext carContext, @NonNull final SurfaceRenderer surfaceRenderer) + { + mCarContext = carContext; + mSurfaceRenderer = surfaceRenderer; + } + + public Builder setMapObject(@NonNull MapObject mapObject) + { + mMapObject = mapObject; + return this; + } + + @NonNull + public PlaceScreen build() + { + if (mMapObject == null) + throw new IllegalStateException("MapObject must be set"); + return new PlaceScreen(this); + } + } +} diff --git a/android/src/app/organicmaps/car/screens/hacks/PopToRootHack.java b/android/src/app/organicmaps/car/screens/hacks/PopToRootHack.java new file mode 100644 index 0000000000..4c391aeb5b --- /dev/null +++ b/android/src/app/organicmaps/car/screens/hacks/PopToRootHack.java @@ -0,0 +1,74 @@ +package app.organicmaps.car.screens.hacks; + +import android.os.Handler; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.car.app.CarContext; +import androidx.car.app.model.Template; +import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate; +import androidx.lifecycle.LifecycleOwner; + +import app.organicmaps.car.screens.base.BaseScreen; + +public final class PopToRootHack extends BaseScreen +{ + private static final Handler mHandler = new Handler(Looper.getMainLooper()); + private static final RoutePreviewNavigationTemplate mTemplate = new RoutePreviewNavigationTemplate.Builder().setLoading(true).build(); + + private final BaseScreen mScreenToPush; + + private PopToRootHack(@NonNull Builder builder) + { + super(builder.mCarContext); + mScreenToPush = builder.mScreenToPush; + } + + @NonNull + @Override + public Template onGetTemplate() + { + return mTemplate; + } + + @Override + public void onStart(@NonNull LifecycleOwner owner) + { + mHandler.post(() -> { + getScreenManager().popToRoot(); + mHandler.post(() -> getScreenManager().push(mScreenToPush)); + }); + } + + /** + * A builder of {@link PopToRootHack}. + */ + public static final class Builder + { + @NonNull + private final CarContext mCarContext; + @Nullable + private BaseScreen mScreenToPush; + + public Builder(@NonNull final CarContext carContext) + { + mCarContext = carContext; + } + + @NonNull + public Builder setScreenToPush(@NonNull BaseScreen screenToPush) + { + mScreenToPush = screenToPush; + return this; + } + + @NonNull + public PopToRootHack build() + { + if (mScreenToPush == null) + throw new IllegalStateException("You must specify Screen that will be pushed to the ScreenManager after the popToRoot() action"); + return new PopToRootHack(this); + } + } +} diff --git a/android/src/app/organicmaps/car/screens/search/SearchOnMapScreen.java b/android/src/app/organicmaps/car/screens/search/SearchOnMapScreen.java index 7c205096e8..f83c1a7145 100644 --- a/android/src/app/organicmaps/car/screens/search/SearchOnMapScreen.java +++ b/android/src/app/organicmaps/car/screens/search/SearchOnMapScreen.java @@ -8,10 +8,10 @@ import androidx.car.app.model.Action; import androidx.car.app.model.CarIcon; import androidx.car.app.model.CarLocation; import androidx.car.app.model.Header; +import androidx.car.app.model.Item; import androidx.car.app.model.ItemList; import androidx.car.app.model.Metadata; import androidx.car.app.model.Place; -import androidx.car.app.model.PlaceMarker; import androidx.car.app.model.Row; import androidx.car.app.model.Template; import androidx.car.app.navigation.model.PlaceListNavigationTemplate; @@ -21,21 +21,24 @@ import androidx.lifecycle.LifecycleOwner; import app.organicmaps.R; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.car.SurfaceRenderer; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; -import app.organicmaps.car.util.UiHelpers; import app.organicmaps.location.LocationHelper; import app.organicmaps.search.NativeSearchListener; import app.organicmaps.search.SearchEngine; -import app.organicmaps.search.SearchRecents; import app.organicmaps.search.SearchResult; +import app.organicmaps.util.log.Logger; -public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchListener +import java.util.List; + +// TODO: finish implementation +public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchListener, ItemList.OnItemVisibilityChangedListener { - private final int MAX_RESULTS_SIZE; + private final static String TAG = SearchOnMapScreen.class.getSimpleName(); - @NonNull - private final String mQuery; + private final int MAX_RESULTS_SIZE; private final boolean mIsCategory; + private final String mQuery; @Nullable private ItemList mResults = null; @@ -43,11 +46,10 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList private SearchOnMapScreen(@NonNull Builder builder) { super(builder.mCarContext, builder.mSurfaceRenderer); - final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class); - MAX_RESULTS_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_PLACE_LIST); - - mQuery = builder.mQuery; mIsCategory = builder.mIsCategory; + mQuery = builder.mQuery; + final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class); + MAX_RESULTS_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST); } @NonNull @@ -72,14 +74,36 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList final ItemList.Builder builder = new ItemList.Builder(); builder.setNoItemsMessage(getCarContext().getString(R.string.search_not_found)); + builder.setOnItemsVisibilityChangedListener(this); final int resultsSize = Math.min(results.length, MAX_RESULTS_SIZE); for (int i = 0; i < resultsSize; i++) builder.addItem(createResultItem(results[i], i)); mResults = builder.build(); - invalidate(); } + @Override + public void onItemVisibilityChanged(int startIndex, int endIndex) + { + if (mResults == null) + return; + + final List items = mResults.getItems().subList(startIndex, endIndex); + final double[] coordinates = new double[items.size() * 2]; + for (int i = 0; i < items.size(); ++i) + { + final Metadata metadata = ((Row) items.get(i)).getMetadata(); + + assert metadata != null; + assert metadata.getPlace() != null; + + final CarLocation location = metadata.getPlace().getLocation(); + coordinates[2 * i] = location.getLatitude(); + coordinates[2 * i + 1] = location.getLongitude(); + } + // Framework.nativeShowPoints(coordinates); + } + @NonNull private Row createResultItem(@NonNull SearchResult result, int resultIndex) { @@ -87,14 +111,13 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList builder.setBrowsable(true); if (result.type == SearchResult.TYPE_RESULT) { - final Metadata metadata = new Metadata.Builder().setPlace(new Place.Builder(CarLocation.create(result.lat, result.lon)).setMarker(new PlaceMarker.Builder().setLabel("" + (resultIndex + 1)).build()).build()).build(); + final Metadata metadata = new Metadata.Builder().setPlace(new Place.Builder(CarLocation.create(result.lat, result.lon)).build()).build(); final String title = result.getTitle(getCarContext()); builder.setTitle(title); builder.addText(result.getFormattedDescription(getCarContext())); builder.addText(SearchUiHelpers.getOpeningHoursAndDistanceText(getCarContext(), result)); builder.setMetadata(metadata); builder.setOnClickListener(() -> { - SearchRecents.add(title, getCarContext()); SearchEngine.INSTANCE.cancel(); SearchEngine.INSTANCE.showResult(resultIndex); getScreenManager().popToRoot(); @@ -112,26 +135,39 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList @Override public void onStart(@NonNull LifecycleOwner owner) { + Logger.d(TAG); SearchEngine.INSTANCE.addListener(this); } @Override public void onResume(@NonNull LifecycleOwner owner) { + Logger.d(TAG); SearchEngine.INSTANCE.cancel(); - final MapObject location = LocationHelper.INSTANCE.getMyPosition(); - final boolean hasLocation = location != null; - final double lat = hasLocation ? location.getLat() : 0; - final double lon = hasLocation ? location.getLon() : 0; - - SearchEngine.INSTANCE.searchInteractive(getCarContext(), mQuery, mIsCategory, System.nanoTime(), true /* isMapAndTable */, hasLocation, lat, lon); + if (location != null) + SearchEngine.INSTANCE.searchInteractive( + getCarContext(), mQuery, mIsCategory, + System.nanoTime(), true /* isMapAndTable */, true /* hasLocation */, + location.getLat(), location.getLon()); + else + SearchEngine.INSTANCE.searchInteractive( + getCarContext(), mQuery, mIsCategory, + System.nanoTime(), true /* isMapAndTable */); + SearchEngine.INSTANCE.setQuery(mQuery); } @Override public void onStop(@NonNull LifecycleOwner owner) { + Logger.d(TAG); SearchEngine.INSTANCE.removeListener(this); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) + { + Logger.d(TAG); SearchEngine.INSTANCE.cancel(); } @@ -149,14 +185,11 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList */ public static final class Builder { - @NonNull private final CarContext mCarContext; - @NonNull private final SurfaceRenderer mSurfaceRenderer; - @NonNull - private String mQuery = ""; private boolean mIsCategory; + private String mQuery; public Builder(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer) { @@ -181,7 +214,7 @@ public class SearchOnMapScreen extends BaseMapScreen implements NativeSearchList @NonNull public SearchOnMapScreen build() { - if (mQuery.isEmpty()) + if (mQuery == null) throw new IllegalStateException("Search query is empty"); return new SearchOnMapScreen(this); } diff --git a/android/src/app/organicmaps/car/screens/search/SearchScreen.java b/android/src/app/organicmaps/car/screens/search/SearchScreen.java index a7d7855df4..3398341d15 100644 --- a/android/src/app/organicmaps/car/screens/search/SearchScreen.java +++ b/android/src/app/organicmaps/car/screens/search/SearchScreen.java @@ -1,7 +1,6 @@ package app.organicmaps.car.screens.search; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.car.app.CarContext; import androidx.car.app.constraints.ConstraintManager; import androidx.car.app.model.Action; @@ -23,16 +22,16 @@ import app.organicmaps.search.NativeSearchListener; import app.organicmaps.search.SearchEngine; import app.organicmaps.search.SearchRecents; import app.organicmaps.search.SearchResult; +import app.organicmaps.util.log.Logger; public class SearchScreen extends BaseMapScreen implements SearchTemplate.SearchCallback, NativeSearchListener { + private static final String TAG = SearchScreen.class.getSimpleName(); + private final int MAX_RESULTS_SIZE; - - @NonNull + private ItemList mResults; private String mQuery = ""; - - @Nullable - private ItemList mResults = null; + private boolean mIsCategory; private SearchScreen(@NonNull Builder builder) { @@ -40,6 +39,7 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search final ConstraintManager constraintManager = getCarContext().getCarService(ConstraintManager.class); MAX_RESULTS_SIZE = constraintManager.getContentLimit(ConstraintManager.CONTENT_LIMIT_TYPE_LIST); + mIsCategory = builder.mIsCategory; onSearchSubmitted(builder.mQuery); } @@ -47,7 +47,7 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search @Override public Template onGetTemplate() { - final SearchTemplate.Builder builder = new SearchTemplate.Builder(this); + SearchTemplate.Builder builder = new SearchTemplate.Builder(this); builder.setHeaderAction(Action.BACK); builder.setShowKeyboardByDefault(false); if (mQuery.isEmpty() && mResults == null) @@ -55,12 +55,13 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search if (!loadRecents()) builder.setShowKeyboardByDefault(true); } - if (!mQuery.isEmpty() && mResults != null && !mResults.getItems().isEmpty()) + if (!mQuery.isEmpty() && mResults != null) builder.setActionStrip(createActionStrip()); if (mResults == null) builder.setLoading(true); else builder.setItemList(mResults); + Logger.d(TAG, mQuery); builder.setInitialSearchText(mQuery); builder.setSearchHint(getCarContext().getString(R.string.search)); return builder.build(); @@ -69,44 +70,47 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search @Override public void onSearchTextChanged(@NonNull String searchText) { + Logger.d(TAG, searchText); if (mQuery.equals(searchText)) return; + if (!mQuery.isEmpty()) + mIsCategory = false; mQuery = searchText; - mResults = null; SearchEngine.INSTANCE.cancel(); - if (mQuery.isEmpty()) - { - invalidate(); - return; - } - final MapObject location = LocationHelper.INSTANCE.getMyPosition(); - final boolean hasLocation = location != null; - final double lat = hasLocation ? location.getLat() : 0; - final double lon = hasLocation ? location.getLon() : 0; + if (location != null) + SearchEngine.INSTANCE.search(getCarContext(), mQuery, mIsCategory, System.nanoTime(), true, location.getLat(), location.getLon()); + else + SearchEngine.INSTANCE.search(getCarContext(), mQuery, mIsCategory, System.nanoTime(), false, 0, 0); - SearchEngine.INSTANCE.search(getCarContext(), mQuery, false, System.nanoTime(), hasLocation, lat, lon); + mResults = null; invalidate(); } @Override public void onSearchSubmitted(@NonNull String searchText) { + Logger.d(TAG, searchText); onSearchTextChanged(searchText); } @Override - public void onStart(@NonNull LifecycleOwner owner) + public void onResume(@NonNull LifecycleOwner owner) { SearchEngine.INSTANCE.addListener(this); } @Override - public void onStop(@NonNull LifecycleOwner owner) + public void onPause(@NonNull LifecycleOwner owner) { SearchEngine.INSTANCE.removeListener(this); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) + { SearchEngine.INSTANCE.cancel(); } @@ -128,6 +132,8 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search final Row.Builder builder = new Row.Builder(); if (result.type == SearchResult.TYPE_RESULT) { + if (result.description != null) + Logger.d(TAG, result.description.featureType); final String title = result.getTitle(getCarContext()); builder.setTitle(title); builder.addText(result.getFormattedDescription(getCarContext())); @@ -178,8 +184,9 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search { final Action.Builder builder = new Action.Builder(); builder.setIcon(new CarIcon.Builder(IconCompat.createWithResource(getCarContext(), R.drawable.ic_show_on_map)).build()); - builder.setOnClickListener(() -> - getScreenManager().push(new SearchOnMapScreen.Builder(getCarContext(), getSurfaceRenderer()).setQuery(mQuery).build())); + // TODO: uncomment when implementation of {@link SearchOnMapScreen} will be finished + // builder.setOnClickListener(() -> + // getScreenManager().push(new SearchOnMapScreen.Builder(getCarContext(), getSurfaceRenderer()).setQuery(mQuery).build())); return new ActionStrip.Builder().addAction(builder.build()).build(); } @@ -189,12 +196,10 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search */ public static final class Builder { - @NonNull private final CarContext mCarContext; - @NonNull private final SurfaceRenderer mSurfaceRenderer; - @NonNull + private boolean mIsCategory; private String mQuery = ""; public Builder(@NonNull CarContext carContext, @NonNull SurfaceRenderer surfaceRenderer) @@ -203,9 +208,16 @@ public class SearchScreen extends BaseMapScreen implements SearchTemplate.Search mSurfaceRenderer = surfaceRenderer; } - @NonNull + public Builder setCategory(@NonNull String category) + { + mIsCategory = true; + mQuery = category; + return this; + } + public Builder setQuery(@NonNull String query) { + mIsCategory = false; mQuery = query; return this; } diff --git a/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java b/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java index c0c63f767a..aad45f3e63 100644 --- a/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/DrivingOptionsScreen.java @@ -14,7 +14,7 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.routing.RoutingOptions; import app.organicmaps.settings.RoadType; diff --git a/android/src/app/organicmaps/car/screens/settings/HelpScreen.java b/android/src/app/organicmaps/car/screens/settings/HelpScreen.java index 68c290c721..45b030b912 100644 --- a/android/src/app/organicmaps/car/screens/settings/HelpScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/HelpScreen.java @@ -14,7 +14,7 @@ import app.organicmaps.BuildConfig; import app.organicmaps.Framework; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.DateUtils; diff --git a/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java b/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java index a09320962e..8f705011e8 100644 --- a/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java +++ b/android/src/app/organicmaps/car/screens/settings/SettingsScreen.java @@ -15,7 +15,7 @@ import androidx.core.graphics.drawable.IconCompat; import app.organicmaps.R; import app.organicmaps.car.SurfaceRenderer; -import app.organicmaps.car.util.UiHelpers; +import app.organicmaps.car.UiHelpers; import app.organicmaps.car.screens.base.BaseMapScreen; import app.organicmaps.util.Config; diff --git a/android/src/app/organicmaps/car/util/OnBackPressedCallback.java b/android/src/app/organicmaps/car/util/OnBackPressedCallback.java new file mode 100644 index 0000000000..bbf5a5183c --- /dev/null +++ b/android/src/app/organicmaps/car/util/OnBackPressedCallback.java @@ -0,0 +1,30 @@ +package app.organicmaps.car.util; + +import androidx.annotation.NonNull; +import androidx.car.app.CarContext; +import androidx.car.app.ScreenManager; + +public class OnBackPressedCallback extends androidx.activity.OnBackPressedCallback +{ + public interface Callback + { + void onBackPressed(); + } + + private final ScreenManager mScreenManager; + private final Callback mCallback; + + public OnBackPressedCallback(@NonNull CarContext carContext, @NonNull Callback callback) + { + super(true); + mScreenManager = carContext.getCarService(ScreenManager.class); + mCallback = callback; + } + + @Override + public void handleOnBackPressed() + { + mCallback.onBackPressed(); + mScreenManager.pop(); + } +} diff --git a/android/src/app/organicmaps/editor/HoursMinutesPickerFragment.java b/android/src/app/organicmaps/editor/HoursMinutesPickerFragment.java index 3708921150..18045e86b9 100644 --- a/android/src/app/organicmaps/editor/HoursMinutesPickerFragment.java +++ b/android/src/app/organicmaps/editor/HoursMinutesPickerFragment.java @@ -140,14 +140,15 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment mTabs = root.findViewById(R.id.tabs); TextView tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); - tabView.setText(getResources().getString(R.string.editor_time_from)); + // TODO @yunik add translations + tabView.setText("From"); final ColorStateList textColor = AppCompatResources.getColorStateList(requireContext(), ThemeUtils.isNightTheme(requireContext()) ? R.color.accent_color_selector_night : R.color.accent_color_selector); tabView.setTextColor(textColor); mTabs.addTab(mTabs.newTab().setCustomView(tabView), true); tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false); - tabView.setText(getResources().getString(R.string.editor_time_to)); + tabView.setText("To"); tabView.setTextColor(textColor); mTabs.addTab(mTabs.newTab().setCustomView(tabView), true); mTabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() diff --git a/android/src/app/organicmaps/location/AndroidNativeProvider.java b/android/src/app/organicmaps/location/AndroidNativeProvider.java index e9ae5e2b56..05c9ed8470 100644 --- a/android/src/app/organicmaps/location/AndroidNativeProvider.java +++ b/android/src/app/organicmaps/location/AndroidNativeProvider.java @@ -14,9 +14,11 @@ import androidx.core.location.LocationManagerCompat; import androidx.core.location.LocationRequestCompat; import app.organicmaps.MwmApplication; +import app.organicmaps.util.LocationUtils; import app.organicmaps.util.log.Logger; import java.util.HashSet; +import java.util.List; import java.util.Set; class AndroidNativeProvider extends BaseLocationProvider @@ -86,17 +88,21 @@ class AndroidNativeProvider extends BaseLocationProvider .setQuality(LocationRequestCompat.QUALITY_HIGH_ACCURACY) .build(); - // API 31+ provides `fused` provider which aggregates `gps` and `network` and potentially other sensors as well. - // Unfortunately, certain LineageOS ROMs have broken `fused` provider that pretends to be enabled, but in - // reality it does absolutely nothing and doesn't return any location updates. For this reason, we try all - // (`fused`, `network`, `gps`) providers here, but prefer `fused` in LocationHelper.onLocationChanged(). - // - // https://developer.android.com/reference/android/location/LocationManager#FUSED_PROVIDER - // https://issuetracker.google.com/issues/215186921#comment3 - // https://github.com/organicmaps/organicmaps/issues/4158 - // - mProviders.addAll(mLocationManager.getProviders(true)); - mProviders.remove(LocationManager.PASSIVE_PROVIDER); // not really useful if other providers are enabled. + if (mLocationManager.isProviderEnabled(LocationUtils.FUSED_PROVIDER)) + { + // The FUSED provider takes into account both GPS and NETWORK and potentially other sensors as well. + // https://issuetracker.google.com/issues/215186921#comment3 + mProviders.add(LocationUtils.FUSED_PROVIDER); + } + else + { + if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) + mProviders.add(LocationManager.GPS_PROVIDER); + + if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) + mProviders.add(LocationManager.NETWORK_PROVIDER); + } + if (mProviders.isEmpty()) { // Call this callback in the next event loop to allow LocationHelper::start() to finish. diff --git a/android/src/app/organicmaps/maplayer/MapButtonsController.java b/android/src/app/organicmaps/maplayer/MapButtonsController.java index d7ebb2b9ad..ca948cf4c5 100644 --- a/android/src/app/organicmaps/maplayer/MapButtonsController.java +++ b/android/src/app/organicmaps/maplayer/MapButtonsController.java @@ -13,10 +13,6 @@ import androidx.annotation.Nullable; import androidx.annotation.OptIn; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; -import app.organicmaps.MwmActivity; import app.organicmaps.R; import app.organicmaps.downloader.MapManager; import app.organicmaps.downloader.UpdateInfo; @@ -25,7 +21,7 @@ import app.organicmaps.util.Config; import app.organicmaps.util.ThemeUtils; import app.organicmaps.util.UiUtils; import app.organicmaps.widget.menu.MyPositionButton; -import app.organicmaps.widget.placepage.PlacePageViewModel; +import app.organicmaps.widget.placepage.PlacePageController; import com.google.android.material.badge.BadgeDrawable; import com.google.android.material.badge.BadgeUtils; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -52,28 +48,20 @@ public class MapButtonsController extends Fragment private float mContentWidth; private MapButtonClickListener mMapButtonClickListener; - private PlacePageViewModel mPlacePageViewModel; - private MapButtonsViewModel mMapButtonsViewModel; - - private final Observer mPlacePageDistanceToTopObserver = this::move; - private final Observer mButtonHiddenObserver = this::setButtonsHidden; - private final Observer mMyPositionModeObserver = this::updateNavMyPositionButton; - private final Observer mMapLayerModeObserver = this::toggleMapLayer; - private final Observer mSearchOptionObserver = this::onSearchOptionChange; + private View.OnClickListener mOnSearchCanceledListener; + private PlacePageController mPlacePageController; + private OnBottomButtonsHeightChangedListener mOnBottomButtonsHeightChangedListener; + private LayoutMode mLayoutMode; + private int mMyPositionMode; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - final FragmentActivity activity = requireActivity(); - mMapButtonClickListener = (MwmActivity) activity; - mPlacePageViewModel = new ViewModelProvider(activity).get(PlacePageViewModel.class); - mMapButtonsViewModel = new ViewModelProvider(activity).get(MapButtonsViewModel.class); - final LayoutMode layoutMode = mMapButtonsViewModel.getLayoutMode().getValue(); - if (layoutMode == LayoutMode.navigation) + if (mLayoutMode == LayoutMode.navigation) mFrame = inflater.inflate(R.layout.map_buttons_layout_navigation, container, false); - else if (layoutMode == LayoutMode.planning) + else if (mLayoutMode == LayoutMode.planning) mFrame = inflater.inflate(R.layout.map_buttons_layout_planning, container, false); else mFrame = inflater.inflate(R.layout.map_buttons_layout_regular, container, false); @@ -87,51 +75,44 @@ public class MapButtonsController extends Fragment { helpButton.setImageResource(R.drawable.logo); // Keep this button colorful in normal theme. - if (!ThemeUtils.isNightTheme(requireContext())) + if (!ThemeUtils.isNightTheme(getContext())) helpButton.getDrawable().setTintList(null); } final View zoomFrame = mFrame.findViewById(R.id.zoom_buttons_container); mFrame.findViewById(R.id.nav_zoom_in) - .setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.zoomIn)); + .setOnClickListener((v) -> mMapButtonClickListener.onClick(MapButtons.zoomIn)); mFrame.findViewById(R.id.nav_zoom_out) - .setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.zoomOut)); + .setOnClickListener((v) -> mMapButtonClickListener.onClick(MapButtons.zoomOut)); final View bookmarksButton = mFrame.findViewById(R.id.btn_bookmarks); - bookmarksButton.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.bookmarks)); + bookmarksButton.setOnClickListener((v) -> mMapButtonClickListener.onClick(MapButtons.bookmarks)); final View myPosition = mFrame.findViewById(R.id.my_position); - mNavMyPosition = new MyPositionButton(myPosition, (v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.myPosition)); + mNavMyPosition = new MyPositionButton(myPosition, mMyPositionMode, (v) -> mMapButtonClickListener.onClick(MapButtons.myPosition)); // Some buttons do not exist in navigation mode final FloatingActionButton layersButton = mFrame.findViewById(R.id.layers_button); if (layersButton != null) { - mToggleMapLayerController = new MapLayersController( - layersButton, - () -> mMapButtonClickListener.onMapButtonClick(MapButtons.toggleMapLayer), - requireActivity(), - mMapButtonsViewModel); + mToggleMapLayerController = new MapLayersController(layersButton, + () -> mMapButtonClickListener.onClick(MapButtons.toggleMapLayer), requireActivity()); } final View menuButton = mFrame.findViewById(R.id.menu_button); if (menuButton != null) { - menuButton.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.menu)); + menuButton.setOnClickListener((v) -> mMapButtonClickListener.onClick(MapButtons.menu)); // This hack is needed to show the badge on the initial startup. For some reason, updateMenuBadge does not work from onResume() there. menuButton.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override - public void onGlobalLayout() - { + public void onGlobalLayout() { updateMenuBadge(); menuButton.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); } if (helpButton != null) - helpButton.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.help)); + helpButton.setOnClickListener((v) -> mMapButtonClickListener.onClick(MapButtons.help)); - mSearchWheel = new SearchWheel(mFrame, - (v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.search), - (v) -> mMapButtonClickListener.onSearchCanceled(), - mMapButtonsViewModel); + mSearchWheel = new SearchWheel(mFrame, (v) -> mMapButtonClickListener.onClick(MapButtons.search), mOnSearchCanceledListener); final View searchButton = mFrame.findViewById(R.id.btn_search); // Used to get the maximum height the buttons will evolve in @@ -154,9 +135,25 @@ public class MapButtonsController extends Fragment UiUtils.setViewInsetsPadding(view, windowInsets); return windowInsets; }); + return mFrame; } + public LayoutMode getLayoutMode() + { + return mLayoutMode; + } + + public void init(LayoutMode layoutMode, int myPositionMode, MapButtonClickListener mapButtonClickListener, @NonNull View.OnClickListener onSearchCanceledListener, PlacePageController placePageController, OnBottomButtonsHeightChangedListener onBottomButtonsHeightChangedListener) + { + mLayoutMode = layoutMode; + mMyPositionMode = myPositionMode; + mMapButtonClickListener = mapButtonClickListener; + mOnSearchCanceledListener = onSearchCanceledListener; + mPlacePageController = placePageController; + mOnBottomButtonsHeightChangedListener = onBottomButtonsHeightChangedListener; + } + public void showButton(boolean show, MapButtonsController.MapButtons button) { // TODO(AB): Why do we need this check? Isn't it better to crash and fix the wrong logic ASAP? @@ -212,12 +209,7 @@ public class MapButtonsController extends Fragment private boolean isBehindPlacePage(View v) { - if (mPlacePageViewModel == null) - return false; - final Integer placePageWidth = mPlacePageViewModel.getPlacePageWidth().getValue(); - if (placePageWidth != null) - return !(mContentWidth / 2 > (placePageWidth.floatValue() / 2.0) + v.getWidth()); - return true; + return !(mContentWidth / 2 > (mPlacePageController.getPlacePageWidth() / 2.0) + v.getWidth()); } private boolean isMoving(View v) @@ -267,7 +259,7 @@ public class MapButtonsController extends Fragment } } - private float getBottomButtonsHeight() + public float getBottomButtonsHeight() { if (mBottomButtonsFrame != null && mFrame != null && UiUtils.isVisible(mFrame)) return mBottomButtonsFrame.getMeasuredHeight(); @@ -275,12 +267,16 @@ public class MapButtonsController extends Fragment return 0; } - public void setButtonsHidden(boolean buttonHidden) + public void showMapButtons(boolean show) { - UiUtils.showIf(!buttonHidden, mFrame); - if (!buttonHidden) + if (show) + { + UiUtils.show(mFrame); updateButtonsVisibility(); - mMapButtonsViewModel.setBottomButtonsHeight(getBottomButtonsHeight()); + } + else + UiUtils.hide(mFrame); + mOnBottomButtonsHeightChangedListener.OnBottomButtonsHeightChanged(); } private boolean isInNavigationMode() @@ -288,15 +284,10 @@ public class MapButtonsController extends Fragment return RoutingController.get().isPlanning() || RoutingController.get().isNavigating(); } - public void toggleMapLayer(@Nullable Mode mode) + public void toggleMapLayer(@NonNull Mode mode) { if (mToggleMapLayerController != null) - { - if (mode == null) - mToggleMapLayerController.disableModes(); - else - mToggleMapLayerController.enableMode(mode); - } + mToggleMapLayerController.toggleMode(mode); } public void updateNavMyPositionButton(int newMode) @@ -310,18 +301,6 @@ public class MapButtonsController extends Fragment return (int) (translation + v.getTop()); } - @Override - public void onStart() - { - super.onStart(); - final FragmentActivity activity = requireActivity(); - mPlacePageViewModel.getPlacePageDistanceToTop().observe(activity, mPlacePageDistanceToTopObserver); - mMapButtonsViewModel.getButtonsHidden().observe(activity, mButtonHiddenObserver); - mMapButtonsViewModel.getMyPositionMode().observe(activity, mMyPositionModeObserver); - mMapButtonsViewModel.getMapLayerMode().observe(activity, mMapLayerModeObserver); - mMapButtonsViewModel.getSearchOption().observe(activity, mSearchOptionObserver); - } - public void onResume() { super.onResume(); @@ -329,21 +308,19 @@ public class MapButtonsController extends Fragment updateMenuBadge(); } - @Override - public void onStop() + public void resetSearch() { - super.onStop(); - mPlacePageViewModel.getPlacePageDistanceToTop().removeObserver(mPlacePageDistanceToTopObserver); - mMapButtonsViewModel.getButtonsHidden().removeObserver(mButtonHiddenObserver); - mMapButtonsViewModel.getMyPositionMode().removeObserver(mMyPositionModeObserver); - mMapButtonsViewModel.getMapLayerMode().removeObserver(mMapLayerModeObserver); - mMapButtonsViewModel.getSearchOption().removeObserver(mSearchOptionObserver); + mSearchWheel.reset(); } - public void onSearchOptionChange(@Nullable SearchWheel.SearchOption searchOption) + public void saveNavSearchState(@NonNull Bundle outState) { - if (searchOption == null) - mSearchWheel.reset(); + mSearchWheel.saveState(outState); + } + + public void restoreNavSearchState(@NonNull Bundle savedInstanceState) + { + mSearchWheel.restoreState(savedInstanceState); } public enum LayoutMode @@ -368,9 +345,12 @@ public class MapButtonsController extends Fragment public interface MapButtonClickListener { - void onMapButtonClick(MapButtons button); + void onClick(MapButtons button); + } - void onSearchCanceled(); + public interface OnBottomButtonsHeightChangedListener + { + void OnBottomButtonsHeightChanged(); } private class ContentViewLayoutChangeListener implements View.OnLayoutChangeListener @@ -389,7 +369,7 @@ public class MapButtonsController extends Fragment { mContentHeight = bottom - top; mContentWidth = right - left; - mMapButtonsViewModel.setBottomButtonsHeight(getBottomButtonsHeight()); + mOnBottomButtonsHeightChangedListener.OnBottomButtonsHeightChanged(); mContentView.removeOnLayoutChangeListener(this); } } diff --git a/android/src/app/organicmaps/maplayer/MapButtonsViewModel.java b/android/src/app/organicmaps/maplayer/MapButtonsViewModel.java deleted file mode 100644 index eb50db7202..0000000000 --- a/android/src/app/organicmaps/maplayer/MapButtonsViewModel.java +++ /dev/null @@ -1,75 +0,0 @@ -package app.organicmaps.maplayer; - -import androidx.annotation.Nullable; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class MapButtonsViewModel extends ViewModel -{ - private final MutableLiveData mButtonsHidden = new MutableLiveData<>(false); - private final MutableLiveData mBottomButtonsHeight = new MutableLiveData<>(0f); - private final MutableLiveData mLayoutMode = new MutableLiveData<>(MapButtonsController.LayoutMode.regular); - private final MutableLiveData mMyPositionMode = new MutableLiveData<>(); - private final MutableLiveData mMapLayerMode = new MutableLiveData<>(); - private final MutableLiveData mSearchOption = new MutableLiveData<>(); - - public MutableLiveData getButtonsHidden() - { - return mButtonsHidden; - } - - public void setButtonsHidden(boolean buttonsHidden) - { - mButtonsHidden.setValue(buttonsHidden); - } - - public MutableLiveData getBottomButtonsHeight() - { - return mBottomButtonsHeight; - } - - public void setBottomButtonsHeight(float height) - { - mBottomButtonsHeight.setValue(height); - } - - public MutableLiveData getLayoutMode() - { - return mLayoutMode; - } - - public void setLayoutMode(MapButtonsController.LayoutMode layoutMode) - { - mLayoutMode.setValue(layoutMode); - } - - public MutableLiveData getMyPositionMode() - { - return mMyPositionMode; - } - - public void setMyPositionMode(int mode) - { - mMyPositionMode.setValue(mode); - } - - public MutableLiveData getMapLayerMode() - { - return mMapLayerMode; - } - - public void setMapLayerMode(Mode mode) - { - mMapLayerMode.setValue(mode); - } - - public MutableLiveData getSearchOption() - { - return mSearchOption; - } - - public void setSearchOption(@Nullable SearchWheel.SearchOption searchOption) - { - mSearchOption.setValue(searchOption); - } -} diff --git a/android/src/app/organicmaps/maplayer/MapLayersController.java b/android/src/app/organicmaps/maplayer/MapLayersController.java index 4fd0a4dcb7..4b1cca8595 100644 --- a/android/src/app/organicmaps/maplayer/MapLayersController.java +++ b/android/src/app/organicmaps/maplayer/MapLayersController.java @@ -23,19 +23,21 @@ public class MapLayersController OnShowMenuListener mOnShowMenuListener; @NonNull private Mode mCurrentLayer; - private final MapButtonsViewModel mMapButtonsViewModel; - public MapLayersController(@NonNull ImageButton layersButton, @NonNull OnShowMenuListener onShowMenuListener, @NonNull Activity activity, MapButtonsViewModel mapButtonsViewModel) + public MapLayersController(@NonNull ImageButton layersButton, @NonNull OnShowMenuListener onShowMenuListener, @NonNull Activity activity) { mActivity = activity; - mMapButtonsViewModel = mapButtonsViewModel; mLayersButton = layersButton; mLayersButton.setOnClickListener(view -> onLayersButtonClick()); mOnShowMenuListener = onShowMenuListener; mLayers = LayersUtils.getAvailableLayers(); mCurrentLayer = getCurrentLayer(); - // View model only expects a layer if it is active - mMapButtonsViewModel.setMapLayerMode(mCurrentLayer.isEnabled(activity) ? mCurrentLayer : null); + initMode(); + } + + private void initMode() + { + setEnabled(mCurrentLayer.isEnabled(mActivity)); showButton(true); } @@ -74,21 +76,16 @@ public class MapLayersController private void onLayersButtonClick() { if (mCurrentLayer.isEnabled(mActivity)) - mMapButtonsViewModel.setMapLayerMode(null); + setEnabled(false); else mOnShowMenuListener.onShow(); } - public void disableModes() - { - setEnabled(false); - } - - public void enableMode(@NonNull Mode mode) + public void toggleMode(@NonNull Mode mode) { setCurrentLayer(mode); showButton(true); - setEnabled(true); + setEnabled(!mode.isEnabled(mActivity)); } public void showButton(boolean show) diff --git a/android/src/app/organicmaps/maplayer/SearchWheel.java b/android/src/app/organicmaps/maplayer/SearchWheel.java index debd29e910..6e952bd5d7 100644 --- a/android/src/app/organicmaps/maplayer/SearchWheel.java +++ b/android/src/app/organicmaps/maplayer/SearchWheel.java @@ -26,6 +26,7 @@ import app.organicmaps.util.concurrency.UiThread; public class SearchWheel implements View.OnClickListener { + private static final String EXTRA_CURRENT_OPTION = "extra_current_option"; private final View mFrame; private View mSearchLayout; @@ -34,11 +35,12 @@ public class SearchWheel implements View.OnClickListener private final View mTouchInterceptor; private boolean mIsExpanded; + @Nullable + private SearchOption mCurrentOption; @NonNull private final View.OnClickListener mOnSearchPressedListener; @NonNull private final View.OnClickListener mOnSearchCanceledListener; - private MapButtonsViewModel mMapButtonsViewModel; private static final long CLOSE_DELAY_MILLIS = 5000L; private final Runnable mCloseRunnable = new Runnable() { @@ -53,7 +55,7 @@ public class SearchWheel implements View.OnClickListener } }; - public enum SearchOption + private enum SearchOption { FUEL(R.id.search_fuel, R.drawable.ic_routing_fuel_off, R.string.fuel), PARKING(R.id.search_parking, R.drawable.ic_routing_parking_off, R.string.parking), @@ -101,11 +103,9 @@ public class SearchWheel implements View.OnClickListener } } - public SearchWheel(View frame, @NonNull View.OnClickListener onSearchPressedListener, - @NonNull View.OnClickListener onSearchCanceledListener, MapButtonsViewModel mapButtonsViewModel) + public SearchWheel(View frame, @NonNull View.OnClickListener onSearchPressedListener, @NonNull View.OnClickListener onSearchCanceledListener) { mFrame = frame; - mMapButtonsViewModel = mapButtonsViewModel; mOnSearchPressedListener = onSearchPressedListener; mOnSearchCanceledListener = onSearchCanceledListener; mTouchInterceptor = mFrame.findViewById(R.id.touch_interceptor); @@ -151,15 +151,26 @@ public class SearchWheel implements View.OnClickListener UiUtils.showIf(show && mIsExpanded, mSearchLayout); } + public void saveState(@NonNull Bundle outState) + { + outState.putSerializable(EXTRA_CURRENT_OPTION, mCurrentOption); + } + + public void restoreState(@NonNull Bundle savedState) + { + mCurrentOption = Utils.getSerializable(savedState, EXTRA_CURRENT_OPTION, SearchOption.class); + } + public void reset() { mIsExpanded = false; + mCurrentOption = null; resetSearchButtonImage(); } public void onResume() { - if (mMapButtonsViewModel.getSearchOption().getValue() != null) + if (mCurrentOption != null) { refreshSearchButtonImage(); return; @@ -172,6 +183,7 @@ public class SearchWheel implements View.OnClickListener return; } + mCurrentOption = SearchOption.fromSearchQuery(query, mFrame.getContext()); refreshSearchButtonImage(); } @@ -232,11 +244,10 @@ public class SearchWheel implements View.OnClickListener private void refreshSearchButtonImage() { - final SearchOption searchOption = mMapButtonsViewModel.getSearchOption().getValue(); mSearchButton.setImageDrawable(Graphics.tint(mSearchButton.getContext(), - searchOption == null ? + mCurrentOption == null ? R.drawable.ic_routing_search_off : - searchOption.mDrawableOff, + mCurrentOption.mDrawableOff, R.attr.colorAccent)); } @@ -267,7 +278,7 @@ public class SearchWheel implements View.OnClickListener return; } - if (mMapButtonsViewModel.getSearchOption().getValue() != null || !TextUtils.isEmpty(SearchEngine.INSTANCE.getQuery())) + if (mCurrentOption != null || !TextUtils.isEmpty(SearchEngine.INSTANCE.getQuery())) { mOnSearchCanceledListener.onClick(v); refreshSearchVisibility(); @@ -292,7 +303,7 @@ public class SearchWheel implements View.OnClickListener private void startSearch(SearchOption searchOption) { - mMapButtonsViewModel.setSearchOption(searchOption); + mCurrentOption = searchOption; final String query = mFrame.getContext().getString(searchOption.mQueryId); // Category request from navigation search wheel. SearchEngine.INSTANCE.searchInteractive(mFrame.getContext(), query, true, System.nanoTime(), false); diff --git a/android/src/app/organicmaps/maplayer/ToggleMapLayerFragment.java b/android/src/app/organicmaps/maplayer/ToggleMapLayerFragment.java index 82181db600..205f4c769c 100644 --- a/android/src/app/organicmaps/maplayer/ToggleMapLayerFragment.java +++ b/android/src/app/organicmaps/maplayer/ToggleMapLayerFragment.java @@ -9,23 +9,24 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import app.organicmaps.R; import app.organicmaps.maplayer.isolines.IsolinesManager; +import app.organicmaps.widget.recycler.SpanningLinearLayoutManager; import app.organicmaps.util.SharedPropertiesUtils; import app.organicmaps.util.Utils; -import app.organicmaps.widget.recycler.SpanningLinearLayoutManager; import java.util.ArrayList; import java.util.List; public class ToggleMapLayerFragment extends Fragment { + @Nullable + private LayerItemClickListener mLayerItemClickListener; @Nullable private LayersAdapter mAdapter; - private MapButtonsViewModel mMapButtonsViewModel; @Nullable @Override @@ -33,7 +34,8 @@ public class ToggleMapLayerFragment extends Fragment { View mRoot = inflater.inflate(R.layout.fragment_toggle_map_layer, container, false); - mMapButtonsViewModel = new ViewModelProvider(requireActivity()).get(MapButtonsViewModel.class); + if (requireActivity() instanceof LayerItemClickListener) + mLayerItemClickListener = ((LayerItemClickListener) requireActivity()); initRecycler(mRoot); return mRoot; @@ -70,6 +72,12 @@ public class ToggleMapLayerFragment extends Fragment mAdapter.notifyDataSetChanged(); if (IsolinesManager.from(context).shouldShowNotification()) Utils.showSnackbar(context, v.getRootView(), R.string.isolines_toast_zooms_1_10); - mMapButtonsViewModel.setMapLayerMode(mode); + if (mLayerItemClickListener != null) + mLayerItemClickListener.onLayerItemClick(mode); + } + + public interface LayerItemClickListener + { + void onLayerItemClick(@NonNull Mode mode); } } diff --git a/android/src/app/organicmaps/routing/NavigationController.java b/android/src/app/organicmaps/routing/NavigationController.java index e7a35358f9..88b08fc09f 100644 --- a/android/src/app/organicmaps/routing/NavigationController.java +++ b/android/src/app/organicmaps/routing/NavigationController.java @@ -21,16 +21,17 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.bottomsheet.BottomSheetBehavior; import app.organicmaps.Framework; import app.organicmaps.MwmActivity; import app.organicmaps.R; import app.organicmaps.base.MediaPlayerWrapper; +import app.organicmaps.maplayer.MapButtonsController; import app.organicmaps.maplayer.traffic.TrafficManager; import app.organicmaps.sound.TtsPlayer; +import app.organicmaps.widget.menu.NavMenu; import app.organicmaps.util.UiUtils; import app.organicmaps.util.Utils; -import app.organicmaps.widget.menu.NavMenu; -import com.google.android.material.bottomsheet.BottomSheetBehavior; import java.util.Arrays; @@ -58,7 +59,10 @@ public class NavigationController implements Application.ActivityLifecycleCallba private final RecyclerView mLanes; @NonNull private final LanesAdapter mLanesAdapter; - + + @NonNull + private final MapButtonsController mMapButtonsController; + @NonNull private final MediaPlayer.OnCompletionListener mSpeedCamSignalCompletionListener; @@ -102,12 +106,13 @@ public class NavigationController implements Application.ActivityLifecycleCallba mLanes.setNestedScrollingEnabled(false); } - public NavigationController(AppCompatActivity activity, View.OnClickListener onSettingsClickListener, - NavMenu.OnMenuSizeChangedListener onMenuSizeChangedListener) + public NavigationController(AppCompatActivity activity, @NonNull MapButtonsController mapButtonsController, + View.OnClickListener onSettingsClickListener, NavMenu.OnMenuSizeChangedListener onMenuSizeChangedListener) { mFrame = activity.findViewById(R.id.navigation_frame); mNavMenu = new NavMenu(activity, this, onMenuSizeChangedListener); mOnSettingsClickListener = onSettingsClickListener; + mMapButtonsController = mapButtonsController; // Top frame View topFrame = mFrame.findViewById(R.id.nav_top_frame); @@ -149,6 +154,8 @@ public class NavigationController implements Application.ActivityLifecycleCallba public void stop(MwmActivity parent) { + mMapButtonsController.resetSearch(); + if (mBound) { parent.unbindService(mServiceConnection); @@ -323,6 +330,7 @@ public class NavigationController implements Application.ActivityLifecycleCallba public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { outState.putBoolean(STATE_BOUND, mBound); + mMapButtonsController.saveNavSearchState(outState); } public void onRestoreState(@NonNull Bundle savedInstanceState, @NonNull MwmActivity parent) @@ -330,6 +338,7 @@ public class NavigationController implements Application.ActivityLifecycleCallba mBound = savedInstanceState.getBoolean(STATE_BOUND); if (mBound) start(parent); + mMapButtonsController.restoreNavSearchState(savedInstanceState); } @Override diff --git a/android/src/app/organicmaps/routing/RoutingController.java b/android/src/app/organicmaps/routing/RoutingController.java index dc2af0485a..7ef16dfbd4 100644 --- a/android/src/app/organicmaps/routing/RoutingController.java +++ b/android/src/app/organicmaps/routing/RoutingController.java @@ -1,17 +1,23 @@ package app.organicmaps.routing; import android.content.Context; +import android.content.DialogInterface; import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; import androidx.annotation.DimenRes; import androidx.annotation.IntRange; import androidx.annotation.MainThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.core.util.Pair; +import androidx.fragment.app.FragmentActivity; import app.organicmaps.Framework; +import app.organicmaps.MwmApplication; import app.organicmaps.R; import app.organicmaps.base.Initializable; import app.organicmaps.bookmarks.data.FeatureId; @@ -23,6 +29,7 @@ import app.organicmaps.util.StringUtils; import app.organicmaps.util.Utils; import app.organicmaps.util.concurrency.UiThread; import app.organicmaps.util.log.Logger; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.Calendar; import java.util.concurrent.TimeUnit; @@ -67,7 +74,7 @@ public class RoutingController implements Initializable default boolean isSubwayEnabled() { return false; } default void onCommonBuildError(int lastResultCode, @NonNull String[] lastMissingMaps) {} default void onDrivingOptionsBuildError() {} - default void onShowDisclaimer(@Nullable MapObject startPoint, @Nullable MapObject endPoint) {} + default void onShowDisclaimer() {} default void onSuggestRebuildRoute() {} /** @@ -353,6 +360,11 @@ public class RoutingController implements Initializable prepare(getStartPoint(), getEndPoint(), false); } + public void prepare() + { + prepare(getStartPoint(), getEndPoint()); + } + public void prepare(@Nullable MapObject startPoint, @Nullable MapObject endPoint) { prepare(startPoint, endPoint, false); @@ -365,12 +377,12 @@ public class RoutingController implements Initializable if (!Config.isRoutingDisclaimerAccepted()) { if (mContainer != null) - mContainer.onShowDisclaimer(startPoint, endPoint); + mContainer.onShowDisclaimer(); return; } initLastRouteType(startPoint, endPoint, fromApi); - prepare(startPoint, endPoint, mLastRouterType); + prepare(startPoint, endPoint, mLastRouterType, fromApi); } private void initLastRouteType(@Nullable MapObject startPoint, @Nullable MapObject endPoint, @@ -394,6 +406,12 @@ public class RoutingController implements Initializable public void prepare(final @Nullable MapObject startPoint, final @Nullable MapObject endPoint, @Framework.RouterType int routerType) + { + prepare(startPoint, endPoint, routerType, false); + } + + public void prepare(final @Nullable MapObject startPoint, final @Nullable MapObject endPoint, + @Framework.RouterType int routerType, boolean fromApi) { cancel(); setState(State.PREPARE); @@ -476,6 +494,11 @@ public class RoutingController implements Initializable return false; } + private void removeIntermediatePoints() + { + Framework.nativeRemoveIntermediateRoutePoints(); + } + @NonNull private MapObject toMapObject(@NonNull RouteMarkData point) { @@ -593,12 +616,12 @@ public class RoutingController implements Initializable return mState == State.PREPARE; } - public boolean isTransitType() + boolean isTransitType() { return mLastRouterType == Framework.ROUTER_TYPE_TRANSIT; } - public boolean isVehicleRouterType() + boolean isVehicleRouterType() { return mLastRouterType == Framework.ROUTER_TYPE_VEHICLE; } @@ -718,7 +741,7 @@ public class RoutingController implements Initializable mContainer.updateMenu(); } - public void checkAndBuildRoute() + void checkAndBuildRoute() { if (isWaitingPoiPick()) showRoutePlan(); diff --git a/android/src/app/organicmaps/search/NativeSearchListener.java b/android/src/app/organicmaps/search/NativeSearchListener.java index 01ddde1c14..8eebcb9acf 100644 --- a/android/src/app/organicmaps/search/NativeSearchListener.java +++ b/android/src/app/organicmaps/search/NativeSearchListener.java @@ -12,7 +12,7 @@ public interface NativeSearchListener * @param results Search results. * @param timestamp Timestamp of search request. */ - default void onResultsUpdate(@NonNull SearchResult[] results, long timestamp) {} + void onResultsUpdate(@NonNull SearchResult[] results, long timestamp); /** * @param timestamp Timestamp of search request. diff --git a/android/src/app/organicmaps/search/SearchAdapter.java b/android/src/app/organicmaps/search/SearchAdapter.java index 050e7f37d0..eb660755f5 100644 --- a/android/src/app/organicmaps/search/SearchAdapter.java +++ b/android/src/app/organicmaps/search/SearchAdapter.java @@ -2,11 +2,18 @@ package app.organicmaps.search; import android.content.Context; import android.content.res.Resources; +import android.graphics.Typeface; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.AttrRes; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; @@ -16,6 +23,7 @@ import app.organicmaps.R; import app.organicmaps.util.Graphics; import app.organicmaps.util.ThemeUtils; import app.organicmaps.util.UiUtils; +import app.organicmaps.util.Utils; class SearchAdapter extends RecyclerView.Adapter { @@ -113,6 +121,15 @@ class SearchAdapter extends RecyclerView.Adapter private static final String TAG = TtsPlayer.class.getSimpleName(); private static final Locale DEFAULT_LOCALE = Locale.US; - private static final float SPEECH_RATE = 1.0f; + private static final float SPEECH_RATE = 1.2f; private static final int TTS_SPEAK_DELAY_MILLIS = 50; private TextToSpeech mTts; diff --git a/android/src/app/organicmaps/util/Config.java b/android/src/app/organicmaps/util/Config.java index e46d608acf..7ed73e0007 100644 --- a/android/src/app/organicmaps/util/Config.java +++ b/android/src/app/organicmaps/util/Config.java @@ -10,7 +10,6 @@ import static app.organicmaps.util.Counters.KEY_MISC_FIRST_START_DIALOG_SEEN; import static app.organicmaps.util.Counters.KEY_MISC_NEWS_LAST_VERSION; import android.content.Context; -import android.os.Build; import androidx.annotation.NonNull; @@ -199,12 +198,7 @@ public final class Config public static boolean isShowOnLockScreenEnabled() { - // Disabled by default on Android 7.1 and earlier devices. - // See links below for details: - // https://github.com/organicmaps/organicmaps/issues/2857 - // https://github.com/organicmaps/organicmaps/issues/3967 - final boolean defaultValue = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; - return getBool(KEY_MISC_SHOW_ON_LOCK_SCREEN, defaultValue); + return getBool(KEY_MISC_SHOW_ON_LOCK_SCREEN, true); } public static void setShowOnLockScreenEnabled(boolean enabled) diff --git a/android/src/app/organicmaps/widget/menu/MyPositionButton.java b/android/src/app/organicmaps/widget/menu/MyPositionButton.java index e757d071c6..894b03979a 100644 --- a/android/src/app/organicmaps/widget/menu/MyPositionButton.java +++ b/android/src/app/organicmaps/widget/menu/MyPositionButton.java @@ -30,13 +30,13 @@ public class MyPositionButton private final int mFollowPaddingShift; - public MyPositionButton(@NonNull View button, @NonNull View.OnClickListener listener) + public MyPositionButton(@NonNull View button, int myPositionMode, @NonNull View.OnClickListener listener) { mButton = (FloatingActionButton) button; mButton.setOnClickListener(listener); mIcons.clear(); mFollowPaddingShift = (int) (FOLLOW_SHIFT * button.getResources().getDisplayMetrics().density); - update(LocationState.nativeGetMode()); + update(myPositionMode); } public void update(int mode) diff --git a/android/src/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java b/android/src/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapter.java similarity index 99% rename from android/src/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java rename to android/src/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapter.java index c08815c22e..f232f76131 100644 --- a/android/src/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapter.java +++ b/android/src/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapter.java @@ -1,4 +1,4 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import android.view.LayoutInflater; import android.view.View; diff --git a/android/src/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java b/android/src/app/organicmaps/widget/placepage/PlacePageBookmarkFragment.java similarity index 93% rename from android/src/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java rename to android/src/app/organicmaps/widget/placepage/PlacePageBookmarkFragment.java index db15d99893..75ec8aa81a 100644 --- a/android/src/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageBookmarkFragment.java @@ -1,4 +1,4 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import android.content.Context; import android.os.Bundle; @@ -26,8 +26,6 @@ import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.util.StringUtils; import app.organicmaps.util.UiUtils; import app.organicmaps.util.Utils; -import app.organicmaps.widget.placepage.EditBookmarkFragment; -import app.organicmaps.widget.placepage.PlacePageViewModel; public class PlacePageBookmarkFragment extends Fragment implements View.OnClickListener, View.OnLongClickListener, @@ -75,16 +73,16 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL } @Override - public void onStart() + public void onResume() { - super.onStart(); + super.onResume(); mViewModel.getMapObject().observe(requireActivity(), this); } @Override - public void onStop() + public void onPause() { - super.onStop(); + super.onPause(); mViewModel.getMapObject().removeObserver(this); } @@ -143,12 +141,12 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL } @Override - public void onChanged(@Nullable MapObject mapObject) + public void onChanged(MapObject mapObject) { // MapObject could be something else than a bookmark if the user already has the place page // opened and clicks on a non-bookmarked POI. // This callback would be called before the fragment had time to be destroyed - if (mapObject != null && mapObject.getMapObjectType() == MapObject.BOOKMARK) + if (mapObject.getMapObjectType() == MapObject.BOOKMARK) { currentBookmark = (Bookmark) mapObject; updateBookmarkDetails(); diff --git a/android/src/app/organicmaps/widget/placepage/PlacePageButtons.java b/android/src/app/organicmaps/widget/placepage/PlacePageButtons.java index 6cd35663bb..abecaa59b9 100644 --- a/android/src/app/organicmaps/widget/placepage/PlacePageButtons.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageButtons.java @@ -1,5 +1,6 @@ package app.organicmaps.widget.placepage; +import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -49,24 +50,28 @@ public final class PlacePageButtons extends Fragment implements Observer buttons) diff --git a/android/src/app/organicmaps/widget/placepage/PlacePageController.java b/android/src/app/organicmaps/widget/placepage/PlacePageController.java index 531fb3041e..590929cb26 100644 --- a/android/src/app/organicmaps/widget/placepage/PlacePageController.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageController.java @@ -1,87 +1,101 @@ package app.organicmaps.widget.placepage; import android.animation.ValueAnimator; +import android.annotation.SuppressLint; import android.app.Activity; -import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.core.widget.NestedScrollViewClickFixed; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; +import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import app.organicmaps.Framework; import app.organicmaps.MwmActivity; import app.organicmaps.R; -import app.organicmaps.api.Const; import app.organicmaps.api.ParsedMwmRequest; -import app.organicmaps.bookmarks.data.BookmarkManager; +import app.organicmaps.base.Initializable; +import app.organicmaps.base.Savable; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.bookmarks.data.RoadWarningMarkType; import app.organicmaps.routing.RoutingController; import app.organicmaps.settings.RoadType; -import app.organicmaps.util.SharingUtils; import app.organicmaps.util.UiUtils; import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment; import app.organicmaps.util.bottomsheet.MenuBottomSheetItem; import app.organicmaps.util.log.Logger; + import com.google.android.material.bottomsheet.BottomSheetBehavior; import java.util.ArrayList; import java.util.List; +import java.util.Objects; -public class PlacePageController extends Fragment implements - PlacePageView.PlacePageViewListener, - PlacePageButtons.PlacePageButtonClickListener, - MenuBottomSheetFragment.MenuBottomSheetInterface, - Observer +public class PlacePageController implements Initializable, + Savable, + PlacePageView.PlacePageViewListener, + PlacePageButtons.PlacePageButtonClickListener, + MenuBottomSheetFragment.MenuBottomSheetInterface, + Observer { private static final String TAG = PlacePageController.class.getSimpleName(); private static final String PLACE_PAGE_BUTTONS_FRAGMENT_TAG = "PLACE_PAGE_BUTTONS"; private static final String PLACE_PAGE_FRAGMENT_TAG = "PLACE_PAGE"; private static final float PREVIEW_PLUS_RATIO = 0.45f; - private BottomSheetBehavior mPlacePageBehavior; - private NestedScrollViewClickFixed mPlacePage; - private ViewGroup mPlacePageContainer; - private ViewGroup mCoordinator; - private int mViewportMinHeight; - private int mButtonsHeight; - private int mMaxButtons; - private PlacePageViewModel mViewModel; + @NonNull + private final SlideListener mSlideListener; + @NonNull + private final BottomSheetBehavior mPlacePageBehavior; + @NonNull + private final NestedScrollViewClickFixed mPlacePage; + @NonNull + private final ViewGroup mPlacePageContainer; + private final ViewGroup mCoordinator; + private final int mViewportMinHeight; + private final AppCompatActivity mMwmActivity; + private final int mButtonsHeight; + private final int mMaxButtons; + private final PlacePageViewModel mViewModel; private int mPreviewHeight; private int mFrameHeight; + private boolean mDeactivateMapSelection = true; @Nullable private MapObject mMapObject; - @Nullable - private MapObject mPreviousMapObject; private WindowInsetsCompat mCurrentWindowInsets; private boolean mShouldCollapse; private int mDistanceToTop; private ValueAnimator mCustomPeekHeightAnimator; - private PlacePageRouteSettingsListener mPlacePageRouteSettingsListener; - private final BottomSheetBehavior.BottomSheetCallback mDefaultBottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() + + class DefaultBottomSheetCallback extends BottomSheetBehavior.BottomSheetCallback { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { + final Lifecycle.State state = mMwmActivity.getLifecycle().getCurrentState(); + if (!state.isAtLeast(Lifecycle.State.RESUMED)) + { + Logger.e(TAG, "Called in the wrong activity state=" + state); + return; + } + Logger.d(TAG, "State change, new = " + PlacePageUtils.toString(newState)); if (PlacePageUtils.isSettlingState(newState) || PlacePageUtils.isDraggingState(newState)) return; - PlacePageUtils.updateMapViewport(mCoordinator, mDistanceToTop, mViewportMinHeight); + PlacePageUtils.moveViewportUp(mPlacePage, mViewportMinHeight); if (PlacePageUtils.isHiddenState(newState)) onHiddenInternal(); @@ -90,48 +104,51 @@ public class PlacePageController extends Fragment implements @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { + final Lifecycle.State state = mMwmActivity.getLifecycle().getCurrentState(); + if (!state.isAtLeast(Lifecycle.State.RESUMED)) + { + Logger.e(TAG, "Called in the wrong activity state=" + state); + return; + } stopCustomPeekHeightAnimation(); mDistanceToTop = bottomSheet.getTop(); - mViewModel.setPlacePageDistanceToTop(mDistanceToTop); + mSlideListener.onPlacePageSlide(mDistanceToTop); } - }; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) - { - return inflater.inflate(R.layout.place_page_container_fragment, container, false); } - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) + @SuppressLint("ClickableViewAccessibility") + public PlacePageController(@Nullable Activity activity, + @NonNull SlideListener listener) { - super.onViewCreated(view, savedInstanceState); - final FragmentActivity activity = requireActivity(); - mPlacePageRouteSettingsListener = (MwmActivity) activity; + mSlideListener = listener; - final Resources res = activity.getResources(); + Objects.requireNonNull(activity); + mMwmActivity = (AppCompatActivity) activity; + mCoordinator = mMwmActivity.findViewById(R.id.coordinator); + Resources res = activity.getResources(); mViewportMinHeight = res.getDimensionPixelSize(R.dimen.viewport_min_height); - mButtonsHeight = (int) res.getDimension(R.dimen.place_page_buttons_height); - mMaxButtons = res.getInteger(R.integer.pp_buttons_max); - - mCoordinator = activity.findViewById(R.id.coordinator); - mPlacePage = view.findViewById(R.id.placepage); - mPlacePageContainer = view.findViewById(R.id.placepage_container); + mPlacePage = activity.findViewById(R.id.placepage); + mPlacePageContainer = activity.findViewById(R.id.placepage_container); mPlacePageBehavior = BottomSheetBehavior.from(mPlacePage); mShouldCollapse = true; + mPlacePageBehavior.addBottomSheetCallback(new DefaultBottomSheetCallback()); mPlacePageBehavior.setHideable(true); mPlacePageBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); mPlacePageBehavior.setFitToContents(true); mPlacePageBehavior.setSkipCollapsed(true); - UiUtils.bringViewToFrontOf(view.findViewById(R.id.pp_buttons_fragment), mPlacePage); + UiUtils.bringViewToFrontOf(activity.findViewById(R.id.pp_buttons_fragment), mPlacePage); - mViewModel = new ViewModelProvider(requireActivity()).get(PlacePageViewModel.class); + mPlacePage.requestApplyInsets(); - ViewCompat.setOnApplyWindowInsetsListener(mPlacePage, (v, windowInsets) -> { + mButtonsHeight = (int) mMwmActivity.getResources() + .getDimension(R.dimen.place_page_buttons_height); + mMaxButtons = mMwmActivity.getResources().getInteger(R.integer.pp_buttons_max); + mViewModel = new ViewModelProvider(mMwmActivity).get(PlacePageViewModel.class); + + ViewCompat.setOnApplyWindowInsetsListener(mPlacePage, (view, windowInsets) -> { mCurrentWindowInsets = windowInsets; return windowInsets; }); @@ -164,12 +181,19 @@ public class PlacePageController extends Fragment implements private void onHiddenInternal() { - Framework.nativeDeactivatePopup(); - PlacePageUtils.updateMapViewport(mCoordinator, mDistanceToTop, mViewportMinHeight); + if (mDeactivateMapSelection) + Framework.nativeDeactivatePopup(); + mDeactivateMapSelection = true; + PlacePageUtils.moveViewportUp(mPlacePage, mViewportMinHeight); resetPlacePageHeightBounds(); removePlacePageFragments(); } + public int getPlacePageWidth() + { + return mPlacePage.getWidth(); + } + @Nullable public ArrayList getMenuBottomSheetItems(String id) { @@ -179,27 +203,24 @@ public class PlacePageController extends Fragment implements ArrayList items = new ArrayList<>(); for (int i = mMaxButtons - 1; i < currentItems.size(); i++) { - final PlacePageButton bsItem = PlacePageButtonFactory.createButton(currentItems.get(i), requireActivity()); + final PlacePageButton bsItem = PlacePageButtonFactory.createButton(currentItems.get(i), mMwmActivity); items.add(new MenuBottomSheetItem( bsItem.getTitle(), bsItem.getIcon(), - () -> onPlacePageButtonClick(bsItem.getType()) + () -> ((PlacePageButtons.PlacePageButtonClickListener) mMwmActivity).onPlacePageButtonClick(bsItem.getType()) )); } return items; } - private void open() + public void openFor(@NonNull PlacePageData data) { + mDeactivateMapSelection = true; + MapObject mapObject = (MapObject) data; + final MapObject previousMapObject = mViewModel.getMapObject().getValue(); // Only collapse the place page if the data is different from the one already available - mShouldCollapse = PlacePageUtils.isHiddenState(mPlacePageBehavior.getState()) || !MapObject.same(mPreviousMapObject, mMapObject); - mPreviousMapObject = mMapObject; - // Place page will automatically open when the bottom sheet content is loaded so we can compute the peek height - } - - private void close() - { - mPlacePageBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); + mShouldCollapse = PlacePageUtils.isHiddenState(mPlacePageBehavior.getState()) || !MapObject.same(previousMapObject, mapObject); + mViewModel.setMapObject(mapObject); } private void resetPlacePageHeightBounds() @@ -278,10 +299,10 @@ public class PlacePageController extends Fragment implements mPlacePageBehavior.setPeekHeight(value); // The place page is not firing the slide callbacks when using this animation, so we must call them manually mDistanceToTop = parentHeight - value - bottomInsets; - mViewModel.setPlacePageDistanceToTop(mDistanceToTop); + mSlideListener.onPlacePageSlide(mDistanceToTop); if (value == peekHeight) { - PlacePageUtils.updateMapViewport(mCoordinator, mDistanceToTop, mViewportMinHeight); + PlacePageUtils.moveViewportUp(mPlacePage, mViewportMinHeight); setPlacePageHeightBounds(); } }); @@ -296,12 +317,37 @@ public class PlacePageController extends Fragment implements return mPreviewHeight + mButtonsHeight; } + public void close(boolean deactivateMapSelection) + { + mDeactivateMapSelection = deactivateMapSelection; + mPlacePageBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); + } + + public boolean isClosed() + { + return PlacePageUtils.isHiddenState(mPlacePageBehavior.getState()); + } + + @Override + public void onSave(@NonNull Bundle outState) + { + // no op + } + + @Override + public void onRestore(@NonNull Bundle inState) + { + if (mPlacePageBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) + return; + if (!Framework.nativeHasPlacePageInfo()) + close(false); + } + @Override public void onPlacePageContentChanged(int previewHeight, int frameHeight) { mPreviewHeight = previewHeight; mFrameHeight = frameHeight; - mViewModel.setPlacePageWidth(mPlacePage.getWidth()); // Make sure to update the peek height on the UI thread to prevent weird animation jumps mPlacePage.post(() -> { setPeekHeight(); @@ -311,6 +357,12 @@ public class PlacePageController extends Fragment implements }); } + @Override + public void onPlacePageRequestClose() + { + close(true); + } + @Override public void onPlacePageRequestToggleState() { @@ -323,150 +375,24 @@ public class PlacePageController extends Fragment implements mPlacePageBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); } + @Override + public void onPlacePageRequestToggleRouteSettings(@NonNull RoadType roadType) + { + // no op + } + @Override public void onPlacePageButtonClick(PlacePageButtons.ButtonType item) { - switch (item) - { - case BOOKMARK_SAVE: - case BOOKMARK_DELETE: - onBookmarkBtnClicked(); - break; - - case SHARE: - onShareBtnClicked(); - break; - - case BACK: - onBackBtnClicked(); - break; - - case ROUTE_FROM: - onRouteFromBtnClicked(); - break; - - case ROUTE_TO: - onRouteToBtnClicked(); - break; - - case ROUTE_ADD: - onRouteAddBtnClicked(); - break; - - case ROUTE_REMOVE: - onRouteRemoveBtnClicked(); - break; - - case ROUTE_AVOID_TOLL: - onAvoidTollBtnClicked(); - break; - - case ROUTE_AVOID_UNPAVED: - onAvoidUnpavedBtnClicked(); - break; - - case ROUTE_AVOID_FERRY: - onAvoidFerryBtnClicked(); - break; - } - } - - private void onBookmarkBtnClicked() - { - // No need to call setMapObject here as the native methods will reopen the place page - if (MapObject.isOfType(MapObject.BOOKMARK, mMapObject)) - Framework.nativeDeleteBookmarkFromMapObject(); - else - BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getLat(), mMapObject.getLon()); - } - - private void onShareBtnClicked() - { - if (mMapObject != null) - SharingUtils.shareMapObject(requireContext(), mMapObject); - } - - private void onBackBtnClicked() - { - if (mMapObject == null) - return; - final ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest(); - if (request != null && request.isPickPointMode()) - { - final Intent result = new Intent(); - result.putExtra(Const.EXTRA_POINT_LAT, mMapObject.getLat()) - .putExtra(Const.EXTRA_POINT_LON, mMapObject.getLon()) - .putExtra(Const.EXTRA_POINT_NAME, mMapObject.getTitle()) - .putExtra(Const.EXTRA_POINT_ID, mMapObject.getApiId()) - .putExtra(Const.EXTRA_ZOOM_LEVEL, Framework.nativeGetDrawScale()); - requireActivity().setResult(Activity.RESULT_OK, result); - ParsedMwmRequest.setCurrentRequest(null); - } - requireActivity().finish(); - } - - private void onRouteFromBtnClicked() - { - if (mMapObject == null) - return; - RoutingController controller = RoutingController.get(); - if (!controller.isPlanning()) - { - controller.prepare(mMapObject, null); - close(); - } - else if (controller.setStartPoint(mMapObject)) - close(); - } - - private void onRouteToBtnClicked() - { - if (mMapObject == null) - return; - if (RoutingController.get().isPlanning()) - { - RoutingController.get().setEndPoint(mMapObject); - close(); - } - else - ((MwmActivity) requireActivity()).startLocationToPoint(mMapObject); - } - - private void onRouteAddBtnClicked() - { - if (mMapObject != null) - RoutingController.get().addStop(mMapObject); - } - - private void onRouteRemoveBtnClicked() - { - if (mMapObject != null) - RoutingController.get().removeStop(mMapObject); - } - - private void onAvoidUnpavedBtnClicked() - { - onAvoidBtnClicked(RoadType.Dirty); - } - - private void onAvoidFerryBtnClicked() - { - onAvoidBtnClicked(RoadType.Ferry); - } - - private void onAvoidTollBtnClicked() - { - onAvoidBtnClicked(RoadType.Toll); - } - - private void onAvoidBtnClicked(@NonNull RoadType roadType) - { - mPlacePageRouteSettingsListener.onPlacePageRequestToggleRouteSettings(roadType); + @Nullable final PlacePageView placePageFragment = (PlacePageView) mMwmActivity.getSupportFragmentManager() + .findFragmentByTag(PLACE_PAGE_FRAGMENT_TAG); + if (placePageFragment != null) + placePageFragment.onPlacePageButtonClick(item); } private void removePlacePageFragments() { - final FragmentManager fm = getChildFragmentManager(); + final FragmentManager fm = mMwmActivity.getSupportFragmentManager(); final Fragment placePageButtonsFragment = fm.findFragmentByTag(PLACE_PAGE_BUTTONS_FRAGMENT_TAG); final Fragment placePageFragment = fm.findFragmentByTag(PLACE_PAGE_FRAGMENT_TAG); @@ -475,21 +401,23 @@ public class PlacePageController extends Fragment implements fm.beginTransaction() .setReorderingAllowed(true) .remove(placePageButtonsFragment) - .commit(); + .commitNow(); } if (placePageFragment != null) { + // Make sure to synchronously remove the fragment so setting the map object to null + // won't impact the fragment fm.beginTransaction() .setReorderingAllowed(true) .remove(placePageFragment) - .commit(); + .commitNow(); } mViewModel.setMapObject(null); } private void createPlacePageFragments() { - final FragmentManager fm = getChildFragmentManager(); + final FragmentManager fm = mMwmActivity.getSupportFragmentManager(); if (fm.findFragmentByTag(PLACE_PAGE_FRAGMENT_TAG) == null) { fm.beginTransaction() @@ -558,42 +486,29 @@ public class PlacePageController extends Fragment implements mMapObject = mapObject; if (mapObject != null) { - open(); createPlacePageFragments(); updateButtons( mapObject, MapObject.isOfType(MapObject.API_POINT, mMapObject), !MapObject.isOfType(MapObject.MY_POSITION, mMapObject)); - } else - close(); + } } @Override - public void onStart() + public void initialize(@Nullable Activity activity) { - super.onStart(); - mPlacePageBehavior.addBottomSheetCallback(mDefaultBottomSheetCallback); - mViewModel.getMapObject().observe(requireActivity(), this); + Objects.requireNonNull(activity); + mViewModel.getMapObject().observe((MwmActivity) activity, this); } @Override - public void onResume() + public void destroy() { - super.onResume(); - if (mPlacePageBehavior.getState() != BottomSheetBehavior.STATE_HIDDEN && !Framework.nativeHasPlacePageInfo()) - mViewModel.setMapObject(null); - } - - @Override - public void onStop() - { - super.onStop(); - mPlacePageBehavior.removeBottomSheetCallback(mDefaultBottomSheetCallback); mViewModel.getMapObject().removeObserver(this); } - public interface PlacePageRouteSettingsListener + public interface SlideListener { - void onPlacePageRequestToggleRouteSettings(@NonNull RoadType roadType); + void onPlacePageSlide(int top); } } diff --git a/android/src/app/organicmaps/widget/placepage/sections/PlacePageLinksFragment.java b/android/src/app/organicmaps/widget/placepage/PlacePageLinksFragment.java similarity index 95% rename from android/src/app/organicmaps/widget/placepage/sections/PlacePageLinksFragment.java rename to android/src/app/organicmaps/widget/placepage/PlacePageLinksFragment.java index f552832bd6..618ef29b91 100644 --- a/android/src/app/organicmaps/widget/placepage/sections/PlacePageLinksFragment.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageLinksFragment.java @@ -1,4 +1,4 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import android.os.Bundle; import android.text.TextUtils; @@ -17,8 +17,6 @@ import app.organicmaps.R; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.bookmarks.data.Metadata; import app.organicmaps.util.Utils; -import app.organicmaps.widget.placepage.PlacePageUtils; -import app.organicmaps.widget.placepage.PlacePageViewModel; import java.util.ArrayList; import java.util.Arrays; @@ -218,26 +216,23 @@ public class PlacePageLinksFragment extends Fragment implements Observer { PlacePageUtils.copyToClipboard(requireContext(), mFrame, TimeFormatUtils.formatTimetables(getResources(), ohStr, timetables)); @@ -170,7 +170,7 @@ public class PlacePageOpeningHoursFragment extends Fragment implements Observer< // Show that place is closed today. if (!containsCurrentWeekday) { - refreshTodayOpeningHours(resources.getString(R.string.day_off_today), ContextCompat.getColor(requireContext(), R.color.base_red)); + refreshTodayOpeningHours(resources.getString(R.string.day_off_today), ContextCompat.getColor(getContext(), R.color.base_red)); UiUtils.hide(mTodayNonBusinessTime); } } @@ -178,23 +178,22 @@ public class PlacePageOpeningHoursFragment extends Fragment implements Observer< } @Override - public void onStart() + public void onResume() { - super.onStart(); + super.onResume(); mViewModel.getMapObject().observe(requireActivity(), this); } @Override - public void onStop() + public void onPause() { - super.onStop(); + super.onPause(); mViewModel.getMapObject().removeObserver(this); } @Override - public void onChanged(@Nullable MapObject mapObject) + public void onChanged(MapObject mapObject) { - if (mapObject != null) - refreshOpeningHours(mapObject); + refreshOpeningHours(); } } diff --git a/android/src/app/organicmaps/widget/placepage/sections/PlacePagePhoneFragment.java b/android/src/app/organicmaps/widget/placepage/PlacePagePhoneFragment.java similarity index 79% rename from android/src/app/organicmaps/widget/placepage/sections/PlacePagePhoneFragment.java rename to android/src/app/organicmaps/widget/placepage/PlacePagePhoneFragment.java index fe4dacc56e..a3b5fccc7d 100644 --- a/android/src/app/organicmaps/widget/placepage/sections/PlacePagePhoneFragment.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePagePhoneFragment.java @@ -1,4 +1,4 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import android.os.Bundle; import android.view.LayoutInflater; @@ -14,7 +14,6 @@ import androidx.recyclerview.widget.RecyclerView; import app.organicmaps.R; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.bookmarks.data.Metadata; -import app.organicmaps.widget.placepage.PlacePageViewModel; public class PlacePagePhoneFragment extends Fragment implements Observer { @@ -40,23 +39,22 @@ public class PlacePagePhoneFragment extends Fragment implements Observer { + placePageView.post(() -> { // Because of the post(), this lambda is called after the car.SurfaceRenderer.onStableAreaChanged() and breaks the visibleRect configuration - if (DisplayManager.from(parent.getContext()).isCarDisplayUsed()) + if (DisplayManager.from(placePageView.getContext()).isCarDisplayUsed()) return; - final int screenWidth = parent.getWidth(); - if (placePageDistanceToTop >= viewportMinHeight) - Framework.nativeSetVisibleRect(0, 0, screenWidth, placePageDistanceToTop); + final View coordinatorLayout = (ViewGroup) placePageView.getParent(); + final int viewPortWidth = coordinatorLayout.getWidth(); + int viewPortHeight = coordinatorLayout.getHeight(); + Rect sheetRect = new Rect(); + placePageView.getGlobalVisibleRect(sheetRect); + + viewPortHeight -= sheetRect.height(); + if (viewPortHeight >= viewportMinHeight) + Framework.nativeSetVisibleRect(0, 0, viewPortWidth, viewPortHeight); }); } @@ -80,7 +88,7 @@ public class PlacePageUtils } } - public static void copyToClipboard(Context context, View frame, String text) + static void copyToClipboard(Context context, View frame, String text) { Utils.copyTextToClipboard(context, text); Utils.showSnackbarAbove(frame, @@ -88,7 +96,7 @@ public class PlacePageUtils context.getString(R.string.copied_to_clipboard, text)); } - public static void showCopyPopup(Context context, View popupAnchor, View frame, List items) + static void showCopyPopup(Context context, View popupAnchor, View frame, List items) { final PopupMenu popup = new PopupMenu(context, popupAnchor); final Menu menu = popup.getMenu(); diff --git a/android/src/app/organicmaps/widget/placepage/PlacePageView.java b/android/src/app/organicmaps/widget/placepage/PlacePageView.java index 2a18f47247..072d181baf 100644 --- a/android/src/app/organicmaps/widget/placepage/PlacePageView.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageView.java @@ -1,6 +1,8 @@ package app.organicmaps.widget.placepage; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.location.Location; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -27,6 +29,9 @@ import app.organicmaps.Framework; import app.organicmaps.MwmActivity; import app.organicmaps.MwmApplication; import app.organicmaps.R; +import app.organicmaps.api.Const; +import app.organicmaps.api.ParsedMwmRequest; +import app.organicmaps.bookmarks.data.BookmarkManager; import app.organicmaps.bookmarks.data.DistanceAndAzimut; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.bookmarks.data.Metadata; @@ -37,15 +42,12 @@ import app.organicmaps.editor.Editor; import app.organicmaps.location.LocationHelper; import app.organicmaps.location.LocationListener; import app.organicmaps.routing.RoutingController; +import app.organicmaps.settings.RoadType; +import app.organicmaps.util.SharingUtils; import app.organicmaps.util.StringUtils; import app.organicmaps.util.UiUtils; import app.organicmaps.util.concurrency.UiThread; import app.organicmaps.widget.ArrowView; -import app.organicmaps.widget.placepage.sections.PlacePageBookmarkFragment; -import app.organicmaps.widget.placepage.sections.PlacePageLinksFragment; -import app.organicmaps.widget.placepage.sections.PlacePageOpeningHoursFragment; -import app.organicmaps.widget.placepage.sections.PlacePagePhoneFragment; -import app.organicmaps.widget.placepage.sections.PlacePageWikipediaFragment; import java.util.ArrayList; import java.util.Arrays; @@ -56,6 +58,7 @@ import static android.view.View.VISIBLE; public class PlacePageView extends Fragment implements View.OnClickListener, View.OnLongClickListener, + PlacePageButtons.PlacePageButtonClickListener, LocationListener, Observer @@ -173,9 +176,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener, MwmApplication.prefs(requireContext()).getInt( PREF_COORDINATES_FORMAT, CoordinatesFormat.LatLonDecimal.getId())); - Fragment parentFragment = getParentFragment(); - mPlacePageViewListener = (PlacePageViewListener) parentFragment; - mFrame = view; mFrame.setOnClickListener((v) -> mPlacePageViewListener.onPlacePageRequestToggleState()); @@ -238,29 +238,186 @@ public class PlacePageView extends Fragment implements View.OnClickListener, mDownloaderIcon = new DownloaderStatusIcon(mPreview.findViewById(R.id.downloader_status_frame)); mDownloaderInfo = mPreview.findViewById(R.id.tv__downloader_details); + + mMapObject = mViewModel.getMapObject().getValue(); } @Override - public void onStart() + public void onAttach(@NonNull Context context) { - super.onStart(); + super.onAttach(context); + mPlacePageViewListener = (MwmActivity) context; + } + + @Override + public void onResume() + { + super.onResume(); mViewModel.getMapObject().observe(requireActivity(), this); LocationHelper.INSTANCE.addListener(this); } + @Override + public void onPause() + { + super.onPause(); + // Unsubscribe from events as soon as the fragment becomes inactive + // to prevent unwanted side effects + mViewModel.getMapObject().removeObserver(this); + LocationHelper.INSTANCE.removeListener(this); + } + @Override public void onStop() { super.onStop(); - mViewModel.getMapObject().removeObserver(this); - LocationHelper.INSTANCE.removeListener(this); + // Safely detach the country once the fragment is hidden from the user + // It is safer to call this here than in onPause as the app could go from onPause to + // onResume without killing the fragment. + // In this case we would not want to detach the country. detachCountry(); } + @Override + public void onPlacePageButtonClick(PlacePageButtons.ButtonType item) + { + switch (item) + { + case BOOKMARK_SAVE: + case BOOKMARK_DELETE: + onBookmarkBtnClicked(); + break; + + case SHARE: + onShareBtnClicked(); + break; + + case BACK: + onBackBtnClicked(); + break; + + case ROUTE_FROM: + onRouteFromBtnClicked(); + break; + + case ROUTE_TO: + onRouteToBtnClicked(); + break; + + case ROUTE_ADD: + onRouteAddBtnClicked(); + break; + + case ROUTE_REMOVE: + onRouteRemoveBtnClicked(); + break; + + case ROUTE_AVOID_TOLL: + onAvoidTollBtnClicked(); + break; + + case ROUTE_AVOID_UNPAVED: + onAvoidUnpavedBtnClicked(); + break; + + case ROUTE_AVOID_FERRY: + onAvoidFerryBtnClicked(); + break; + } + } + + private void onBookmarkBtnClicked() + { + // No need to call setMapObject here as the native methods will reopen the place page + if (MapObject.isOfType(MapObject.BOOKMARK, mMapObject)) + Framework.nativeDeleteBookmarkFromMapObject(); + else + BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getLat(), mMapObject.getLon()); + } + + private void onShareBtnClicked() + { + SharingUtils.shareMapObject(requireContext(), mMapObject); + } + + private void onBackBtnClicked() + { + final ParsedMwmRequest request = ParsedMwmRequest.getCurrentRequest(); + if (request != null && request.isPickPointMode()) + { + final Intent result = new Intent(); + result.putExtra(Const.EXTRA_POINT_LAT, mMapObject.getLat()) + .putExtra(Const.EXTRA_POINT_LON, mMapObject.getLon()) + .putExtra(Const.EXTRA_POINT_NAME, mMapObject.getTitle()) + .putExtra(Const.EXTRA_POINT_ID, mMapObject.getApiId()) + .putExtra(Const.EXTRA_ZOOM_LEVEL, Framework.nativeGetDrawScale()); + requireActivity().setResult(Activity.RESULT_OK, result); + ParsedMwmRequest.setCurrentRequest(null); + } + requireActivity().finish(); + } + + private void onRouteFromBtnClicked() + { + RoutingController controller = RoutingController.get(); + if (!controller.isPlanning()) + { + controller.prepare(mMapObject, null); + mPlacePageViewListener.onPlacePageRequestClose(); + } + else if (controller.setStartPoint(mMapObject)) + { + mPlacePageViewListener.onPlacePageRequestClose(); + } + } + + private void onRouteToBtnClicked() + { + if (RoutingController.get().isPlanning()) + { + RoutingController.get().setEndPoint(mMapObject); + mPlacePageViewListener.onPlacePageRequestClose(); + } + else + { + ((MwmActivity) requireActivity()).startLocationToPoint(mMapObject); + } + } + + private void onRouteAddBtnClicked() + { + RoutingController.get().addStop(mMapObject); + } + + private void onRouteRemoveBtnClicked() + { + RoutingController.get().removeStop(mMapObject); + } + + private void onAvoidUnpavedBtnClicked() + { + onAvoidBtnClicked(RoadType.Dirty); + } + + private void onAvoidFerryBtnClicked() + { + onAvoidBtnClicked(RoadType.Ferry); + } + + private void onAvoidTollBtnClicked() + { + onAvoidBtnClicked(RoadType.Toll); + } + + private void onAvoidBtnClicked(@NonNull RoadType roadType) + { + mPlacePageViewListener.onPlacePageRequestToggleRouteSettings(roadType); + } + private void setCurrentCountry() { if (mCurrentCountry != null) - return; + throw new AssertionError("country should be detached before!"); String country = MapManager.nativeGetSelectedCountry(); if (country != null && !RoutingController.get().isNavigating()) attachCountry(country); @@ -293,7 +450,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, fm.beginTransaction() .setReorderingAllowed(true) .remove(fragment) - .commit(); + .commitNow(); } } @@ -342,7 +499,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, int end = text.lastIndexOf("★") + 1; if (start > -1) { - sb.setSpan(new ForegroundColorSpan(ContextCompat.getColor(requireContext(), R.color.base_yellow)), + sb.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.base_yellow)), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } mTvSubtitle.setText(sb); @@ -596,15 +753,13 @@ public class PlacePageView extends Fragment implements View.OnClickListener, } @Override - public void onChanged(@Nullable MapObject mapObject) + public void onChanged(MapObject mapObject) { - if (mapObject == null) - return; - // Starting the download will fire this callback but the object will be the same - // Detaching the country in that case will crash the app if (!mapObject.sameAs(mMapObject)) + { detachCountry(); - setCurrentCountry(); + setCurrentCountry(); + } mMapObject = mapObject; @@ -618,8 +773,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener, @Override public void onLocationUpdated(@NonNull Location location) { - if (mMapObject == null) - return; if (MapObject.isOfType(MapObject.MY_POSITION, mMapObject)) refreshMyPosition(location); else @@ -629,7 +782,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, @Override public void onCompassUpdated(double north) { - if (mMapObject == null || MapObject.isOfType(MapObject.MY_POSITION, mMapObject)) + if (MapObject.isOfType(MapObject.MY_POSITION, mMapObject)) return; final Location location = LocationHelper.INSTANCE.getSavedLocation(); @@ -657,6 +810,10 @@ public class PlacePageView extends Fragment implements View.OnClickListener, // Called when the content has actually changed and we are ready to compute the peek height void onPlacePageContentChanged(int previewHeight, int frameHeight); + void onPlacePageRequestClose(); + void onPlacePageRequestToggleState(); + + void onPlacePageRequestToggleRouteSettings(@NonNull RoadType roadType); } } diff --git a/android/src/app/organicmaps/widget/placepage/PlacePageViewModel.java b/android/src/app/organicmaps/widget/placepage/PlacePageViewModel.java index fa8ed2f3d6..be0241737d 100644 --- a/android/src/app/organicmaps/widget/placepage/PlacePageViewModel.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageViewModel.java @@ -11,8 +11,6 @@ public class PlacePageViewModel extends ViewModel { private final MutableLiveData> mCurrentButtons = new MutableLiveData<>(); private final MutableLiveData mMapObject = new MutableLiveData<>(); - private final MutableLiveData mPlacePageWidth = new MutableLiveData<>(); - private final MutableLiveData mPlacePageDistanceToTop = new MutableLiveData<>(); public LiveData> getCurrentButtons() { @@ -33,24 +31,4 @@ public class PlacePageViewModel extends ViewModel { mMapObject.setValue(mapObject); } - - public MutableLiveData getPlacePageWidth() - { - return mPlacePageWidth; - } - - public void setPlacePageWidth(int width) - { - mPlacePageWidth.setValue(width); - } - - public MutableLiveData getPlacePageDistanceToTop() - { - return mPlacePageDistanceToTop; - } - - public void setPlacePageDistanceToTop(int top) - { - mPlacePageDistanceToTop.setValue(top); - } } diff --git a/android/src/app/organicmaps/widget/placepage/sections/PlacePageWikipediaFragment.java b/android/src/app/organicmaps/widget/placepage/PlacePageWikipediaFragment.java similarity index 89% rename from android/src/app/organicmaps/widget/placepage/sections/PlacePageWikipediaFragment.java rename to android/src/app/organicmaps/widget/placepage/PlacePageWikipediaFragment.java index 53acc16492..f1d7a1edba 100644 --- a/android/src/app/organicmaps/widget/placepage/sections/PlacePageWikipediaFragment.java +++ b/android/src/app/organicmaps/widget/placepage/PlacePageWikipediaFragment.java @@ -1,4 +1,4 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -19,9 +19,6 @@ import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.bookmarks.data.Metadata; import app.organicmaps.util.Utils; import app.organicmaps.util.UiUtils; -import app.organicmaps.widget.placepage.PlaceDescriptionActivity; -import app.organicmaps.widget.placepage.PlacePageUtils; -import app.organicmaps.widget.placepage.PlacePageViewModel; public class PlacePageWikipediaFragment extends Fragment implements Observer { @@ -112,26 +109,23 @@ public class PlacePageWikipediaFragment extends Fragment implements ObserverOpenStreetMap a uvidíte své změny v budoucí aktualizaci map. ‣ Pokud nefunguje navigace nebo vyhledávání, napište nám prosím. Odpovídáme na KAŽDÝ e-mail a opravíme to co nejdříve! -Vaše zpětná vazba a 5hvězdičková hodnocení jsou pro nás tou nejlepší motivací! +Vaše zpětná vazba a pětihvězdičková hodnocení jsou pro nás tou nejlepší motivací! Klíčové funkce: -• Zdarma, open-source, bez reklam, bez špehování. -• Podrobné offline mapy s místy, která na Google mapách neexistují, díky komunitě OpenStreetMap. +• Zdarma, open-source, bez reklam, bez sledování. +• Podrobné offline mapy s místy, která na mapách Google neexistují, díky komunitě OpenStreetMap. • Cyklistické trasy, turistické stezky a pěší trasy • Obrysové linie, výškové profily, vrcholy a svahy • Pěší, cyklistická a EXPERIMENTÁLNÍ automobilová navigace turn-by-turn s hlasovým naváděním @@ -45,9 +45,9 @@ V Organic Maps věříme, že soukromí je základním lidským právem: • Chráníme soukromí před zvědavýma očima Big Tech. • Zůstaňte v bezpečí, ať jste kdekoli -Podle Exodus Privacy Report vyžadují pouze minimální oprávnění a nachází se zde nula sledovacích zařízení. +Podle zprávy Exodus Privacy Report se zde nachází nula sledovacích zařízení a vyžadují pouze minimálně oprávnění. -Další podrobnosti a nejčastější dotazy najdete na organicmaps.app webové stránce a kontaktujte nás přímo na @OrganicMapsApp na Telegramu. +Další podrobnosti a nejčastější dotazy najdete na organicmaps.app webové stránce a kontaktujte nás přímo na @OrganicMapsApp v aplikaci Telegram. Odmítněte dohled - přijměte svou svobodu. Vyzkoušejte Organic Maps! diff --git a/android/src/fdroid/play/listings/cs-CZ/release-notes.txt b/android/src/fdroid/play/listings/cs-CZ/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/cs-CZ/release-notes.txt +++ b/android/src/fdroid/play/listings/cs-CZ/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/cs-CZ/title-google.txt b/android/src/fdroid/play/listings/cs-CZ/title-google.txt index 9a8daa8d3e..0fa869a588 100644 --- a/android/src/fdroid/play/listings/cs-CZ/title-google.txt +++ b/android/src/fdroid/play/listings/cs-CZ/title-google.txt @@ -1 +1 @@ -Organic Maps: Mapy Offline +Organic Maps Offline Hike Bike diff --git a/android/src/fdroid/play/listings/cs-CZ/title.txt b/android/src/fdroid/play/listings/cs-CZ/title.txt index ceb33214cb..bb31a1db54 100644 --- a/android/src/fdroid/play/listings/cs-CZ/title.txt +++ b/android/src/fdroid/play/listings/cs-CZ/title.txt @@ -1 +1 @@ -Organic Maps Offline Turistika, Cyklistika, GPS +Organic Maps Offline Turistika, Kolo & GPS diff --git a/android/src/fdroid/play/listings/da-DK/release-notes.txt b/android/src/fdroid/play/listings/da-DK/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/da-DK/release-notes.txt +++ b/android/src/fdroid/play/listings/da-DK/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/de-DE/release-notes.txt b/android/src/fdroid/play/listings/de-DE/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/de-DE/release-notes.txt +++ b/android/src/fdroid/play/listings/de-DE/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/el-GR/release-notes.txt b/android/src/fdroid/play/listings/el-GR/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/el-GR/release-notes.txt +++ b/android/src/fdroid/play/listings/el-GR/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/en-US/release-notes.txt b/android/src/fdroid/play/listings/en-US/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/en-US/release-notes.txt +++ b/android/src/fdroid/play/listings/en-US/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/es-ES/release-notes.txt b/android/src/fdroid/play/listings/es-ES/release-notes.txt index db8192427a..dabda0a359 100644 --- a/android/src/fdroid/play/listings/es-ES/release-notes.txt +++ b/android/src/fdroid/play/listings/es-ES/release-notes.txt @@ -1,13 +1,8 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• Datos planetarios nuevos de OSM al 29 de marzo +• Asistente de carril experimental +• Arreglada la posición incorrecta de la flecha de ubicación al navegar +• Arreglado el selector de colores para marcadores en lenguas escritas de derecha a izquierda +• Se muestran adecuadamente las velocidades y las distancias en el modo de navegación +• Muchos tipos de tienda nuevos +• Añade transferencias monetarias, estaciones de carga de bicicletas y centrales de energía +…para saber más: omaps.app/news diff --git a/android/src/fdroid/play/listings/es-ES/title-google.txt b/android/src/fdroid/play/listings/es-ES/title-google.txt index baca3eff86..45f6f75de5 100644 --- a/android/src/fdroid/play/listings/es-ES/title-google.txt +++ b/android/src/fdroid/play/listings/es-ES/title-google.txt @@ -1 +1 @@ -Organic Maps: gps sin internet +Organic Maps bici y senderismo diff --git a/android/src/fdroid/play/listings/et/release-notes.txt b/android/src/fdroid/play/listings/et/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/et/release-notes.txt +++ b/android/src/fdroid/play/listings/et/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/et/title-google.txt b/android/src/fdroid/play/listings/et/title-google.txt index e4ccefb89e..e88ecfea27 100644 --- a/android/src/fdroid/play/listings/et/title-google.txt +++ b/android/src/fdroid/play/listings/et/title-google.txt @@ -1 +1 @@ -Organic Maps: gps kaardid +Offline Organic Maps Hike Bike diff --git a/android/src/fdroid/play/listings/eu-ES/release-notes.txt b/android/src/fdroid/play/listings/eu-ES/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/eu-ES/release-notes.txt +++ b/android/src/fdroid/play/listings/eu-ES/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/fa/release-notes.txt b/android/src/fdroid/play/listings/fa/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/fa/release-notes.txt +++ b/android/src/fdroid/play/listings/fa/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/fi-FI/release-notes.txt b/android/src/fdroid/play/listings/fi-FI/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/fi-FI/release-notes.txt +++ b/android/src/fdroid/play/listings/fi-FI/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/fr-FR/release-notes.txt b/android/src/fdroid/play/listings/fr-FR/release-notes.txt index 6cad44c353..fbdd72304f 100644 --- a/android/src/fdroid/play/listings/fr-FR/release-notes.txt +++ b/android/src/fdroid/play/listings/fr-FR/release-notes.txt @@ -1,12 +1,9 @@ -• Nouvelles données Openstreetmap du 3 Mai -• Recherche d'adresses améliorée -• Rendu de la couche métro plus rapide -• Correction des codes postaux incorrects à Paris -• Correction des liens Wikipédia manquants -• Amélioration du routage -• Amélioration de la localisation GPS sur certains appareils -• Mise à jour de l'icône des portes et l'icône du métro de Lyon -• Correction de l'affichage des noms des routes sur la carte aux États-Unis -• Ajout de nouveau type de boutiques - -…Plus: omaps.org/fr/news +• Nouvelles données Openstreetmap du 29 Mars +• Indication expérimentale des voies de bifurcation +• Correction position flèche de localisation en navigation +• Correction sélecteur de couleur des signets +• Correction affichage vitesse et distance en navigation +• Beaucoup de nouveaux types de magasins +• Ajout transfert d'argent, stations de recharge de vélos et centrales électriques +• Différenciation des couleurs des parcs, des forêts et des broussailles +…Plus : omaps.app/new diff --git a/android/src/fdroid/play/listings/fr-FR/title-google.txt b/android/src/fdroid/play/listings/fr-FR/title-google.txt index d2462cd276..3893374b2a 100644 --- a/android/src/fdroid/play/listings/fr-FR/title-google.txt +++ b/android/src/fdroid/play/listings/fr-FR/title-google.txt @@ -1 +1 @@ -Organic Maps: navigation gps +Organic Maps cartes hors ligne diff --git a/android/src/fdroid/play/listings/gl-ES/release-notes.txt b/android/src/fdroid/play/listings/gl-ES/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/gl-ES/release-notes.txt +++ b/android/src/fdroid/play/listings/gl-ES/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/gu/release-notes.txt b/android/src/fdroid/play/listings/gu/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/gu/release-notes.txt +++ b/android/src/fdroid/play/listings/gu/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/hi-IN/release-notes.txt b/android/src/fdroid/play/listings/hi-IN/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/hi-IN/release-notes.txt +++ b/android/src/fdroid/play/listings/hi-IN/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/hi-IN/title-google.txt b/android/src/fdroid/play/listings/hi-IN/title-google.txt index f2045c23b8..66f295166c 100644 --- a/android/src/fdroid/play/listings/hi-IN/title-google.txt +++ b/android/src/fdroid/play/listings/hi-IN/title-google.txt @@ -1 +1 @@ -ऑफलाइन Organic Maps मैप ऐप +ऑफलाइन Organic Maps हाइक बाइक diff --git a/android/src/fdroid/play/listings/hr/release-notes.txt b/android/src/fdroid/play/listings/hr/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/hr/release-notes.txt +++ b/android/src/fdroid/play/listings/hr/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/hu-HU/release-notes.txt b/android/src/fdroid/play/listings/hu-HU/release-notes.txt index 722c5cf825..685d979688 100644 --- a/android/src/fdroid/play/listings/hu-HU/release-notes.txt +++ b/android/src/fdroid/play/listings/hu-HU/release-notes.txt @@ -1,10 +1,8 @@ -• Új OpenStreetMap adatok (május 3) -• A keresés most váltakozó páratlan és páros címeket talál -• A metró réteg gyorsabb lett -• Kijavítottuk a hiányzó Wikipedia linkeket -• Javítottuk az autók körforgalmakon keresztüli navigációját -• Javítottuk a helymeghatározás funkciót a hálózaton keresztül egyes eszközökön -• Megváltozott a kapuk és a lyoni metró ikonja -• Javítottuk az amerikai autópálya jelölő ikonokat -• Kamerabolt, belső dekor, régiségek, művészetek, sajtbolt hozzáadása -…infó: omaps.org/news +• Új OpenStreetMap térképadatok (március 29) +• Kísérleti sávnavigációs funkció +• A felhasználó helyzetét jelző nyíl pozícióját megváltoztattuk, a jobb élmény érdekében +• Megjavítottuk a könyvjelzők színválasztóját a jobb oldalról balra haladó írásmódú nyelveknél +• Immáron a sebesség és a távolság helyesen van megjelenítve navigáció közben +• Sok új bolttípussal bővült alkalmazásunk +• Hozzáadtuk a pénz átutalóhelyeket, bicikli töltőállomásokat, és erőműveket +…további infó: omaps.app/news diff --git a/android/src/fdroid/play/listings/hu-HU/title-google.txt b/android/src/fdroid/play/listings/hu-HU/title-google.txt index d365f08c61..f3398e9a75 100644 --- a/android/src/fdroid/play/listings/hu-HU/title-google.txt +++ b/android/src/fdroid/play/listings/hu-HU/title-google.txt @@ -1 +1 @@ -Organic Maps offline navigáció +Organic Maps: offline GPS diff --git a/android/src/fdroid/play/listings/id/release-notes.txt b/android/src/fdroid/play/listings/id/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/id/release-notes.txt +++ b/android/src/fdroid/play/listings/id/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/id/title-google.txt b/android/src/fdroid/play/listings/id/title-google.txt index d13e0d68c9..ab0bdb36be 100644 --- a/android/src/fdroid/play/listings/id/title-google.txt +++ b/android/src/fdroid/play/listings/id/title-google.txt @@ -1 +1 @@ -Organic Maps: gps offline +Organic Maps Navigasi Luring diff --git a/android/src/fdroid/play/listings/it-IT/release-notes.txt b/android/src/fdroid/play/listings/it-IT/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/it-IT/release-notes.txt +++ b/android/src/fdroid/play/listings/it-IT/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/iw-IL/release-notes.txt b/android/src/fdroid/play/listings/iw-IL/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/iw-IL/release-notes.txt +++ b/android/src/fdroid/play/listings/iw-IL/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ja-JP/release-notes.txt b/android/src/fdroid/play/listings/ja-JP/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ja-JP/release-notes.txt +++ b/android/src/fdroid/play/listings/ja-JP/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ka-GE/release-notes.txt b/android/src/fdroid/play/listings/ka-GE/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ka-GE/release-notes.txt +++ b/android/src/fdroid/play/listings/ka-GE/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ka-GE/short-description.txt b/android/src/fdroid/play/listings/ka-GE/short-description.txt index a59f79d255..c2f1533e8e 100644 --- a/android/src/fdroid/play/listings/ka-GE/short-description.txt +++ b/android/src/fdroid/play/listings/ka-GE/short-description.txt @@ -1 +1 @@ -ღია კოდის მქონე რუკა მოგზაურებისთვს, ტურისტებისთვის, ველოსიპედისტებისთვის და ა.შ +Open-source, community-driven maps for travelers, tourists, cyclists & hikers diff --git a/android/src/fdroid/play/listings/ka-GE/title.txt b/android/src/fdroid/play/listings/ka-GE/title.txt index c5aecbe0dd..1a8a13ec0c 100644 --- a/android/src/fdroid/play/listings/ka-GE/title.txt +++ b/android/src/fdroid/play/listings/ka-GE/title.txt @@ -1 +1 @@ -Organic Maps Offline Hike, მოტო, GPS ნავიგაცია +Organic Maps Offline Hike, Bike, GPS Navigation diff --git a/android/src/fdroid/play/listings/kk/release-notes.txt b/android/src/fdroid/play/listings/kk/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/kk/release-notes.txt +++ b/android/src/fdroid/play/listings/kk/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/km-KH/release-notes.txt b/android/src/fdroid/play/listings/km-KH/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/km-KH/release-notes.txt +++ b/android/src/fdroid/play/listings/km-KH/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/kn-IN/release-notes.txt b/android/src/fdroid/play/listings/kn-IN/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/kn-IN/release-notes.txt +++ b/android/src/fdroid/play/listings/kn-IN/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ko-KR/release-notes.txt b/android/src/fdroid/play/listings/ko-KR/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ko-KR/release-notes.txt +++ b/android/src/fdroid/play/listings/ko-KR/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/lo-LA/release-notes.txt b/android/src/fdroid/play/listings/lo-LA/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/lo-LA/release-notes.txt +++ b/android/src/fdroid/play/listings/lo-LA/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/lt/release-notes.txt b/android/src/fdroid/play/listings/lt/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/lt/release-notes.txt +++ b/android/src/fdroid/play/listings/lt/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/lv/release-notes.txt b/android/src/fdroid/play/listings/lv/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/lv/release-notes.txt +++ b/android/src/fdroid/play/listings/lv/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/mk-MK/release-notes.txt b/android/src/fdroid/play/listings/mk-MK/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/mk-MK/release-notes.txt +++ b/android/src/fdroid/play/listings/mk-MK/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ml-IN/release-notes.txt b/android/src/fdroid/play/listings/ml-IN/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ml-IN/release-notes.txt +++ b/android/src/fdroid/play/listings/ml-IN/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/mr-IN/release-notes.txt b/android/src/fdroid/play/listings/mr-IN/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/mr-IN/release-notes.txt +++ b/android/src/fdroid/play/listings/mr-IN/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ms/release-notes.txt b/android/src/fdroid/play/listings/ms/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ms/release-notes.txt +++ b/android/src/fdroid/play/listings/ms/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ne-NP/release-notes.txt b/android/src/fdroid/play/listings/ne-NP/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ne-NP/release-notes.txt +++ b/android/src/fdroid/play/listings/ne-NP/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/nl-NL/release-notes.txt b/android/src/fdroid/play/listings/nl-NL/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/nl-NL/release-notes.txt +++ b/android/src/fdroid/play/listings/nl-NL/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/no-NO/release-notes.txt b/android/src/fdroid/play/listings/no-NO/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/no-NO/release-notes.txt +++ b/android/src/fdroid/play/listings/no-NO/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/pl-PL/release-notes.txt b/android/src/fdroid/play/listings/pl-PL/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/pl-PL/release-notes.txt +++ b/android/src/fdroid/play/listings/pl-PL/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/pl-PL/title-google.txt b/android/src/fdroid/play/listings/pl-PL/title-google.txt index 53f39447ce..1630be2666 100644 --- a/android/src/fdroid/play/listings/pl-PL/title-google.txt +++ b/android/src/fdroid/play/listings/pl-PL/title-google.txt @@ -1 +1 @@ -Organic Maps: gps nawigacja +Organic Maps: Wędrówki i rower diff --git a/android/src/fdroid/play/listings/pt-BR/release-notes.txt b/android/src/fdroid/play/listings/pt-BR/release-notes.txt index b7c1041a2f..43d74eb0d4 100644 --- a/android/src/fdroid/play/listings/pt-BR/release-notes.txt +++ b/android/src/fdroid/play/listings/pt-BR/release-notes.txt @@ -1,12 +1,10 @@ -• Novos dados OSM de 03/05 -• Busca suporta endereços interpolados -• Renderização mais rápida do metrô -• Correção de links ausentes da Wikipédia -• Melhor roteamento nas rotatórias -• Ativação de TTS para ES-MX e PT-BR -• Correção de detecção de localização via rede em alguns dispositivos -• Alteração de ícone de portão e do metrô de Lyon -• Correção de placas de estradas dos EUA -• Adição de loja de antiguidades, arte, câmeras, interiores e queijos - -…mais: omaps.org/news +• Novos dados OSM de 29/03 +• Assistente de faixas (beta) +• Correção da posição de seta de localização durante navegação +• Correção do selecionador de cores dos favoritos para escritas RTL +• Exibição correta da velocidade e distância no modo de navegação +• Correção da API para selecionar um ponto no mapa +• Muitos novos tipos de lojas +• Adição de carregamento de bicicleta, transferência de dinheiro e usinas +• Distinção de arbustos, florestas e parques +…mais: omaps.app/news diff --git a/android/src/fdroid/play/listings/pt-PT/release-notes.txt b/android/src/fdroid/play/listings/pt-PT/release-notes.txt index 8432d9d3e1..eb8a659b27 100644 --- a/android/src/fdroid/play/listings/pt-PT/release-notes.txt +++ b/android/src/fdroid/play/listings/pt-PT/release-notes.txt @@ -1,12 +1,10 @@ -• Novos dados OSM de 03/05 -• Busca suporta moradas interpoladas -• Renderização mais rápida do metro -• Correção de links ausentes da Wikipédia -• Melhor roteamento nas rotundas -• Ativação de TTS para ES-MX e PT-BR -• Correção de deteção de localização via rede em alguns dispositivos -• Alteração de ícone de portão e do metro de Lyon -• Correção de placas de estradas dos EUA -• Adição de loja de antiguidades, arte, câmeras, interiores e queijos - -…mais: omaps.org/news +• Novos dados OSM de 29/03 +• Assistente de pistas (beta) +• Correção da posição de seta de localização durante navegação +• Correção do selecionador de cores dos favoritos para escritas RTL +• Exibição correta da velocidade e distância no modo de navegação +• Correção da API para selecionar um ponto no mapa +• Muitos novos tipos de lojas +• Adição de carregamento de bicicleta, transferência de dinheiro e usinas +• Distinção de arbustos, florestas e parques +…mais: omaps.app/news diff --git a/android/src/fdroid/play/listings/ro/release-notes.txt b/android/src/fdroid/play/listings/ro/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ro/release-notes.txt +++ b/android/src/fdroid/play/listings/ro/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/ru-RU/release-notes.txt b/android/src/fdroid/play/listings/ru-RU/release-notes.txt index 3e3ebff5b7..b99106831f 100644 --- a/android/src/fdroid/play/listings/ru-RU/release-notes.txt +++ b/android/src/fdroid/play/listings/ru-RU/release-notes.txt @@ -1,11 +1,9 @@ -• Новые данные OpenStreetMap за 3 мая -• Поиск чередующихся чётных/нечётных адресов -• Быстрая прорисовка слоя метро -• Исправлены неверные почтовые индексы в Париже -• Исправлены недостающие ссылки Википедии -• Исправлена автомобильная навигация через круговые развязки -• Исправлено определение местоположения через интернет на некоторых устройствах -• Изменены иконки ворот и метро Лиона -• Добавлены магазины камер, дизайнера интерьеров, антиквариата, искусства, сыра - -…подробнее: omaps.org/ru/news +• Новые данные OpenStreetMap за 29 марта +• Навигация: добавлено отображение полос, исправлено неправильное положение стрелки местоположения и отображение скорости/расстояния +• Исправлен импорт треков из некоторых KML файлов +• Исправлен API для выбора точки на карте +• Множество новых типов магазинов +• Добавлены станции зарядки велосипедов, электростанция, пункты перевода денег +• Сделаны разными цвета парков, лесов и кустарников +• Улучшены переводы +…подробнее: omaps.app/news diff --git a/android/src/fdroid/play/listings/si-LK/release-notes.txt b/android/src/fdroid/play/listings/si-LK/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/si-LK/release-notes.txt +++ b/android/src/fdroid/play/listings/si-LK/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/sk/release-notes.txt b/android/src/fdroid/play/listings/sk/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/sk/release-notes.txt +++ b/android/src/fdroid/play/listings/sk/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/sl/release-notes.txt b/android/src/fdroid/play/listings/sl/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/sl/release-notes.txt +++ b/android/src/fdroid/play/listings/sl/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/sr/release-notes.txt b/android/src/fdroid/play/listings/sr/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/sr/release-notes.txt +++ b/android/src/fdroid/play/listings/sr/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/sv-SE/release-notes.txt b/android/src/fdroid/play/listings/sv-SE/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/sv-SE/release-notes.txt +++ b/android/src/fdroid/play/listings/sv-SE/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/sv-SE/title-google.txt b/android/src/fdroid/play/listings/sv-SE/title-google.txt index 6caf7ede32..e88ecfea27 100644 --- a/android/src/fdroid/play/listings/sv-SE/title-google.txt +++ b/android/src/fdroid/play/listings/sv-SE/title-google.txt @@ -1 +1 @@ -Organic Maps: karta gps +Offline Organic Maps Hike Bike diff --git a/android/src/fdroid/play/listings/th/release-notes.txt b/android/src/fdroid/play/listings/th/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/th/release-notes.txt +++ b/android/src/fdroid/play/listings/th/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/tr-TR/release-notes.txt b/android/src/fdroid/play/listings/tr-TR/release-notes.txt index 587901883a..87a78a7076 100644 --- a/android/src/fdroid/play/listings/tr-TR/release-notes.txt +++ b/android/src/fdroid/play/listings/tr-TR/release-notes.txt @@ -1,11 +1,11 @@ -• 3 Mayıs tarihine ait yeni OpenStreetMap verileri -• addr:interpolation adresleri artık aranabilir -• Metro katmanı artık daha hızlı açılıyor -• Eksik Vikipedi bağlantıları düzeltildi -• Döner kavşaklardan geçen araç rotalarında bazı düzeltmeler yapıldı -• Bazı cihazlarda ağ üzerinden konum algılama düzeltildi -• Geçit simgesi değiştirildi -• Fotoğraf makinesi mağazası, iç dekorasyon, antika, sanat, peynirci kategorileri eklendi - - …dahası: omaps.org/tr/news - +Mutlu Ramazanlar! +• 29 Mart tarihine ait yeni OpenStreetMap harita verileri +• Deneysel şerit asistanı +• Navigasyon sırasındaki konum okunun konumu düzeltildi +• Artık navigasyon modundayken hız ve mesafe düzgün şekilde görüntüleniyor +• API için haritadan nokta seçimi düzeltildi +• Birçok yeni mağaza türü eklendi +• Para transferi, bisiklet şarj istasyonu ve elektrik santrali kategorileri eklendi +• Park, orman ve çalılık renkleri artık farklı +• Çeviriler iyileştirildi +…dahası: omaps.app/tr/news diff --git a/android/src/fdroid/play/listings/tr-TR/title-google.txt b/android/src/fdroid/play/listings/tr-TR/title-google.txt index 07dd31b017..c16af3d826 100644 --- a/android/src/fdroid/play/listings/tr-TR/title-google.txt +++ b/android/src/fdroid/play/listings/tr-TR/title-google.txt @@ -1 +1 @@ -Organic Maps: GPS Haritalar +Organic Maps Çevrimdışı Harita diff --git a/android/src/fdroid/play/listings/uk/release-notes.txt b/android/src/fdroid/play/listings/uk/release-notes.txt index 80511d9d4b..773c41dd7f 100644 --- a/android/src/fdroid/play/listings/uk/release-notes.txt +++ b/android/src/fdroid/play/listings/uk/release-notes.txt @@ -1,11 +1,9 @@ -• Нові дані OpenStreetMap станом на 3 травня -• Пошук тепер знаходить парні та непарні інтерполовані адреси -• Пришвидшення малювання схеми метро -• Виправлення зниклих посилань до Wikipedia -• Виправлена навігації через кільце -• Виправлено визначення місцеположення за допомогою мережі на деяких пристроях -• Нові іконки воріт та станцій метро у Ліоні -• Виправлення щитів доріг у США -• Додані магазини фототехніки, декору, антикваріату, мистецтва та сиру - -…більше: omaps.org/news +• Нові дані OSM Planet станом на 29 березня +• Експериментальний помічник по смугам руху +• Виправлено неправильне розташування стрілки місцезнаходження під час навігації +• Виправлено вибір кольору закладки для мов із написанням справа наліво +• Правильне відображення швидкості та відстані в режимі навігації +• Багато нових типів магазинів +• Додано переказ грошей, станції зарядки велосипедів, електростанції +• Зроблено різними кольори парки, ліси та чагарники +…більше: omaps.app/news diff --git a/android/src/fdroid/play/listings/ur/release-notes.txt b/android/src/fdroid/play/listings/ur/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/ur/release-notes.txt +++ b/android/src/fdroid/play/listings/ur/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/vi/release-notes.txt b/android/src/fdroid/play/listings/vi/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/vi/release-notes.txt +++ b/android/src/fdroid/play/listings/vi/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/vi/title-google.txt b/android/src/fdroid/play/listings/vi/title-google.txt index 7fd31360ca..e88ecfea27 100644 --- a/android/src/fdroid/play/listings/vi/title-google.txt +++ b/android/src/fdroid/play/listings/vi/title-google.txt @@ -1 +1 @@ -Organic Maps: bản đồ dẫn đường +Offline Organic Maps Hike Bike diff --git a/android/src/fdroid/play/listings/zh-CN/release-notes.txt b/android/src/fdroid/play/listings/zh-CN/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/zh-CN/release-notes.txt +++ b/android/src/fdroid/play/listings/zh-CN/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/zh-CN/title-google.txt b/android/src/fdroid/play/listings/zh-CN/title-google.txt index 6704b74cc6..dc8383a09d 100644 --- a/android/src/fdroid/play/listings/zh-CN/title-google.txt +++ b/android/src/fdroid/play/listings/zh-CN/title-google.txt @@ -1 +1 @@ -Organic Maps: 地图更新 +Organic Maps 离线登山与骑行 diff --git a/android/src/fdroid/play/listings/zh-HK/release-notes.txt b/android/src/fdroid/play/listings/zh-HK/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/zh-HK/release-notes.txt +++ b/android/src/fdroid/play/listings/zh-HK/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/listings/zh-TW/release-notes.txt b/android/src/fdroid/play/listings/zh-TW/release-notes.txt index db8192427a..fdf8ecf092 100644 --- a/android/src/fdroid/play/listings/zh-TW/release-notes.txt +++ b/android/src/fdroid/play/listings/zh-TW/release-notes.txt @@ -1,13 +1,11 @@ -• New OpenStreetMap data as of May 3 -• Fix search for interpolated odd/even house numbers -• Fix zoom buttons setting -• Faster rendering of subway layer -• Fix wrong postcodes in Paris -• Fix missing Wikipedia links -• Fix car routing via roundabouts -• Enable TTS for Portuguese/Brazil, Español/México -• Fix location detection over a network on some devices -• Change gates and Lyon subway icon -• Fix US road shields -• Add camera, interior_decoration, antiques, art, cheese shops -…more: omaps.org/news +• New OpenStreetMap data as of March 29 +• Experimental Lane assistant +• Fix wrong location arrow position during navigation +• Fix bookmark's color chooser for Right-To-Left languages +• Properly display speed and distance in navigation mode +• Fix API to select a point on the map +• Many new shop types +• Add money transfer, bicycle charging stations, power plant +• Made park, forest, and scrub colors different +• Improved ar, be, de, hu, tr translations +…more: omaps.app/news diff --git a/android/src/fdroid/play/version.yaml b/android/src/fdroid/play/version.yaml index 316114505b..f9cdcea489 100644 --- a/android/src/fdroid/play/version.yaml +++ b/android/src/fdroid/play/version.yaml @@ -1 +1 @@ -version: 2023.05.08-7-FDroid+23050807 +version: 2023.04.02-7-FDroid+23040207 diff --git a/android/tests/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapterTest.java b/android/tests/java/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapterTest.java similarity index 98% rename from android/tests/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapterTest.java rename to android/tests/java/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapterTest.java index e427e084b0..499662aca5 100644 --- a/android/tests/java/app/organicmaps/widget/placepage/sections/PlaceOpeningHoursAdapterTest.java +++ b/android/tests/java/app/organicmaps/widget/placepage/PlaceOpeningHoursAdapterTest.java @@ -1,10 +1,9 @@ -package app.organicmaps.widget.placepage.sections; +package app.organicmaps.widget.placepage; import app.organicmaps.editor.data.HoursMinutes; import app.organicmaps.editor.data.Timespan; import app.organicmaps.editor.data.Timetable; -import app.organicmaps.widget.placepage.sections.PlaceOpeningHoursAdapter; -import app.organicmaps.widget.placepage.sections.PlaceOpeningHoursAdapter.WeekScheduleData; +import app.organicmaps.widget.placepage.PlaceOpeningHoursAdapter.WeekScheduleData; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/base/base_tests/beam_tests.cpp b/base/base_tests/beam_tests.cpp index 0cb4705c30..a575643d38 100644 --- a/base/base_tests/beam_tests.cpp +++ b/base/base_tests/beam_tests.cpp @@ -12,11 +12,11 @@ #include #include -namespace beam_tests -{ using namespace base; using namespace std; +namespace +{ template