Merge branch 'master' into add_set_location_aidl_method

This commit is contained in:
Vitaliy 2021-01-22 16:20:58 +02:00
commit 2327f84af7
151 changed files with 3819 additions and 2222 deletions

View file

@ -1822,6 +1822,25 @@ public class GPXUtilities {
}
serializer.endTag(null, "metadata");
for (WptPt l : file.points) {
serializer.startTag(null, "wpt"); //$NON-NLS-1$
writeWpt(format, serializer, l);
serializer.endTag(null, "wpt"); //$NON-NLS-1$
}
for (Route track : file.routes) {
serializer.startTag(null, "rte"); //$NON-NLS-1$
writeNotNullText(serializer, "name", track.name);
writeNotNullText(serializer, "desc", track.desc);
for (WptPt p : track.points) {
serializer.startTag(null, "rtept"); //$NON-NLS-1$
writeWpt(format, serializer, p);
serializer.endTag(null, "rtept"); //$NON-NLS-1$
}
writeExtensions(serializer, track);
serializer.endTag(null, "rte"); //$NON-NLS-1$
}
for (Track track : file.tracks) {
if (!track.generalTrack) {
@ -1844,26 +1863,6 @@ public class GPXUtilities {
}
}
for (Route track : file.routes) {
serializer.startTag(null, "rte"); //$NON-NLS-1$
writeNotNullText(serializer, "name", track.name);
writeNotNullText(serializer, "desc", track.desc);
for (WptPt p : track.points) {
serializer.startTag(null, "rtept"); //$NON-NLS-1$
writeWpt(format, serializer, p);
serializer.endTag(null, "rtept"); //$NON-NLS-1$
}
writeExtensions(serializer, track);
serializer.endTag(null, "rte"); //$NON-NLS-1$
}
for (WptPt l : file.points) {
serializer.startTag(null, "wpt"); //$NON-NLS-1$
writeWpt(format, serializer, l);
serializer.endTag(null, "wpt"); //$NON-NLS-1$
}
writeExtensions(serializer, file);
serializer.endTag(null, "gpx"); //$NON-NLS-1$

View file

@ -20,7 +20,7 @@ public abstract class StringBundleWriter {
public void writeBundle() {
for (Entry<String, Item<?>> entry : bundle.getMap().entrySet()) {
writeItem(entry.getKey(), entry.getValue());
writeItem("osmand:" + entry.getKey(), entry.getValue());
}
}
}

View file

@ -41,6 +41,7 @@ public class Amenity extends MapObject {
public static final String OSM_DELETE_TAG = "osmand_change";
public static final String IMAGE_TITLE = "image_title";
public static final String IS_PART = "is_part";
public static final String IS_PARENT_OF = "is_parent_of";
public static final String IS_AGGR_PART = "is_aggr_part";
public static final String CONTENT_JSON = "content_json";
public static final String ROUTE_ID = "route_id";

View file

@ -182,10 +182,10 @@ public class Building extends MapObject {
@Override
public String toString() {
if(interpolationInterval !=0){
return name+"-"+name2 +" (+"+interpolationInterval+") ";
} else if(interpolationType != null) {
return name+"-"+name2 +" ("+interpolationType+") ";
if (interpolationInterval != 0) {
return name + "-" + name2 + " (+" + interpolationInterval + ") ";
} else if (interpolationType != null) {
return name + "-" + name2 + " (" + interpolationType + ") ";
}
return name;
}

View file

@ -1189,6 +1189,7 @@ public class RouteResultPreparation {
RouteSegmentResult last = rr;
RouteSegmentResult firstRoundabout = rr;
RouteSegmentResult lastRoundabout = rr;
for (int j = i; j < result.size(); j++) {
RouteSegmentResult rnext = result.get(j);
last = rnext;
@ -1215,12 +1216,12 @@ public class RouteResultPreparation {
TurnType t = TurnType.getExitTurn(exit, 0, leftSide);
// usually covers more than expected
float turnAngleBasedOnOutRoads = (float) MapUtils.degreesDiff(last.getBearingBegin(), prev.getBearingEnd());
// usually covers less than expected
float turnAngleBasedOnCircle = (float) -MapUtils.degreesDiff(firstRoundabout.getBearingBegin(), lastRoundabout.getBearingEnd() + 180);
if(Math.abs(turnAngleBasedOnOutRoads - turnAngleBasedOnCircle) > 180) {
t.setTurnAngle(turnAngleBasedOnCircle ) ;
if (Math.abs(turnAngleBasedOnOutRoads) > 120) {
// correctly identify if angle is +- 180, so we approach from left or right side
t.setTurnAngle(turnAngleBasedOnCircle) ;
} else {
t.setTurnAngle((turnAngleBasedOnCircle + turnAngleBasedOnOutRoads) / 2) ;
t.setTurnAngle(turnAngleBasedOnOutRoads) ;
}
return t;
}

View file

@ -954,17 +954,15 @@ public class SearchUICore {
break;
}
case COMPARE_AMENITY_TYPE_ADDITIONAL: {
if(o1.object instanceof AbstractPoiType && o2.object instanceof AbstractPoiType ) {
boolean additional1 = ((AbstractPoiType) o1.object).isAdditional();
boolean additional2 = ((AbstractPoiType) o2.object).isAdditional();
if (additional1 != additional2) {
// -1 - means 1st is less than 2nd
return additional1 ? 1 : -1;
}
boolean additional1 = o1.object instanceof AbstractPoiType && ((AbstractPoiType) o1.object).isAdditional();
boolean additional2 = o2.object instanceof AbstractPoiType && ((AbstractPoiType) o2.object).isAdditional();
if (additional1 != additional2) {
// -1 - means 1st is less than 2nd
return additional1 ? 1 : -1;
}
break;
}
case COMPARE_DISTANCE_TO_PARENT_SEARCH_RESULT:
case COMPARE_DISTANCE_TO_PARENT_SEARCH_RESULT:
double ps1 = o1.parentSearchResult == null ? 0 : o1.parentSearchResult.getSearchDistance(c.loc);
double ps2 = o2.parentSearchResult == null ? 0 : o2.parentSearchResult.getSearchDistance(c.loc);
if (ps1 != ps2) {
@ -1004,17 +1002,12 @@ public class SearchUICore {
String subType2 = a2.getSubType() == null ? "" : a2.getSubType();
int cmp = 0;
if (FILTER_DUPLICATE_POI_SUBTYPE.contains(subType1)) {
cmp = 1;
} else if (FILTER_DUPLICATE_POI_SUBTYPE.contains(subType2)) {
cmp = -1;
}
if (cmp != 0) {
return cmp;
boolean subtypeFilter1 = FILTER_DUPLICATE_POI_SUBTYPE.contains(subType1);
boolean subtypeFilter2 = FILTER_DUPLICATE_POI_SUBTYPE.contains(subType2);
if (subtypeFilter1 != subtypeFilter2) {
// to filter second
return subtypeFilter1 ? 1 : -1;
}
cmp = c.collator.compare(type1, type2);
if (cmp != 0) {
return cmp;
@ -1047,12 +1040,17 @@ public class SearchUICore {
@Override
public int compare(SearchResult o1, SearchResult o2) {
for(ResultCompareStep step : ResultCompareStep.values()) {
List<ResultCompareStep> steps = new ArrayList<>();
for (ResultCompareStep step : ResultCompareStep.values()) {
int r = step.compare(o1, o2, this);
if(r != 0) {
steps.add(step);
if (r != 0) {
// debug crashes and identify non-transitive comparision
// LOG.debug(String.format("%d: %s o1='%s' o2='%s'", r, steps, o1, o2));
return r;
}
}
// LOG.debug(String.format("EQUAL: o1='%s' o2='%s'", o1, o2));
return 0;
}

View file

@ -10,7 +10,7 @@
android:value="fb792288460976727"/>
<activity
android:name="net.osmand.plus.activities.MapActivity"
android:theme="@style/FirstSplashScreenFreeDev"
android:theme="@style/FirstSplashScreenNightlyFree"
tools:replace="android:theme"/>
<service
android:name="net.osmand.plus.NavigationService"

View file

@ -1,6 +1,3 @@
apply plugin: 'com.android.library'
apply plugin: 'ivy-publish'
task printc {
configurations.each { if(it.isCanBeResolved()) println it.name }
}
@ -11,21 +8,29 @@ android {
// compileNdkVersion "android-ndk-r17b"
defaultConfig {
minSdkVersion 15
targetSdkVersion 29
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
}
lintOptions {
tasks.lint.enabled = false
abortOnError false
}
// related to kuromoji
//packagingOptions {
// exclude '/META-INF/CONTRIBUTORS.md'
// exclude '/META-INF/LICENSE.md'
// exclude '/META-INF/NOTICE.md'
//}
// This is from OsmAndCore_android.aar - for some reason it's not inherited
aaptOptions {
// Don't compress any embedded resources
noCompress "qz"
cruncherEnabled = false
// Flag notifies aapt to keep the attribute IDs around
// additionalParameters "--no-version-vectors"
}
dexOptions {
@ -34,11 +39,11 @@ android {
sourceSets {
main {
manifest.srcFile "AndroidManifest-library.xml"
manifest.srcFile "AndroidManifest.xml"
jni.srcDirs = []
jniLibs.srcDirs = ["libs"]
aidl.srcDirs = ["src"]
java.srcDirs = ["src", "src-google"]
java.srcDirs = ["src"]
resources.srcDirs = ["src"]
renderscript.srcDirs = ["src"]
res.srcDirs = ["res"]
@ -85,7 +90,7 @@ android {
}
// CoreVersion
// Build that doesn't include 3D OpenGL
// Build that doesn't include 3D OpenGL
legacy {
dimension "coreversion"
}
@ -95,20 +100,12 @@ android {
debug {
debuggable true
}
release {
debuggable false
}
}
}
def replaceNoTranslate(line) {
if (line.contains("\"versionFeatures\"")) {
return line.replaceAll(">[^<]*<", ">" + "" + "<")
}
return line;
}
task updateNoTranslate(type: Copy) {
from('.') {
include 'no_translate.xml'
@ -130,7 +127,7 @@ task validateTranslate {
line.contains("1\$ ") || line.contains("2\$ ") || line.contains("3\$ ") ||
line.contains("%1s") || line.contains(" 1\$s") ||
(line.contains("% \$") || line.contains("% 1") || line.contains("% 2") ||
line.contains("% 3") || line.contains("% s"))) {
line.contains("% 3") || line.contains("% s"))) {
throw new GradleException("Incorrect translation " + it.getAbsolutePath() + " " + line);
}
}
@ -151,7 +148,7 @@ task collectVoiceAssets(type: Sync) {
}
task cleanNoTranslate(type: Delete) {
delete('res/values/no_translate.xml')
delete('res/values/no_translate.xml')
}
task collectFonts(type: Copy) {
@ -180,7 +177,7 @@ task collectHelpContentsAssets(type: Copy) {
include "*.html"
}
from("../../help/website/blog_articles") {
include "osmand-3-8-released.html"
include "osmand-3-9-released.html"
}
into "assets/feature_articles"
}
@ -277,8 +274,6 @@ task collectExternalResources {
// Legacy core build
import org.apache.tools.ant.taskdefs.condition.Os
import java.util.regex.Pattern
task buildOsmAndCore(type: Exec) {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase()
@ -297,7 +292,7 @@ task buildOsmAndCore(type: Exec) {
flavour = flavour.length() == 0 ? "X86_ONLY" : ""
}
}
description "Build Legacy OsmAndCore"
if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
@ -325,38 +320,11 @@ task cleanupDuplicatesInCore() {
}
}
afterEvaluate {
android.libraryVariants.all { variant ->
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
}
}
task appStart(type: Exec) {
// linux
// linux
commandLine 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
// windows
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
}
project.afterEvaluate {
publishing {
repositories {
ivy {
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
version = "0.1-SNAPSHOT"
}
}
publications {
aar(IvyPublication) {
artifact bundleLegacyFatDebugAar {
classifier 'debug'
}
artifact bundleLegacyFatReleaseAar {
classifier 'release'
}
}
}
}
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
}
dependencies {
@ -369,7 +337,7 @@ dependencies {
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.preference:preference:1.1.0'
implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
implementation group: 'commons-logging', name: 'commons-logging', version: '1.2'
implementation 'commons-codec:commons-codec:1.11'
@ -387,28 +355,21 @@ dependencies {
// JS core
implementation group: 'org.mozilla', name: 'rhino', version: '1.7.9'
// size restrictions
// implementation 'com.ibm.icu:icu4j:50.1'
// implementation 'com.ibm.icu:icu4j:50.1'
// implementation 'net.sf.trove4j:trove4j:3.0.3'
// qtcoreImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
// qtcoredebugImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
legacyImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar"
// qtcoredebugImplementation "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar"
// qtcoredebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
// qtcoreImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
// qtcoreImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){
implementation("com.getkeepsafe.taptargetview:taptargetview:1.12.0") {
exclude group: 'com.android.support'
}
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'
implementation ("com.github.HITGIF:TextFieldBoxes:1.4.5"){
implementation("com.github.HITGIF:TextFieldBoxes:1.4.5") {
exclude group: 'com.android.support'
}
implementation('com.github.scribejava:scribejava-apis:7.1.1'){
implementation('com.github.scribejava:scribejava-apis:7.1.1') {
exclude group: "com.fasterxml.jackson.core"
}
implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'
}
}

View file

@ -0,0 +1,64 @@
apply plugin: 'com.android.library'
apply plugin: 'ivy-publish'
apply from: 'build-common.gradle'
android {
defaultConfig {
minSdkVersion 15
}
lintOptions {
tasks.lint.enabled = false
}
sourceSets {
main {
manifest.srcFile "AndroidManifest-library.xml"
java.srcDirs = ["src", "src-gms", "src-google"]
}
}
productFlavors {
// CoreVersion
// Build that doesn't include 3D OpenGL
legacy {
dimension "coreversion"
}
}
}
def replaceNoTranslate(line) {
return line;
}
afterEvaluate {
android.libraryVariants.all { variant ->
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
}
}
project.afterEvaluate {
publishing {
repositories {
ivy {
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
version = "0.1-SNAPSHOT"
}
}
publications {
aar(IvyPublication) {
artifact bundleLegacyFatDebugAar {
classifier 'debug'
}
artifact bundleLegacyFatReleaseAar {
classifier 'release'
}
}
}
}
}
dependencies {
implementation 'com.google.android.gms:play-services-location:17.1.0'
}

View file

@ -1,12 +1,12 @@
apply plugin: 'com.android.application'
apply from: 'build-common.gradle'
// Global Parameters accepted
// TARGET_APP_NAME - app name
// APK_NUMBER_VERSION - version number of apk
// APK_VERSION_SUFFIX - build number like #99999Z, appended (for dev builds) to Manifest's versionName as X.X.X#99999Z
// Z means flavor: M=-master, D=-main-default, B=-Blackberry, Des=-design, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy
// Z means flavor: M=-master, D=-main-default, Des=-design, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy
// APP_EDITION - date stamp of builds
// APP_FEATURES - features +play_market +gps_status -parking_plugin -blackberry -free_version -amazon
// 1. To be done Filter fonts
// <unzip src="OsmAndCore_android.aar" dest=".">
@ -17,15 +17,7 @@ apply plugin: 'com.android.application'
// </unzip>
// Less important
task printc {
configurations.each { if(it.isCanBeResolved()) println it.name }
}
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
// compileNdkVersion "android-ndk-r17b"
signingConfigs {
development {
storeFile file("../keystores/debug.keystore")
@ -44,21 +36,15 @@ android {
defaultConfig {
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
targetSdkVersion 29
versionCode 390
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
multiDexEnabled true
versionName "3.9.0"
versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName
// Stops the Gradle plugins automatic rasterization of vectors
// vectorDrawables.generatedDensities = ['hdpi']
vectorDrawables.useSupportLibrary = true
}
lintOptions {
lintConfig file("lint.xml")
abortOnError false
warningsAsErrors false
}
@ -79,48 +65,33 @@ android {
// exclude '/META-INF/NOTICE.md'
//}
// This is from OsmAndCore_android.aar - for some reason it's not inherited
aaptOptions {
// Don't compress any embedded resources
noCompress "qz"
cruncherEnabled = false
// Flag notifies aapt to keep the attribute IDs around
// additionalParameters "--no-version-vectors"
}
dexOptions {
javaMaxHeapSize "4g"
}
sourceSets {
main {
manifest.srcFile "AndroidManifest.xml"
jni.srcDirs = []
jniLibs.srcDirs = ["libs"]
aidl.srcDirs = ["src"]
java.srcDirs = ["src"]
resources.srcDirs = ["src"]
renderscript.srcDirs = ["src"]
res.srcDirs = ["res"]
assets.srcDirs = ["assets"]
}
debug {
manifest.srcFile "AndroidManifest-debug.xml"
}
full {
java.srcDirs = ["src-google"]
androidFull {
java.srcDirs = ["src-nogms", "src-google"]
}
free {
java.srcDirs = ["src-google"]
manifest.srcFile "AndroidManifest-free.xml"
gplayFull {
java.srcDirs = ["src-gms", "src-google"]
}
freedev {
java.srcDirs = ["src-google"]
manifest.srcFile "AndroidManifest-freedev.xml"
gplayFree {
java.srcDirs = ["src-gms", "src-google"]
manifest.srcFile "AndroidManifest-gplayFree.xml"
}
freehuawei {
java.srcDirs = ["src-huawei"]
manifest.srcFile "AndroidManifest-freehuawei.xml"
nightlyFree {
java.srcDirs = ["src-nogms", "src-google"]
manifest.srcFile "AndroidManifest-nightlyFree.xml"
}
amazonFree {
java.srcDirs = ["src-nogms", "src-google"]
}
amazonFull {
java.srcDirs = ["src-nogms", "src-google"]
}
huawei {
java.srcDirs = ["src-nogms", "src-google"]
manifest.srcFile "AndroidManifest-huawei.xml"
}
legacy {
@ -130,67 +101,43 @@ android {
flavorDimensions "version", "coreversion", "abi"
productFlavors {
// ABI
armv7 {
dimension "abi"
ndk {
abiFilter 'armeabi-v7a'
}
}
arm64 {
dimension "abi"
ndk {
abiFilter 'arm64-v8a'
}
}
x86 {
dimension "abi"
ndk {
abiFilters 'x86', 'x86_64'
}
}
armonly {
dimension "abi"
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a'
}
}
fat {
dimension "abi"
ndk {
abiFilters 'arm64-v8a', 'x86', 'x86_64', 'armeabi-v7a'
}
}
// Version
freedev {
nightlyFree {
dimension "version"
applicationId "net.osmand.dev"
// resConfig "en"
}
free {
dimension "version"
applicationId "net.osmand"
}
full {
androidFull {
dimension "version"
applicationId "net.osmand.plus"
}
freehuawei {
gplayFree {
dimension "version"
applicationId "net.osmand"
}
gplayFull {
dimension "version"
applicationId "net.osmand.plus"
}
amazonFree {
dimension "version"
applicationId "net.osmand"
}
amazonFull {
dimension "version"
applicationId "net.osmand.plus"
}
huawei {
dimension "version"
applicationId "net.osmand.huawei"
}
// CoreVersion
// Build that doesn't include 3D OpenGL
legacy {
dimension "coreversion"
}
// Build that includes 3D OpenGL release
qtcore {
opengl {
dimension "coreversion"
}
// Build that includes 3D OpenGL debug
qtcoredebug {
opengldebug {
dimension "coreversion"
}
}
@ -216,226 +163,9 @@ def replaceNoTranslate(line) {
if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) {
return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<")
}
if (line.contains("\"versionFeatures\"") && System.getenv("APP_FEATURES")) {
return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_FEATURES") + "<")
}
return line;
}
task updateNoTranslate(type: Copy) {
from('.') {
include 'no_translate.xml'
filter {
line -> replaceNoTranslate(line);
}
}
into 'res/values/'
}
task validateTranslate {
println "Validating translations"
file("res").eachFileRecurse groovy.io.FileType.FILES, {
if (it.name == "strings.xml" || it.name == "phrases.xml") {
it.eachLine { line ->
if (line.contains("\$ s") || line.contains("\$ d") || line.contains("\$ f") ||
line.contains(" \$s") || line.contains(" \$d") || line.contains(" \$f") ||
line.contains("1\$ ") || line.contains("2\$ ") || line.contains("3\$ ") ||
line.contains("%1s") || line.contains(" 1\$s") ||
(line.contains("% \$") || line.contains("% 1") || line.contains("% 2") ||
line.contains("% 3") || line.contains("% s"))) {
throw new GradleException("Incorrect translation " + it.getAbsolutePath() + " " + line);
}
}
}
}
}
task downloadWorldMiniBasemap {
doLast {
ant.get(src: 'http://builder.osmand.net/basemap/World_basemap_mini_2.obf', dest: 'assets/World_basemap_mini.obf', skipexisting: 'true')
}
}
task collectVoiceAssets(type: Sync) {
from "../../resources/voice"
into "assets/voice"
include "**/*.js"
}
task cleanNoTranslate(type: Delete) {
delete('res/values/no_translate.xml')
}
task collectFonts(type: Copy) {
from "../../resources/fonts"
from "../../resources/rendering_styles/fonts"
// from "../../resources/rendering_styles/fonts/OpenSans"
into "assets/fonts"
include "*.ttf"
}
task collectHelpContentsStyle(type: Copy) {
from("../../help/website/help/") {
include "style.css"
}
into "assets"
}
task collectHelpContentsAssets(type: Copy) {
from("../../help/website/help") {
include "about.html"
include "changes.html"
include "faq.html"
include "map-legend.html"
}
from("../../help/website/feature_articles") {
include "*.html"
}
from("../../help/website/blog_articles") {
include "osmand-3-9-released.html"
}
into "assets/feature_articles"
}
task copyPoiCategories(type: Copy) {
from("../../resources/poi") {
include "poi_categories.json"
}
into "assets"
}
task copyMapShaderIcons(type: Sync) {
// from "../../resources/rendering_styles/style-icons/map-shaders-png"
// into "res/"
from "../../resources/rendering_styles/style-icons/map-shaders-vector"
into "res/drawable"
include "**/*.png", "**/*.xml"
preserve {
include '**/*'
exclude "**/h_*"
}
}
task copyMapPOIIcons(type: Sync) {
from "../../resources/rendering_styles/style-icons/map-icons-vector"
into "res/drawable/"
// from "../../resources/rendering_styles/style-icons/map-icons-png"
// into "res/"
include "**/*.png", "**/*.xml"
preserve {
include '**/*'
exclude "**/mm_*"
}
}
task copyLargePOIIcons(type: Sync) {
from "../../resources/rendering_styles/style-icons/poi-icons-vector"
into "res/drawable/"
include "**/*.png", "**/*.xml"
preserve {
include '**/*'
exclude "**/mx_*"
}
}
task copyWidgetIconsXhdpi(type: Sync) {
from "res/drawable-xxhdpi/"
into "res/drawable-large-xhdpi/"
include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
preserve {
include '*'
exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
}
}
task copyWidgetIconsHdpi(type: Sync) {
from "res/drawable-xhdpi/"
into "res/drawable-large-hdpi/"
include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
preserve {
include '*'
exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
}
}
task copyWidgetIcons(type: Sync) {
from "res/drawable-hdpi/"
into "res/drawable-large/"
include "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
preserve {
include '*'
exclude "**/widget_*.png", "**/widget_*.xml", "**/map_*.xml", "**/map_*.png"
}
}
task collectExternalResources {
dependsOn collectVoiceAssets,
collectFonts,
collectHelpContentsAssets,
collectHelpContentsStyle,
copyMapShaderIcons,
copyMapPOIIcons,
copyLargePOIIcons,
updateNoTranslate,
validateTranslate,
copyWidgetIcons,
copyWidgetIconsHdpi,
copyWidgetIconsXhdpi,
copyPoiCategories,
downloadWorldMiniBasemap
}
// Legacy core build
import org.apache.tools.ant.taskdefs.condition.Os
task buildOsmAndCore(type: Exec) {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase()
String flavour = "";
if(!tskReqStr.contains("fat")) {
if(tskReqStr.contains("arm64")) {
flavour = flavour.length() == 0 ? "ARM64_ONLY" : ""
}
if(tskReqStr.contains("armv7")) {
flavour = flavour.length() == 0 ? "ARMV7_ONLY" : ""
}
if(tskReqStr.contains("armonly")) {
flavour = flavour.length() == 0 ? "ARM_ONLY" : ""
}
if(tskReqStr.contains("x86")) {
flavour = flavour.length() == 0 ? "X86_ONLY" : ""
}
}
description "Build Legacy OsmAndCore"
if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
if(flavour.length() > 0) {
environment "$flavour", "1"
}
commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath()
} else {
commandLine "cmd", "/c", "echo", "Not supported"
}
}
task cleanupDuplicatesInCore() {
dependsOn buildOsmAndCore
// doesn't work for legacy debug builds
doLast {
file("libc++/armeabi-v7a").mkdirs()
file("libs/armeabi-v7a/libc++_shared.so").renameTo(file("libc++/armeabi-v7a/libc++_shared.so"))
file("libc++/arm64-v8a").mkdirs()
file("libs/arm64-v8a/libc++_shared.so").renameTo(file("libc++/arm64-v8a/libc++_shared.so"))
file("libc++/x86").mkdirs()
file("libs/x86/libc++_shared.so").renameTo(file("libc++/x86/libc++_shared.so"))
file("libc++/x86_64").mkdirs()
file("libs/x86_64/libc++_shared.so").renameTo(file("libc++/x86_64/libc++_shared.so"))
}
}
afterEvaluate {
android.applicationVariants.all { variant ->
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
@ -447,52 +177,14 @@ afterEvaluate {
}
}
task appStart(type: Exec) {
// linux
commandLine 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
// windows
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
}
dependencies {
implementation project(path: ':OsmAnd-java', configuration: 'android')
implementation project(':OsmAnd-api')
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.preference:preference:1.1.0'
implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
openglImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
opengldebugImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
implementation group: 'commons-logging', name: 'commons-logging', version: '1.2'
implementation 'commons-codec:commons-codec:1.11'
implementation 'it.unibo.alice.tuprolog:tuprolog:3.2.1'
implementation 'org.apache.commons:commons-compress:1.17'
implementation 'com.moparisthebest:junidecode:0.1.1'
implementation 'org.immutables:gson:2.5.0'
implementation 'com.vividsolutions:jts-core:1.14.0'
implementation 'com.google.openlocationcode:openlocationcode:1.0.4'
implementation 'com.android.billingclient:billing:2.0.3'
// turn off for now
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'me.zhanghai.android.materialprogressbar:library:1.4.2'
// JS core
implementation group: 'org.mozilla', name: 'rhino', version: '1.7.9'
// size restrictions
// implementation 'com.ibm.icu:icu4j:50.1'
// implementation 'net.sf.trove4j:trove4j:3.0.3'
qtcoreImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
qtcoredebugImplementation fileTree(include: ['QtAndroid.jar', 'QtAndroidBearer.jar'], dir: 'libs')
legacyImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar"
qtcoredebugImplementation "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar"
qtcoredebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
qtcoreImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
qtcoreImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
opengldebugImplementation "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar"
opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
openglImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
openglImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){
exclude group: 'com.android.support'
}
@ -504,8 +196,10 @@ dependencies {
exclude group: "com.fasterxml.jackson.core"
}
implementation 'com.jaredrummler:colorpicker:1.1.0'
freehuaweiImplementation 'com.huawei.hms:iap:5.0.2.300'
implementation "org.bouncycastle:bcpkix-jdk15on:1.56"
huaweiImplementation 'com.huawei.hms:iap:5.0.2.300'
gplayFreeImplementation 'com.google.android.gms:play-services-location:17.1.0'
gplayFullImplementation 'com.google.android.gms:play-services-location:17.1.0'
}

View file

@ -12,7 +12,6 @@
<string name="ga_api_key">UA-28342846-2</string>
<string name="ga_dispatchPeriod">10</string>
<string name="ga_debug">true</string>
<string name="versionFeatures">+play_market -amazon -blackberry</string>
<string name="openstreetmap_copyright"><a href="https://www.openstreetmap.org/copyright">&#169; OpenStreetMap</a></string>
<string name="app_edition"></string>
<string name="support_email">support@osmand.net</string>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M9,3H7V8H4L8,13L12,8H9V3Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M9,13H7V8H4L8,3L12,8H9V13Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -27,6 +27,8 @@
android:layout_weight="1"
android:layout_marginLeft="@dimen/content_padding"
android:layout_marginStart="@dimen/content_padding"
android:paddingTop="@dimen/content_padding_small"
android:paddingBottom="@dimen/content_padding_small"
android:orientation="vertical">
<net.osmand.plus.widgets.TextViewEx
@ -34,7 +36,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/default_list_text_size"
app:typeface="@string/font_roboto_regular"

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:gravity="center_vertical"
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
android:paddingStart="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding">
<LinearLayout
android:id="@+id/basic_item_body"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?attr/selectableItemBackground">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:paddingTop="@dimen/content_padding_small"
android:paddingBottom="@dimen/content_padding"
android:textAppearance="@style/TextAppearance.ListItemTitle"
tools:text="Some title" />
</LinearLayout>
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switch_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
android:layout_marginEnd="@dimen/bottom_sheet_content_margin"
android:layout_marginRight="@dimen/bottom_sheet_content_margin"
tools:checked="true" />
</LinearLayout>
<LinearLayout
android:id="@+id/additional_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/content_padding_half"
android:layout_marginBottom="@dimen/content_padding_half"
android:background="?attr/divider_color_basic" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon_after_divider"
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
android:layout_width="@dimen/favorites_icon_right_margin"
android:layout_height="@dimen/favorites_icon_right_margin"
android:layout_gravity="center"
android:layout_marginStart="@dimen/content_padding"
android:layout_marginLeft="@dimen/content_padding"
app:srcCompat="@drawable/ic_action_track_line_bold_color" />
</LinearLayout>
</LinearLayout>

View file

@ -129,6 +129,19 @@
tools:visibility="visible"
android:visibility="gone" />
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/error_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="@dimen/description_letter_spacing"
android:paddingTop="@dimen/content_padding_half"
android:textColor="@color/color_invalid"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular"
tools:text="Error text"
tools:visibility="visible"
android:visibility="gone" />
</LinearLayout>
<View

View file

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="@dimen/text_button_letter_spacing"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/content_padding_small"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/content_padding_small"
android:text="@string/monitoring_settings"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_medium" />
<include
android:id="@+id/show_track_on_map"
layout="@layout/bottom_sheet_with_switch_divider_and_additional_button" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dashboard_divider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingTop="@dimen/bottom_sheet_content_margin"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding">
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/interval_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:textSize="@dimen/default_list_text_size"
tools:text="Interval value" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/up_down_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
app:srcCompat="@drawable/ic_action_arrow_down" />
</LinearLayout>
<LinearLayout
android:id="@+id/always_ask_and_range_slider_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding">
<com.google.android.material.slider.RangeSlider
android:id="@+id/interval_slider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/save_track_interval_globally"
android:stepSize="1"
app:haloRadius="@dimen/content_padding_small"
app:labelBehavior="gone"
app:thumbColor="@color/profile_icon_color_blue_light"
app:thumbRadius="@dimen/content_padding_small_half"
app:trackColorActive="@color/profile_icon_color_blue_light"
app:trackColorInactive="#4D007EB3"
app:tickColorInactive="#007EB3"
app:trackHeight="@dimen/slider_track_height"
tools:visibility="visible" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/confirm_every_run"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:letterSpacing="@dimen/text_button_letter_spacing"
android:minHeight="@dimen/context_menu_buttons_bottom_height"
android:paddingLeft="@dimen/content_padding_small"
android:paddingRight="@dimen/content_padding_small"
android:text="@string/confirm_every_run"
android:textColor="?attr/color_dialog_buttons"
android:textSize="@dimen/default_list_text_size"
osmand:typeface="@string/font_roboto_regular"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/second_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="@dimen/content_padding"
android:layout_marginBottom="@dimen/bottom_sheet_content_margin_small"
android:background="?attr/dashboard_divider" />
</LinearLayout>

View file

@ -3669,4 +3669,10 @@
<string name="poi_waste_transfer_station">محطة نقل نفايات</string>
<string name="poi_weightbridge">ميزان المركبات</string>
<string name="poi_ranger_station">مكتب الحارس</string>
<string name="poi_diplomatic_services_citizen_services_filter">خدمات المواطن</string>
<string name="poi_diplomatic_services_immigrant_visas_filter">تأشيرات الهجرة</string>
<string name="poi_diplomatic_services_non_immigrant_visas_filter">تأشيرات لغير المهاجرين</string>
<string name="poi_liaison_filter">اتصال</string>
<string name="poi_consulate_filter">قنصلية</string>
<string name="poi_embassy_filter">سفارة</string>
</resources>

View file

@ -2826,7 +2826,7 @@
<string name="touring_view_render_descr">أسلوب الملاحة مع التباين العالي والحد الأعلى من التفاصيل. يتضمن كل خيارات النمط الافتراضي أوسماند، مع عرض أكبر قدر ممكن من التفاصيل ، ولا سيما الطرق والمسارات وطرق السفر الأخرى. التمييز الواضح بين \"جولة الأطلس\" بين أنواع الطرق. مناسبة للاستخدام النهاري والليلي وفي الهواء الطلق.</string>
<string name="default_render_descr">أسلوب الغرض العام. تقديم نظافة مبسطة في المدن المكتظة بالسكان. الملامح الرئيسية: خطوط الكنتور ، والطرق ، وجودة السطح ، والقيود المفروضة على الوصول ، ودروع الطريق ، والمسارات التي تظهر وفقاً لمقياس SAC ، وميزات رياضة الماء الأبيض.</string>
<string name="travel_card_download_descr">قم بتنزيل أدلة السفر هذه من ويكي الرحلات لعرض مقالات حول الأماكن في العالم بدون إنترنت.</string>
<string name="welcome_to_open_beta_description">دليل السفر حاليا على أساس Wikivoyage. اختبار كافة الميزات أثناء اختبار بيتا المفتوحة مجانا.بعد ذلك، وأدلة السفر ستكون متاحة للمشتركين في أوسماند غير المحدود و اصحاب +أوسماند.</string>
<string name="welcome_to_open_beta_description">دليل السفر حاليا على أساس Wikivoyage. اختبار كافة الميزات أثناء اختبار بيتا المفتوحة مجانا.</string>
<string name="av_locations_selected_desc">ملف GPX مع الإحداثيات والبيانات من الملاحظات المحددة.</string>
<string name="av_locations_all_desc">ملف GPX مع الإحداثيات والبيانات من كافة الملاحظات.</string>
<!--string name="release_3_0">• جديد: دعم للسفر دون اتصال عالمية وأدلة. وترتبط المواقع المشار إليها على الخريطة. الحصول على البيانات الأولية من ويكيفوياجي.
@ -4023,7 +4023,6 @@
<string name="routing_engine_vehicle_type_foot">قدم</string>
<string name="routing_engine_vehicle_type_bike">دراجة هوائية</string>
<string name="routing_engine_vehicle_type_car">سيارة</string>
<string name="message_error_recheck_parameters">خطأ، أعد التحقق من المعايير</string>
<string name="copy_address">نسخ العنوان</string>
<string name="online_routing_engine">محرك التوجيه عبر الإنترنت</string>
<string name="online_routing_engines">محركات التوجيه عبر الإنترنت</string>
@ -4031,4 +4030,37 @@
<string name="select_folder">تحديد مجلد</string>
<string name="select_folder_descr">تحديد مجلد أو إضافة واحد جديد</string>
<string name="shared_string_empty">فارغ</string>
<string name="analyze_by_intervals">التحليل حسب الفواصل الزمنية (الفاصل الزمني)</string>
<string name="upload_to_openstreetmap">رفع إلى خريطة الشارع المفتوح</string>
<string name="edit_track">تحرير المسار</string>
<string name="rename_track">تسمية المسار</string>
<string name="change_folder">تغيير المجلد</string>
<string name="shared_string_sec">ثانية</string>
<string name="announcement_time_passing">تمرير</string>
<string name="announcement_time_approach">طريقة</string>
<string name="announcement_time_prepare_long">تحضير طويل</string>
<string name="announcement_time_prepare">إعداد</string>
<string name="announcement_time_off_route">إيقاف المسار</string>
<string name="announcement_time_arrive">الوصول إلى الوجهة</string>
<string name="shared_string_turn">منعطف</string>
<string name="announcement_time_intervals">الوقت والمسافة</string>
<string name="announcement_time_descr">وقت الإعلان عن مختلف المطالبات الصوتية يعتمد على نوع موجه، وسرعة التنقل الحالية وسرعة التنقل الافتراضية.</string>
<string name="announcement_time_title">وقت الإعلان</string>
<string name="start_recording">بدء التسجيل</string>
<string name="show_track_on_map">عرض المسار على الخريطة</string>
<string name="routing_engine_vehicle_type_wheelchair">منحدرات</string>
<string name="routing_engine_vehicle_type_hiking">مشي</string>
<string name="routing_engine_vehicle_type_walking">مشي</string>
<string name="routing_engine_vehicle_type_cycling_electric">ركوب الدراجات الكهربائية</string>
<string name="routing_engine_vehicle_type_cycling_mountain">ركوب الدراجات الجبلية</string>
<string name="routing_engine_vehicle_type_cycling_road">ركوب الدراجات على الطرق</string>
<string name="routing_engine_vehicle_type_cycling_regular">ركوب الدراجات</string>
<string name="routing_engine_vehicle_type_hgv">مركبات الحمولة الثقيلة</string>
<string name="routing_engine_vehicle_type_small_truck">شاحنة صغيرة</string>
<string name="routing_engine_vehicle_type_truck">شاحنة</string>
<string name="routing_engine_vehicle_type_scooter">سكوتر</string>
<string name="routing_engine_vehicle_type_racingbike">سباق الدراجات</string>
<string name="routing_engine_vehicle_type_mtb">MTB</string>
<string name="message_server_error">خطأ في الخادم: %1$s</string>
<string name="message_name_is_already_exists">الاسم موجود بالفعل</string>
</resources>

View file

@ -1218,7 +1218,7 @@
<string name="popular_destinations">Destinos sonaos</string>
<string name="paid_app">Aplicación de pagu</string>
<string name="paid_plugin">Plugin de pagu</string>
<string name="welcome_to_open_beta_description">Anguaño les guíes de viaxes básense en Wikivoyage. Prueba de baldre toles carauterístiques na beta abierta. Dempués, eses guíes van tar disponibles pa los soscriptores d\'OsmAnd Unlimited y dueños dOsmAnd +.</string>
<string name="welcome_to_open_beta_description">Anguaño les guíes de viaxes básense en Wikivoyage. Prueba de baldre toles carauterístiques na beta abierta.</string>
<string name="start_editing_card_description">Puedes y tendríes d\'editar cualesquier artículu de Wikivoyage. Comparti la conocencia, esperiencia, talentu y atención</string>
<string name="get_unlimited_access">Consiguir l\'accesu ensin llende</string>
<string name="all_markers_moved_to_history">Tolos marcadores del mapa moviéronse al historial</string>

View file

@ -2702,7 +2702,7 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
<string name="update_is_available">Abnaŭliennie dastupnaje</string>
<string name="download_file">Spampavać fajl</string>
<string name="start_editing_card_image_text">Biasplatny susvietny turystyčny daviednik, jaki moža redahavać kožny.</string>
<string name="welcome_to_open_beta_description">Turystyčnyja daviedniki ŭ ciapierašni čas bazujucca na asnovie Wikivoyage. Testujcie usie funkcyi biasplatna padčas adkrytaha beta-testavannia. Potym daviedniki buduć dastupnyja padpiščykam OsmAnd Unlimited i ŭladaĺnikam OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Turystyčnyja daviedniki ŭ ciapierašni čas bazujucca na asnovie Wikivoyage. Testujcie usie funkcyi biasplatna padčas adkrytaha beta-testavannia.</string>
<string name="start_editing_card_description">Vam možna i varta redahavać liuby artykul na Wikivoyage. Dzialiciesia viedami, vopytam, talientam i vašaj ŭvahaj</string>
<string name="start_editing">Pačać redahavańnie</string>
<string name="get_unlimited_access">Atrymać nieabmiežavany dostup</string>

View file

@ -2734,7 +2734,7 @@
<string name="update_is_available">Даступна абнаўленне</string>
<string name="download_file">Спампаваць файл</string>
<string name="start_editing_card_image_text">Бясплатны сусветны турыстычны даведнік, які можа рэдагаваць кожны.</string>
<string name="welcome_to_open_beta_description">Турыстычныя даведнікі ў цяперашні час базуюцца на Wikivoyage. Тэстуйце усе функцыі бясплатна падчас адкрытага бэта-тэставання. Потым даведнікі будуць даступныя падпісантам OsmAnd Unlimited і карыстальнікам OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Турыстычныя даведнікі ў цяперашні час базуюцца на Wikivoyage. Тэстуйце усе функцыі бясплатна падчас адкрытага бэта-тэставання.</string>
<string name="start_editing_card_description">Вам можна і варта рэдагаваць любы артыкул на Wikivoyage. Дзяліцеся ведамі, досведам, талентамі, і тым, што заўважылі.</string>
<string name="start_editing">Пачаць рэдагаванне</string>
<string name="get_unlimited_access">Атрымаць неабмежаваны доступ</string>

View file

@ -2713,7 +2713,7 @@
<string name="osmand_team">Equip OsmAnd</string>
<string name="paid_app">Aplicació de pagament</string>
<string name="paid_plugin">Connector de pagament</string>
<string name="welcome_to_open_beta_description">Les guies de viatge es basen en Viquiviatges. Proveu totes les funcions durant la fase oberta de proves, de franc. Després, les guies de viatge estaran disponibles per als subscriptors de OsmAnd Il·limitat i els propietaris de OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Les guies de viatge es basen en Viquiviatges. Proveu totes les funcions durant la fase oberta de proves, de franc.</string>
<string name="wikivoyage_travel_guide_descr">Guies dels llocs més interessants del planeta, dins OsmAnd, sense cap connexió a Internet.</string>
<string name="in_app_purchase">Compres des de l\'aplicació</string>
<string name="in_app_purchase_desc">Pagament únic</string>

View file

@ -2769,7 +2769,7 @@
<string name="default_render_descr">Obecný styl. Čisté vykreslování hustě osídlených měst. Obsahuje vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty.</string>
<string name="travel_card_download_descr">Stáhněte si cestovní průvodce Wikivoyage a prohlížejte články o místech po celém světě bez připojení na internet.</string>
<string name="start_editing_card_image_text">Bezplatný cestovní průvodce, který může upravovat každý.</string>
<string name="welcome_to_open_beta_description">Cestovní průvodci jsou nyní založené na Wikivoyage. Všechny jejich funkce můžete otestovat zdarma během beta testování. Poté budou zpřístupněny předplatitelům služby OsmAnd Live a uživatelům OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Cestovní průvodci jsou nyní založené na Wikivoyage. Všechny jejich funkce můžete otestovat zdarma během beta testování.</string>
<string name="start_editing_card_description">Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost.</string>
<string name="ask_for_location_permission">Pro pokračování prosím udělte OsmAndu oprávnění pro přístup k poloze.</string>
<string name="rendering_value_black_name">Černá</string>
@ -3960,7 +3960,6 @@
<string name="routing_engine_vehicle_type_foot">Chůze</string>
<string name="routing_engine_vehicle_type_bike">Kolo</string>
<string name="routing_engine_vehicle_type_car">Auto</string>
<string name="message_error_recheck_parameters">Chyba, zkontrolujte parametry</string>
<string name="copy_address">Kopírovat adresu</string>
<string name="online_routing_engine">Online navigační služba</string>
<string name="online_routing_engines">Online navigační služby</string>
@ -3968,4 +3967,37 @@
<string name="select_folder">Zvolte složku</string>
<string name="select_folder_descr">Zvolte složku nebo vytvořte novou</string>
<string name="shared_string_empty">Prázdné</string>
<string name="analyze_by_intervals">Analyzovat podle intervalů (rozdělit interval)</string>
<string name="upload_to_openstreetmap">Nahrát do OpenStreetMap</string>
<string name="edit_track">Editovat stopu</string>
<string name="rename_track">Přejmenovat stopu</string>
<string name="change_folder">Změnit složku</string>
<string name="shared_string_sec">sek.</string>
<string name="announcement_time_passing">Míjení</string>
<string name="announcement_time_approach">Přiblížení</string>
<string name="announcement_time_prepare_long">Dlouhá příprava</string>
<string name="announcement_time_prepare">Příprava</string>
<string name="announcement_time_off_route">Odchýlení od trasy</string>
<string name="announcement_time_arrive">Dosažení cíle</string>
<string name="shared_string_turn">Odbočit</string>
<string name="announcement_time_intervals">Intervaly času a vzdálenosti</string>
<string name="announcement_time_descr">Čas oznámení různých hlasových pokynů závisí na typu pokynu, aktuální rychlosti navigace a výchozí rychlosti navigace.</string>
<string name="announcement_time_title">Čas oznámení</string>
<string name="start_recording">Spustit záznam</string>
<string name="show_track_on_map">Zobrazit stopu na mapě</string>
<string name="routing_engine_vehicle_type_wheelchair">Invalidní vozík</string>
<string name="routing_engine_vehicle_type_hiking">Turistika</string>
<string name="routing_engine_vehicle_type_walking">Chůze</string>
<string name="routing_engine_vehicle_type_cycling_electric">Jízda na elektrokole</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Horská cyklistika</string>
<string name="routing_engine_vehicle_type_cycling_road">Silniční cyklistika</string>
<string name="routing_engine_vehicle_type_cycling_regular">Běžná cyklistika</string>
<string name="routing_engine_vehicle_type_hgv">Nákladní auto</string>
<string name="routing_engine_vehicle_type_small_truck">Malé nákladní auto</string>
<string name="routing_engine_vehicle_type_truck">Kamion</string>
<string name="routing_engine_vehicle_type_scooter">Skútr</string>
<string name="routing_engine_vehicle_type_racingbike">Závodní kolo</string>
<string name="routing_engine_vehicle_type_mtb">Horské kolo</string>
<string name="message_server_error">Chyba serveru: %1$s</string>
<string name="message_name_is_already_exists">Název již existuje</string>
</resources>

View file

@ -2716,7 +2716,7 @@
<string name="update_is_available">Opdatering er tilgængelig</string>
<string name="download_file">Hent fil</string>
<string name="start_editing_card_image_text">Den gratis verdensomspændende rejseguide, som alle kan redigere.</string>
<string name="welcome_to_open_beta_description">Rejseguide er baseret på Wikivoyage. Test alle funktionerne gratis i den åbne beta. Bagefter vil rejseguider være tilgængelig for abonnenter af OsmAnd ubegrænset og ejere af OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Rejseguide er baseret på Wikivoyage. Test alle funktionerne gratis i den åbne beta.</string>
<string name="start_editing_card_description">Du kan og bør redigere en artikel på Wikivoyage. Del viden, erfaringer, talent og din opmærksomhed.</string>
<string name="start_editing">Begynd redigering</string>
<string name="get_unlimited_access">Få ubegrænset adgang</string>

View file

@ -2705,7 +2705,7 @@
<string name="update_is_available">Aktualisierung verfügbar</string>
<string name="download_file">Datei herunterladen</string>
<string name="start_editing_card_image_text">Der kostenlose weltweite Reiseführer, den jeder bearbeiten kann.</string>
<string name="welcome_to_open_beta_description">Die Reisefüher basieren derzeit auf Wikivoyage. Testen Sie alle Funktionen während des Open-Beta-Tests kostenlos. Danach steht die Reiseführerfunktionalität den Abonnenten von OsmAnd Unlimited und den Besitzern von OsmAnd+ zur Verfügung.</string>
<string name="welcome_to_open_beta_description">Die Reisefüher basieren derzeit auf Wikivoyage. Testen Sie alle Funktionen während des Open-Beta-Tests kostenlos.</string>
<string name="start_editing_card_description">Sie können und sollten Artikel auf Wikivoyage bearbeiten. Teilen Sie Wissen, Erfahrung, Talent und Ihre Aufmerksamkeit.</string>
<string name="start_editing">Bearbeitung starten</string>
<string name="get_unlimited_access">Erhalten Sie unbegrenzten Zugang</string>
@ -3962,7 +3962,6 @@
<string name="routing_engine_vehicle_type_foot">Zu Fuß</string>
<string name="routing_engine_vehicle_type_bike">Fahrrad</string>
<string name="routing_engine_vehicle_type_car">Auto</string>
<string name="message_error_recheck_parameters">Fehler, Parameter erneut prüfen</string>
<string name="shared_string_subtype">Subtyp</string>
<string name="keep_it_empty_if_not">Leer lassen, wenn kein API-Schlüssel vorhanden</string>
<string name="copy_address">Adresse kopieren</string>
@ -3973,4 +3972,30 @@
<string name="select_folder">Ordner auswählen</string>
<string name="select_folder_descr">Ordner auswählen oder neuen hinzufügen</string>
<string name="shared_string_empty">Leer</string>
<string name="analyze_by_intervals">Nach Intervallen auswerten (geteiltes Intervall)</string>
<string name="upload_to_openstreetmap">Hochladen zu OpenStreetMap</string>
<string name="edit_track">Track editieren</string>
<string name="rename_track">Track umbenennen</string>
<string name="change_folder">Ordner ändern</string>
<string name="shared_string_turn">Abbiegung</string>
<string name="announcement_time_intervals">Zeit- und Distanzintervalle</string>
<string name="announcement_time_descr">Der Ansagezeitpunkt der verschiedenen Sprachansagen hängt vom Ansagetyp, der aktuellen Navigationsgeschwindigkeit und der Standard-Navigationsgeschwindigkeit ab.</string>
<string name="announcement_time_title">Ansagezeitpunkt</string>
<string name="start_recording">Aufzeichnung starten</string>
<string name="show_track_on_map">Track auf der Karte anzeigen</string>
<string name="routing_engine_vehicle_type_wheelchair">Rollstuhl</string>
<string name="routing_engine_vehicle_type_hiking">Wandern</string>
<string name="routing_engine_vehicle_type_walking">Fußgänger</string>
<string name="routing_engine_vehicle_type_cycling_electric">E-Bike fahren</string>
<string name="routing_engine_vehicle_type_cycling_road">Straßenradsport</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Bergradsport</string>
<string name="routing_engine_vehicle_type_cycling_regular">Normales Radfahren</string>
<string name="routing_engine_vehicle_type_hgv">Lkw</string>
<string name="routing_engine_vehicle_type_small_truck">Kleintransporter</string>
<string name="routing_engine_vehicle_type_truck">Lkw</string>
<string name="routing_engine_vehicle_type_scooter">Motorroller</string>
<string name="routing_engine_vehicle_type_racingbike">Rennrad</string>
<string name="routing_engine_vehicle_type_mtb">Mountainbike</string>
<string name="message_server_error">Server-Fehler: %1$s</string>
<string name="message_name_is_already_exists">Der Name ist bereits vorhanden</string>
</resources>

View file

@ -2718,7 +2718,7 @@
<string name="update_is_available">Υπάρχει διαθέσιμη ενημέρωση</string>
<string name="download_file">Λήψη αρχείου</string>
<string name="start_editing_card_image_text">Ο ελεύθερος παγκόσμιος ταξιδιωτικός οδηγός που οποιοσδήποτε μπορεί να επεξεργαστεί.</string>
<string name="welcome_to_open_beta_description">Το OsmAnd Travel βασίζεται, προς το παρόν, στα βικιταξίδια. Ελέγξτε όλα τα χαρακτηριστικά δωρεάν κατά την ανοικτή βήμα δοκιμή. Κατόπιν, οι οδηγοί ταξιδιού θα είναι διαθέσιμοι στους συνδρομητές του απεριόριστου OsmAnd και στους κατόχους του OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Το OsmAnd Travel βασίζεται, προς το παρόν, στα βικιταξίδια. Ελέγξτε όλα τα χαρακτηριστικά δωρεάν κατά την ανοικτή βήμα δοκιμή.</string>
<string name="start_editing_card_description">Μπορείτε και πρέπει να επεξεργαστείτε οποιοδήποτε άρθρο στο βικιταξίδια, Μοιραστείτε τη γνώση, την εμπειρία, το ταλέντο και την προσοχή σας.</string>
<string name="start_editing">Έναρξη επεξεργασίας</string>
<string name="get_unlimited_access">Πάρτε απεριόριστη πρόσβαση</string>

View file

@ -233,7 +233,7 @@
<string name="shared_string_trip_recording">Registrado de kurso</string>
<string name="shared_string_navigation">Navigi</string>
<string name="osmand_running_in_background">Labori fone</string>
<string name="gps_wake_up_timer">Vek-intervalo de GPS</string>
<string name="gps_wake_up_timer">Vek-ofteco de GPS</string>
<string name="favourites_edit_dialog_title">Informoj pri ŝatataj</string>
<string name="simulate_your_location_stop_descr">Ĉesigi simuladon de pozicio.</string>
<string name="simulate_your_location_descr">Simuli vian pozicion uzante komputitan kurson aŭ registritan GPX-spuron.</string>
@ -587,17 +587,17 @@
<string name="sleep_mode_stop_dialog">Ĉu ĉesigi GPS-an fonan reĝimon?</string>
<string name="stop_navigation_service">Ĉesigi</string>
<string name="confirm_every_run">Demandi ĉiam</string>
<string name="save_global_track_interval">Ĝenerala registrada intervalo</string>
<string name="background_service_int">GPS-a vekintervalo</string>
<string name="save_global_track_interval">Ĝenerala intertempo de registrado</string>
<string name="background_service_int">Vek-ofteco de GPS</string>
<string name="enable_sleep_mode">Aktivigi GPS-an fonan reĝimon</string>
<string name="save_track_to_gpx_globally_headline">Registri spuron laŭpete</string>
<string name="save_track_to_gpx_globally_descr">Ĝeneralan registradon de pozicio al GPXdosiero oni povas (mal)aktivigi per la GPXregistrada fenestraĵo sur la mapekrano.</string>
<string name="save_current_track_descr">Konservi aktualan spuron kiel GPX-dosieron.</string>
<string name="save_current_track">Konservi aktualan spuron</string>
<string name="save_track_to_gpx_descrp">GPX-spuro estas aŭtomate konservata al dosierujo de spuroj dum navigado.</string>
<string name="save_track_interval_globally">Registrada intervalo</string>
<string name="save_track_interval">Registrada intervalo dum navigado</string>
<string name="save_track_interval_descr">Elekti intervalon por registri spurojn dum navigado</string>
<string name="save_track_interval_globally">Intertempo de registrado</string>
<string name="save_track_interval">Registrada intertempo dum navigado</string>
<string name="save_track_interval_descr">Elekti oftecon de registri spuron dum navigado</string>
<string name="voice_provider_descr">Elekti gvidadan voĉon por navigado.</string>
<string name="voice_provider">Gvidada voĉo</string>
<string name="enable_proxy_title">Aktivigi HTTP-retperanton</string>
@ -654,7 +654,7 @@
<string name="select_index_file_to_download">Trovis nenion. Se vi ne povas trovi vian regionon, vi povas fari ĝin mem (rigardu https://osmand.net).</string>
<string name="none_selected_gpx">Unue elektu GPXdosieron per frapetadi.</string>
<string name="local_index_select_gpx_file">Elektu kurson</string>
<string name="gpx_split_interval">Divid-intervalo</string>
<string name="gpx_split_interval">Intertempo de divido</string>
<string name="sort_by_distance">Ordigi laŭ distanco</string>
<string name="sort_by_name">Ordigi laŭ nomo</string>
<string name="plugin_touringview_name">Turisma map-vido</string>
@ -728,8 +728,8 @@
<string name="gpx_info_average_speed">Mezuma rapido: %1$s</string>
<string name="gpx_info_maximum_speed">Maksimuma rapido: %1$s</string>
<string name="gpx_info_avg_altitude">Mezuma altitudo: %1$s</string>
<string name="gpx_info_diff_altitude">Altituda intervalo: %1$s</string>
<string name="gpx_timespan">Tempa intervalo: %1$s</string>
<string name="gpx_info_diff_altitude">Variejo de altitudo: %1$s</string>
<string name="gpx_timespan">Variejo de tempo: %1$s</string>
<string name="gpx_info_asc_altitude">Desupro/alsupro: %1$s</string>
<string name="gpx_timemoving">Tempo movante: %1$s</string>
<string name="gpx_selection_segment_title">Segmento</string>
@ -1121,7 +1121,7 @@
<string name="bg_service_screen_lock_toast">Ekrano ŝlosita</string>
<string name="map_widget_mini_route">Kurs-mapeto</string>
<string name="show_cameras">Rapid-kontroliloj</string>
<string name="bg_service_interval">Agordi vekintervalon:</string>
<string name="bg_service_interval">Agordi vekoftecon:</string>
<string name="show_traffic_warnings">Trafikaj avertoj</string>
<string name="avoid_toll_roads">Sen pagendaj vojoj</string>
<string name="continue_follow_previous_route_auto">Ĉu pluigi sekvi la antaŭan nefinitan kurson? (%1$s sekundoj)</string>
@ -1291,8 +1291,8 @@
<string name="local_openstreetmap_descr_title">Neunutempa (nesinkrona) redakto de OSM:</string>
<string name="local_openstreetmap_settings">OSM-interesejoj/rimarkoj konservitaj en aparato</string>
<string name="local_openstreetmap_settings_descr">Vidi kaj administri loke konservitajn OSMinteresejojn/rimarkojn.</string>
<string name="live_monitoring_interval">Intervalo de enreta kurs-registrado</string>
<string name="live_monitoring_interval_descr">Difini intervalon de enreta kurs-registrado.</string>
<string name="live_monitoring_interval">Ofteco de enreta kursregistrado</string>
<string name="live_monitoring_interval_descr">Difini oftecon de enreta registrado de kurso.</string>
<string name="live_monitoring_url">Adreso de enreta kurs-registrado</string>
<string name="live_monitoring_url_descr">Difini la retadreson uzante la jenajn argumentojn:
\n lat={0} (latitudo),
@ -2172,7 +2172,7 @@
<string name="route_altitude">Kursa altitudo</string>
<string name="altitude_descent">Malsupreniro</string>
<string name="altitude_ascent">Supreniro</string>
<string name="altitude_range">Altituda intervalo</string>
<string name="altitude_range">Variejo de altitudo</string>
<string name="average_altitude">Mezuma altitudo</string>
<string name="shared_string_time">Tempo</string>
<string name="total_distance">Tuta distanco</string>
@ -2710,7 +2710,7 @@
<string name="update_is_available">Ĝisdatigo disponeblas</string>
<string name="download_file">Elŝuti dosieron</string>
<string name="start_editing_card_image_text">Senpaga/libera vojaĝ-gvidilo redaktebla de ĉiu.</string>
<string name="welcome_to_open_beta_description">Vojaĝaj gvidiloj baziĝas sur Vikivojaĝo. Provu ĉiujn eblojn dum beta-testado senpage. Poste vojaĝaj gvidiloj estos disponeblaj al abonantoj de OsmAnd Unlimited kaj aĉetintoj de OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Vojaĝaj gvidiloj baziĝas sur Vikivojaĝo. Provu ĉiujn eblojn dum beta-testado senpage.</string>
<string name="start_editing_card_description">Vi povas (kaj bonvole fari tion) redakti iujn ajn artikolojn de Vikivojaĝo. Kunhavigu vian scion, sperton, talenton kaj prizorgon.</string>
<string name="start_editing">Komenci redakti</string>
<string name="get_unlimited_access">Akiri senliman atingon</string>
@ -3810,7 +3810,7 @@
\n
\n</string>
<string name="monitoring_control_start">Registri</string>
<string name="save_global_track_interval_descr">Elektu la intervalon de registrado por la ĝenerala registrado de spuro (aktivigebla per la fenestraĵo “registri spuron” sur la mapo).</string>
<string name="save_global_track_interval_descr">Elektu la intertempon de registrado por la ĝenerala registrado de spuro (aktivigebla per la fenestraĵo “registri spuron” sur la mapo).</string>
<string name="simplified_track">Simpligita spuro</string>
<string name="simplified_track_description">Nur la linio de kurso estos konservita, la navigadpunktoj estos forigitaj.</string>
<string name="shared_string_file_name">Dosiernomo</string>
@ -3960,7 +3960,6 @@
<string name="routing_engine_vehicle_type_foot">Piediranto</string>
<string name="routing_engine_vehicle_type_bike">Biciklo</string>
<string name="routing_engine_vehicle_type_car">Aŭtomobilo</string>
<string name="message_error_recheck_parameters">Eraro, rekontrolu parametrojn</string>
<string name="copy_address">Kopii adreson</string>
<string name="online_routing_engine">Enreta navigilo</string>
<string name="online_routing_engines">Enretaj navigiloj</string>
@ -3968,4 +3967,26 @@
<string name="select_folder">Elekti dosierujon</string>
<string name="select_folder_descr">Elekti dosierujon aŭ krei novan</string>
<string name="shared_string_empty">Malplena</string>
<string name="analyze_by_intervals">Analizi laŭ intertempoj (dividoj)</string>
<string name="upload_to_openstreetmap">Alŝuti al OpenStreetMap</string>
<string name="edit_track">Redakti spuron</string>
<string name="rename_track">Renomi spuron</string>
<string name="change_folder">Ŝanĝi dosierujon</string>
<string name="routing_engine_vehicle_type_small_truck">Kamioneto</string>
<string name="routing_engine_vehicle_type_truck">Kamiono</string>
<string name="routing_engine_vehicle_type_scooter">Skotero</string>
<string name="routing_engine_vehicle_type_racingbike">Biciklo vetkura</string>
<string name="routing_engine_vehicle_type_mtb">Montbiciklo</string>
<string name="message_server_error">Servila eraro: %1$s</string>
<string name="message_name_is_already_exists">Tiu ĉi nomo jam estas uzata</string>
<string name="start_recording">Ekigi registri</string>
<string name="show_track_on_map">Montri kurson sur mapo</string>
<string name="routing_engine_vehicle_type_wheelchair">Rulseĝo</string>
<string name="routing_engine_vehicle_type_hiking">Marŝado</string>
<string name="routing_engine_vehicle_type_walking">Irado</string>
<string name="routing_engine_vehicle_type_cycling_electric">Elektra biciklado</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Montara biciklado</string>
<string name="routing_engine_vehicle_type_cycling_road">Ŝosea biciklado</string>
<string name="routing_engine_vehicle_type_cycling_regular">Kutima biciklado</string>
<string name="routing_engine_vehicle_type_hgv">Peza kamiono</string>
</resources>

View file

@ -2711,7 +2711,7 @@
<string name="update_is_available">Actualización disponible</string>
<string name="download_file">Descargar archivo</string>
<string name="start_editing_card_image_text">La guía turística libre global que cualquiera puede editar.</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita. Posteriormente, las guías turísticas estarán disponible para los suscriptores de «OsmAnd ilimitado» y los propietarios de «OsmAnd+».</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita.</string>
<string name="start_editing_card_description">Puedes y debes editar cualquier artículo en Wikiviajes. Comparte tu conocimiento, experiencia, talento y atención.</string>
<string name="start_editing">Comenzar edición</string>
<string name="get_unlimited_access">Obtener acceso ilimitado</string>
@ -3963,8 +3963,44 @@
<string name="routing_engine_vehicle_type_foot">Peatón</string>
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
<string name="routing_engine_vehicle_type_car">Automóvil</string>
<string name="message_error_recheck_parameters">Error, vuelve a comprobar los parámetros</string>
<string name="copy_address">Copiar dirección</string>
<string name="online_routing_engine">Motor de navegación en línea</string>
<string name="online_routing_engines">Motores de navegación en línea</string>
<string name="shared_string_folders">Carpetas</string>
<string name="select_folder">Elegir carpeta</string>
<string name="select_folder_descr">Elegir carpeta o añadir una nueva</string>
<string name="shared_string_empty">Vacío</string>
<string name="analyze_by_intervals">Analizar por intervalos (intervalo de división)</string>
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
<string name="edit_track">Editar traza</string>
<string name="rename_track">Renombrar traza</string>
<string name="change_folder">Cambiar carpeta</string>
<string name="shared_string_sec">seg</string>
<string name="announcement_time_passing">Pasando</string>
<string name="announcement_time_approach">Acercarse</string>
<string name="announcement_time_prepare_long">Preparación larga</string>
<string name="announcement_time_prepare">Preparar</string>
<string name="announcement_time_off_route">Fuera de la ruta</string>
<string name="announcement_time_arrive">Has llegado al destino</string>
<string name="shared_string_turn">Giro</string>
<string name="announcement_time_intervals">Intervalos de tiempo y distancia</string>
<string name="announcement_time_descr">El tiempo de anuncio de las diferentes indicaciones por voz depende del tipo de mensaje, la velocidad de navegación actual y la velocidad de navegación predefinida.</string>
<string name="announcement_time_title">Tiempo de anuncio</string>
<string name="start_recording">Iniciar grabación</string>
<string name="show_track_on_map">Mostrar traza en el mapa</string>
<string name="routing_engine_vehicle_type_wheelchair">Silla de ruedas</string>
<string name="routing_engine_vehicle_type_hiking">Senderismo</string>
<string name="routing_engine_vehicle_type_walking">Peatón</string>
<string name="routing_engine_vehicle_type_cycling_electric">Ciclismo eléctrico</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Ciclismo de montaña</string>
<string name="routing_engine_vehicle_type_cycling_road">Ciclismo de ruta</string>
<string name="routing_engine_vehicle_type_cycling_regular">Ciclismo regular</string>
<string name="routing_engine_vehicle_type_hgv">Vehículos pesados</string>
<string name="routing_engine_vehicle_type_small_truck">Camión pequeño</string>
<string name="routing_engine_vehicle_type_truck">Camión</string>
<string name="routing_engine_vehicle_type_scooter">Motoneta</string>
<string name="routing_engine_vehicle_type_racingbike">Bicicleta de carreras</string>
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
<string name="message_server_error">Error de servidor: %1$s</string>
<string name="message_name_is_already_exists">El nombre ya existe</string>
</resources>

View file

@ -2711,7 +2711,7 @@
<string name="update_is_available">Actualización disponible</string>
<string name="download_file">Descargar archivo</string>
<string name="start_editing_card_image_text">La guía turística libre global que cualquiera puede editar.</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita. Posteriormente, las guías turísticas estarán disponible para los suscriptores de «OsmAnd ilimitado» y los propietarios de «OsmAnd+».</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita.</string>
<string name="start_editing_card_description">Puedes y debes editar cualquier artículo en Wikiviajes. Comparte tu conocimiento, experiencia, talento y atención.</string>
<string name="start_editing">Comenzar edición</string>
<string name="get_unlimited_access">Obtener acceso ilimitado</string>
@ -3948,4 +3948,31 @@
<string name="profile_type_osmand_string">Perfil de OsmAnd</string>
<string name="profile_by_default_description">Elige el perfil que será usado al iniciar la aplicación.</string>
<string name="voice_prompts_timetable">Tiempo de indicaciones por voz</string>
<string name="select_folder">Elegir carpeta</string>
<string name="shared_string_folders">Carpetas</string>
<string name="change_folder">Cambiar carpeta</string>
<string name="add_online_routing_engine"></string>
<string name="edit_online_routing_engine"></string>
<string name="shared_string_subtype"></string>
<string name="shared_string_vehicle"></string>
<string name="shared_string_api_key"></string>
<string name="shared_string_server_url"></string>
<string name="shared_string_enter_param"></string>
<string name="keep_it_empty_if_not"></string>
<string name="online_routing_example_hint"></string>
<string name="test_route_calculation"></string>
<string name="routing_engine_vehicle_type_driving"></string>
<string name="routing_engine_vehicle_type_foot"></string>
<string name="routing_engine_vehicle_type_bike"></string>
<string name="routing_engine_vehicle_type_car"></string>
<string name="message_error_recheck_parameters"></string>
<string name="copy_address"></string>
<string name="online_routing_engine"></string>
<string name="online_routing_engines"></string>
<string name="select_folder_descr"></string>
<string name="shared_string_empty"></string>
<string name="analyze_by_intervals"></string>
<string name="upload_to_openstreetmap"></string>
<string name="edit_track"></string>
<string name="rename_track"></string>
</resources>

View file

@ -2709,7 +2709,7 @@
<string name="update_is_available">Actualización disponible</string>
<string name="download_file">Descargar archivo</string>
<string name="start_editing_card_image_text">La guía turística libre global que cualquiera puede editar.</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita. Posteriormente, las guías turísticas estarán disponible para los suscriptores de «OsmAnd ilimitado» y los propietarios de «OsmAnd+».</string>
<string name="welcome_to_open_beta_description">Las guías turísticas, se basan actualmente en Wikiviajes. Prueba todas las características durante las pruebas beta abiertas, de forma gratuita.</string>
<string name="start_editing_card_description">Puedes y debes editar cualquier artículo en Wikiviajes. Comparte tu conocimiento, experiencia, talento y atención.</string>
<string name="start_editing">Comenzar edición</string>
<string name="get_unlimited_access">Obtener acceso ilimitado</string>

View file

@ -643,7 +643,7 @@
<string name="poi_fuel_jeta1">Jet A-1 kütus</string>
<string name="poi_mountain_pass">Mäekuru</string>
<string name="poi_waterway_fuel">Paatide bensiinijaam</string>
<string name="poi_electricity_combined_charging">Laadimisjaam</string>
<string name="poi_electricity_combined_charging">Laadimisjaam;Elektriautode laadimisjaam;Elektriauto laadimine;Laadimispunkt;Elektriautode laadimispunkt</string>
<string name="poi_park_ride_ferry">Parvlaev</string>
<string name="poi_9pin">Üheksa kurikaga keegel</string>
<string name="poi_10pin">Kümne kurikaga keegel</string>
@ -3877,4 +3877,8 @@
<string name="poi_diplomatic_services_non_immigrant_visas_no">Ei</string>
<string name="poi_waste_transfer_station">Jäätmejaam</string>
<string name="poi_lavoir">Avalik pesumaja</string>
<string name="poi_swimming_area">Ujumiskoht</string>
<string name="poi_wildlife_crossing_bat_tunnel">Tunnel nahkhiirtele</string>
<string name="poi_wildlife_crossing_bat_bridge">Sild nahkhiirtele</string>
<string name="poi_wildlife_crossing">Metsloomade teeületuskoht</string>
</resources>

View file

@ -2621,7 +2621,7 @@
<string name="gpx_file_desc">GPX - sobib ekspordiks JOSM või teistesse OSM redaktoritesse.</string>
<string name="osm_edits_export_desc">Ekspordi kas OSM märkmetena, huvipunktidena või mõlemana.</string>
<string name="purchase_dialog_travel_description">Võrguühenduseta reisijuhi funktsioonide saamiseks osta üks järgmistest:</string>
<string name="welcome_to_open_beta_description">Reisijuhid põhinevad praegu Wikivoyage\'il. Testige beetaversiooni ajal kõiki funktsioone tasuta. Pärast seda on reisijuhid kättesaadavad piiranguteta OsmAnd tellijatele ja OsmAnd+ omanikele.</string>
<string name="welcome_to_open_beta_description">Reisijuhid põhinevad praegu Wikivoyage\'il. Testige beetaversiooni ajal kõiki funktsioone tasuta.</string>
<string name="start_editing_card_description">Saate ja peaksite redigeerima kõiki artikleid Wikivoyage\'is. Jagage teadmisi, kogemusi, annet ja oma tähelepanu.</string>
<string name="open_in_browser_wiki">Ava artikkel veebis</string>
<string name="nautical_render_descr">Merel navigeerimiseks. Sisaldab poisid, tuletorne, jõeteid, mereteid ja tähiseid, sadamaid, meremärkide teenuseid ja sügavuskontuure.</string>
@ -3946,4 +3946,6 @@
<string name="reverse_all_points">Pööra kõik punktid ümber</string>
<string name="profile_by_default_description">Vali rakenduse käivitamisel kasutatav profiil.</string>
<string name="shared_string_last_used">Viimati kasutatud</string>
<string name="message_server_error">Serveri viga: %1$s</string>
<string name="message_name_is_already_exists">Selline nimi on juba olemas</string>
</resources>

View file

@ -2722,7 +2722,7 @@ Area honi dagokio: %1$s x %2$s</string>
<string name="maps_you_need">Behar dituzun mapak</string>
<string name="travel_card_download_descr">Deskargatu Wikivoyage bidai gidak munduko tokien inguruko artikuluak ikusteko Internetera konexioa ez duzunean ere.</string>
<string name="start_editing_card_image_text">Edonork idatzi dezakeen mundu osoko doako gida.</string>
<string name="welcome_to_open_beta_description">Bidai-gidak Wikivoyage-n oinarrituta daude. Probatu doan ezaugarri guztiak besta probatze garai irekian. Gero, Bidaia-gidak OsmAnd Unlimited harpidedunentzat eta OsmAnd+ erosleentzat egongo da eskuragarri.</string>
<string name="welcome_to_open_beta_description">Bidai-gidak Wikivoyage-n oinarrituta daude. Probatu doan ezaugarri guztiak besta probatze garai irekian.</string>
<string name="start_editing_card_description">Wikivoyage-ko edozein artikulu aldatu dezakezu. Partekatu ezagutza, esperientzia, talentua eta zure atentzioa.</string>
<string name="welcome_to_open_beta">Ongi etorri beta irekira</string>
<string name="contour_lines_hillshade_maps">Sestra-kurbak eta erliebe-itzalak</string>
@ -3933,6 +3933,5 @@ Area honi dagokio: %1$s x %2$s</string>
<string name="routing_engine_vehicle_type_foot">Oinez</string>
<string name="routing_engine_vehicle_type_bike">Bizikleta</string>
<string name="routing_engine_vehicle_type_car">Kotxea</string>
<string name="message_error_recheck_parameters">Errorea, egiaztatu parametroak berriro</string>
<string name="copy_address">Kopiatu helbidea</string>
</resources>

View file

@ -2734,7 +2734,7 @@
<string name="update_is_available">به‌روزرسانی وجود دارد</string>
<string name="download_file">دانلود فایل</string>
<string name="start_editing_card_image_text">راهنمای سفر رایگان با پوشش جهانی که همه می‌توانند آن را ویرایش کنند.</string>
<string name="welcome_to_open_beta_description">راهنمای «مسافرت» هم‌اکنون بر پایهٔ ویکی‌سفر ساخته شده است. در دورهٔ آزمایش همگانیِ نسخهٔ بتا می‌توانید همهٔ قابلیت‌های آن را به‌رایگان ارزیابی کنید. با پایان دورهٔ آزمایشی، «مسافرت» در اختیار مشترکان نسخهٔ نامحدود OsmAnd و دارندگان OsmAnd+ خواهد بود.</string>
<string name="welcome_to_open_beta_description">راهنمای «مسافرت» هم‌اکنون بر پایهٔ ویکی‌سفر ساخته شده است. در دورهٔ آزمایش همگانیِ نسخهٔ بتا می‌توانید همهٔ قابلیت‌های آن را به‌رایگان ارزیابی کنید.</string>
<string name="start_editing_card_description">شما می‌توانید هر یک از مقالات ویکی‌سفر را ویرایش کنید. امیدواریم با انجام این کار دیگران را در دانش، تجربه، استعداد و توجهتان سهیم کنید.</string>
<string name="start_editing">شروع ویرایش</string>
<string name="get_unlimited_access">گرفتن دسترسی نامحدود</string>
@ -3953,5 +3953,4 @@
<string name="routing_engine_vehicle_type_foot">پا</string>
<string name="routing_engine_vehicle_type_bike">دوچرخه</string>
<string name="routing_engine_vehicle_type_car">خودرو</string>
<string name="message_error_recheck_parameters">خطا، پارامترها را بازبینی کنید</string>
</resources>

View file

@ -2714,7 +2714,7 @@
<string name="paid_app">Application payante</string>
<string name="paid_plugin">Greffon payant</string>
<string name="popular_destinations">Destinations populaires</string>
<string name="welcome_to_open_beta_description">Les guides de voyage sappuient sur Wikivoyage. Durant la phase bêta, évaluez toutes les fonctionnalités gratuitement. Par la suite, les guides de voyage seront accessibles aux abonnés de OsmAnd illimité ainsi qu\'aux propriétaires d\'OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Les guides de voyage sappuient sur Wikivoyage. Durant la phase bêta, évaluez toutes les fonctionnalités gratuitement.</string>
<string name="wiki_article_search_text">Recherche de l\'article Wiki correspondant</string>
<string name="osmand_team">Équipe OsmAnd</string>
<string name="maps_you_need_descr">D\'après les articles que vous avez marqué comme favori, nous vous conseillons de télécharger les cartes suivantes :</string>
@ -3947,7 +3947,6 @@
<string name="routing_engine_vehicle_type_foot">A pieds</string>
<string name="routing_engine_vehicle_type_bike">Vélo</string>
<string name="routing_engine_vehicle_type_car">Automobile</string>
<string name="message_error_recheck_parameters">Erreur, vérifiez les paramètres</string>
<string name="add_online_routing_engine">Ajouter un moteur de routage en ligne</string>
<string name="edit_online_routing_engine">Modifier le moteur de routage en ligne</string>
<string name="online_routing_example_hint">L\'URL avec tous les paramètres sera de la forme :</string>
@ -3958,4 +3957,27 @@
<string name="select_folder">Sélectionnez le dossier</string>
<string name="select_folder_descr">Sélectionnez un dossier ou créez-en un nouveau</string>
<string name="shared_string_empty">Vide</string>
<string name="announcement_time_approach">Approche</string>
<string name="announcement_time_prepare">Préparation</string>
<string name="announcement_time_prepare_long">Longue préparation</string>
<string name="announcement_time_arrive">Arrivé à destination</string>
<string name="shared_string_turn">Tourner</string>
<string name="show_track_on_map">Afficher la trace sur la carte</string>
<string name="routing_engine_vehicle_type_scooter">Trottinette</string>
<string name="routing_engine_vehicle_type_small_truck">Camionnette</string>
<string name="upload_to_openstreetmap">Envoyer vers OpenStreetMap</string>
<string name="edit_track">Modifier la trace</string>
<string name="rename_track">Renommer la trace</string>
<string name="change_folder">Modifier le dossier</string>
<string name="shared_string_sec">sec</string>
<string name="start_recording">Démarrer l\'enregistrement</string>
<string name="routing_engine_vehicle_type_wheelchair">Fauteuil roulant</string>
<string name="routing_engine_vehicle_type_hiking">Randonnée</string>
<string name="routing_engine_vehicle_type_walking">Marche</string>
<string name="routing_engine_vehicle_type_truck">Camion</string>
<string name="routing_engine_vehicle_type_racingbike">Vélo de course</string>
<string name="routing_engine_vehicle_type_mtb">VTT</string>
<string name="message_server_error">Erreur serveur : %1$s</string>
<string name="message_name_is_already_exists">Ce nom existe déjà</string>
<string name="routing_engine_vehicle_type_hgv">Poids lourds</string>
</resources>

View file

@ -2436,7 +2436,7 @@ Lon %2$s</string>
<string name="read_wikipedia_offline_description">Obteña unha subscrición do OsmAnd ao Vivo para ler artigos da Wikipedia e Wikiviaxes, sen conexión.</string>
<string name="purchase_cancelled_dialog_title">Cancelaches a subscrición do OsmAnd ao Vivo</string>
<string name="osmand_team">Equipa do OsmAnd</string>
<string name="welcome_to_open_beta_description">Os guieiros de viaxe, baséanse actualmente na Wikiviaxes. Proba tódolos trazos durante as probas beta abertas, de balde. Despois, os guieiros turísticas estarán dispoñíbeis para os subscritores do \"OsmAnd Ilimitado\" e os propietarios do \"OsmAnd+\".</string>
<string name="welcome_to_open_beta_description">Os guieiros de viaxe, baséanse actualmente na Wikiviaxes. Proba tódolos trazos durante as probas beta abertas, de balde.</string>
<string name="wikivoyage_travel_guide_descr">Os guieiros dos lugares máis interesantes do planeta, no OsmAnd e sen conexión á Internet.</string>
<string name="unlock_all_features">Desbloqueares tódalas características do OsmAnd</string>
<string name="purchase_dialog_title">Escoller plan</string>
@ -3968,7 +3968,6 @@ Lon %2$s</string>
<string name="routing_engine_vehicle_type_foot"></string>
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
<string name="routing_engine_vehicle_type_car">Coche</string>
<string name="message_error_recheck_parameters">Erro, verifica novamente os parámetros</string>
<string name="copy_address">Copiar enderezo</string>
<string name="voice_prompts_timetable">Horarios dos avisos por voz</string>
<string name="online_routing_engine">Motor de navegación en liña</string>

View file

@ -266,7 +266,7 @@
<string name="send_location">Hely pozíció elküldése</string>
<string name="context_menu_item_share_location">Hely megosztása</string>
<string name="add_waypoint_dialog_added">\'\'{0}\'\' GPX-útpont hozzáadva</string>
<string name="add_waypoint_dialog_title">Útpont hozzáadása a rögzített GPX-útvonalhoz</string>
<string name="add_waypoint_dialog_title">Útpont hozzáadása felvett GPX nyomvonalhoz</string>
<string name="amenity_type_administrative">Közigazgatás</string>
<string name="amenity_type_barrier">Akadály</string>
<string name="amenity_type_education">Oktatás</string>
@ -545,7 +545,7 @@
<string name="shared_string_settings">Beállítások</string>
<string name="save_current_track_descr">Jelenlegi nyomvonal mentése GPX fájlba most.</string>
<string name="save_current_track">Jelenlegi nyomvonal mentése</string>
<string name="save_track_interval_descr">A navigáció alatti útvonalrögzítéshez adja meg a naplózási intervallumot</string>
<string name="save_track_interval_descr">A navigáció alatti nyomvonalfelvételhez adja meg a naplózási intervallumot</string>
<string name="save_track_interval">Naplózási intervallum navigáció közben</string>
<string name="save_track_to_gpx_descrp">Navigáció közben a GPX útvonal automatikusan mentésre kerül az OsmAnd „tracks” könyvtárába.</string>
<string name="reload_tile">Térképcsempe újratöltése</string>
@ -852,7 +852,7 @@
<string name="intermediate_point">%1$s köztes célpont</string>
<string name="gps_not_available">Kérlek engedélyezd a GPS-t a beállításokban</string>
<string name="map_widget_show_destination_arrow">Célpont irányának megjelenítése</string>
<string name="enable_plugin_monitoring_services">A pozíciónaplózási szolgáltatások (GPX naplózás, online útvonalrögzítés) használatához engedélyed az „Útvonalrögzítés” bővítményt</string>
<string name="enable_plugin_monitoring_services">A pozíciónaplózási szolgáltatások (GPX naplózás, online útvonalrögzítés) használatához engedélyed az „Utazás felvétele” bővítményt</string>
<string name="non_optimal_route_calculation">Esetleg nem optimális útvonal kiszámítása nagyobb távolságokra</string>
<string name="rendering_attr_roadColors_description">Útszínséma kiválasztása:</string>
<string name="rendering_attr_roadColors_name">Útszín sémája</string>
@ -954,8 +954,8 @@
<string name="osmand_plus_play_title_30_chars">OsmAnd+ térkép és navigáció</string>
<string name="street_name">Utcanév</string>
<string name="hno">Házszám</string>
<string name="monitoring_settings">Útvonalrögzítés</string>
<string name="monitoring_settings_descr">Az útvonalaid felvételének beállításai.</string>
<string name="monitoring_settings">Utazás felvétele</string>
<string name="monitoring_settings_descr">Az utazások felvételének beállításai.</string>
<string name="choose_osmand_theme_descr">Az alkalmazás megjelenésének testreszabása.</string>
<string name="choose_osmand_theme">Téma</string>
<string name="accessibility_options">Akadálymentesítési lehetőségek</string>
@ -1296,7 +1296,7 @@
<string name="record_plugin_description">Ez a bővítmény aktiválja a nyomvonalak rögzítésének és mentésének lehetőségét, ha megnyomja a GPX naplózó gombot a térképképernyőn, valamint képes minden navigációs útvonalat automatikusan egy GPX-fájlba naplózni.
\n
\nA rögzített nyomvonalak megoszthatók az ismerősökkel, vagy használhatók az OSM hozzájárulásoknál. A sportolók a rögzített nyomvonalakat az edzéseik megfigyeléséhez használhatják. Néhány alapvető nyomvonalelemzés közvetlenül az OsmAnd programon belül is végrehajtható, mint például köridők, átlagsebesség stb., és természetesen a nyomvonalak később harmadik féltől származó elemzőeszközökkel is elemezhetők.</string>
<string name="record_plugin_name">Útvonalrögzítés</string>
<string name="record_plugin_name">Utazás felvétele</string>
<string name="int_hour">ó</string>
<string name="duration">Időtartam</string>
<string name="distance">Távolság</string>
@ -1435,7 +1435,7 @@
<string name="track_points">Nyomvonal pontok</string>
<string name="shared_string_selected">Kijelölve</string>
<string name="rename_failed">Az átnevezés nem sikerült.</string>
<string name="shared_string_currently_recording_track">Jelenleg rögzülő nyomvonal</string>
<string name="shared_string_currently_recording_track">Jelenleg felvett nyomvonal</string>
<string name="back_to_map">Vissza a térképhez</string>
<string name="location_on_map">Helyzet:\n Szélesség %1$s\n Hosszúság %2$s</string>
<string name="route_points">Útvonal pontok</string>
@ -1660,11 +1660,11 @@
<string name="min_mile">perc/mérföld</string>
<string name="min_km">perc/km</string>
<string name="m_s">m/s</string>
<string name="shared_string_trip_recording">Útvonalrögzítés</string>
<string name="shared_string_trip_recording">Utazás felvétele</string>
<string name="shared_string_navigation">Navigáció</string>
<string name="osmand_running_in_background">Háttérben fut</string>
<string name="simulate_your_location_stop_descr">Pozíciószimuláció leállítása.</string>
<string name="simulate_your_location_descr">Szimuláció megtervezett útvonallal vagy felvett GPX-szel.</string>
<string name="simulate_your_location_descr">Szimuláció megtervezett útvonallal vagy felvett GPX nyomvonallal.</string>
<string name="av_locations_descr">GPX-fájl helyszínekkel.</string>
<string name="av_locations">Helyszín</string>
<string name="routing_attr_avoid_shuttle_train_name">Autószállító vonat nélkül</string>
@ -1889,8 +1889,8 @@
<string name="n_items_removed">elem eltávolítva</string>
<string name="shared_string_type">Típus</string>
<string name="starting_point">Kiindulópont</string>
<string name="rec_split">Felvétel vágás</string>
<string name="rec_split_title">Felvétel automatikus darabolása</string>
<string name="rec_split">Felvétel vágása</string>
<string name="rec_split_title">Felvétel automatikus elvágása</string>
<string name="rec_split_clip_length">Klipp hossz</string>
<string name="rec_split_storage_size">Tárolási méret</string>
<string name="number_of_contributors">Közreműködők száma</string>
@ -1908,8 +1908,8 @@
<string name="file_name_containes_illegal_char">Érvénytelen karakter a fájlnévben</string>
<string name="storage_permission_restart_is_required">Az alkalmazás már tud írni a külső tárolóra, de ehhez egy kézi újraindítás szükséges.</string>
<string name="rec_split_desc">Klipek elvágása, ha a felhasznált hely túllépi a tárolási méretet.</string>
<string name="rec_split_clip_length_desc">A felvett klipek maximális hossza.</string>
<string name="rec_split_storage_size_desc">Az összes klip által elfoglalható hely.</string>
<string name="rec_split_clip_length_desc">A felvett klipek legnagyobb hossza.</string>
<string name="rec_split_storage_size_desc">Az összes felvett klip által elfoglalható hely.</string>
<string name="no_map_markers_found">Kérjük, vegyen fel jelölőket a térképen</string>
<string name="no_waypoints_found">Nem találhatók útpontok</string>
<string name="map_widget_bearing">Relatív irány</string>
@ -2036,12 +2036,12 @@
<string name="gpx_no_tracks_title_folder">A mappához ön is adhat nyomvonalfájlokat</string>
<string name="gpx_add_track">Továbbiak hozzáadása…</string>
<string name="shared_string_appearance">Megjelenés</string>
<string name="trip_rec_notification_settings">Gyors rögzítés bekapcsolása</string>
<string name="trip_rec_notification_settings_desc">Egy útvonalrögzítés megkezdését lehetővé tevő rendszerértesítés megjelenítése.</string>
<string name="trip_rec_notification_settings">Gyors felvétel bekapcsolása</string>
<string name="trip_rec_notification_settings_desc">Az utazásfelvétel megkezdését lehetővé tevő rendszerértesítés megjelenítése.</string>
<string name="shared_string_notifications">Értesítések</string>
<string name="shared_string_pause">Szünet</string>
<string name="shared_string_trip">Túra</string>
<string name="shared_string_recorded">Felvett</string>
<string name="shared_string_recorded">Felvéve</string>
<string name="shared_string_record">Felvétel</string>
<string name="save_track_min_speed">Legkisebb naplózási sebesség</string>
<string name="save_track_min_speed_descr">Szűrő: Ez alatti sebességnél nem rögzít pontot.</string>
@ -2307,8 +2307,8 @@
<string name="distance_moving">Korrigált távolság</string>
<string name="shared_string_permissions">Engedélyek</string>
<string name="import_gpx_failed_descr">Nem sikerült a fájl importálása. Győződjék meg arról, hogy az OsmAndnak van engedélye a fájl olvasására.</string>
<string name="store_tracks_in_monthly_directories">Rögzített nyomvonalak tárolása havi könyvtárakban</string>
<string name="store_tracks_in_monthly_directories_descrp">Rögzített nyomvonalak tárolása havi bontású alkönyvtárakban (pl. 2018-01).</string>
<string name="store_tracks_in_monthly_directories">Felvett nyomvonalak tárolása havi mappákban</string>
<string name="store_tracks_in_monthly_directories_descrp">Felvett nyomvonalak tárolása havi bontású almappákban (pl. 2018-01).</string>
<string name="shared_string_reset">Visszaállítás</string>
<string name="shared_string_reload">Újratöltés</string>
<string name="mapillary_menu_descr_tile_cache">Csempék újratöltése naprakész adatok megjelenítéséhez.</string>
@ -2435,7 +2435,7 @@
<string name="wrong_format">Hibás formátum</string>
<string name="shared_string_road">Út</string>
<string name="empty_state_osm_edits">OSM-objektum létrehozása vagy módosítása</string>
<string name="empty_state_osm_edits_descr">Hozzon létre vagy módosítson OSM POI-kat, nyisson vagy kommenteljen OSM-jegyzeteket, és működjék közre rögzített GPX-nyomvonalakkal.</string>
<string name="empty_state_osm_edits_descr">Hozzon létre vagy módosítson OSM POI-kat, nyisson vagy kommenteljen OSM-jegyzeteket, és működjék közre felvett GPX-nyomvonalakkal.</string>
<string name="shared_string_deleted">Törölve</string>
<string name="shared_string_edited">Szerkesztve</string>
<string name="shared_string_added">Hozzáadva</string>
@ -2591,7 +2591,7 @@
<string name="travel_card_update_descr">Új Wikivoyage adat érhető el, a használatához frissíts.</string>
<string name="travel_card_download_descr">Töltsd le a Wikivoyage útikalauzokat, hogy internetkapcsolat nélkül olvashass cikkeket a világ érdekes helyeiről.</string>
<string name="start_editing_card_image_text">Az ingyenes, világméretű útikönyv, amit bárki szerkeszthet.</string>
<string name="welcome_to_open_beta_description">Az útikalauz a Wikivoyage-on alapul. Teszteld a lehetőségeit a nyílt bétateszt során ingyenesen. Később az útikalauz az OsmAnd Korlátlan előfizetőknek és OsmAnd+ tulajdonosoknak lesz elérhető.</string>
<string name="welcome_to_open_beta_description">Az útikalauz a Wikivoyage-on alapul. Teszteld a lehetőségeit a nyílt bétateszt során ingyenesen.</string>
<string name="start_editing_card_description">Szerkesztheti, sőt szerkessze a Wikivoyage szócikkeit. Ossza meg tudását, tapasztalatait, tehetségét és figyelmességét.</string>
<string name="start_editing">Szerkesztés elkezdése</string>
<string name="get_unlimited_access">Szerezz korlátlan hozzáférést</string>
@ -2720,7 +2720,7 @@
<string name="lang_gn_py">guarani</string>
<string name="osmand_extended_description_part2">GPS navigáció
\n • Válassz az offline (nincs roamingdíj külföldön) vagy online (gyorsabb) mód között
\n • Kanyaronkénti hangutasítások vezetnek végig az úton (rögzített és előállított hangok)
\n • Kanyaronkénti hangutasítások vezetnek végig az úton (felvett és előállított hangok)
\n • Az útvonalterv újratervezésre kerül, ha eltérsz attól
\n • Sávvezérlés, utcanevek, és becsült érkezési idő segít az úton
\n • Az út biztonságosabbá tételéhez a nappali/éjszakai mód automatikusan vált
@ -3105,9 +3105,9 @@
<string name="quick_action_show_hide_hillshade">Domborzatárnyékolás megjelenítése/elrejtése</string>
<string name="track_storage_directory">Nyomvonal tárolási könyvtára</string>
<string name="track_storage_directory_descrp">A nyomvonalak a \'rec\' könyvtárban tárolhatók, havi vagy napi bontás szerinti könyvtárakban.</string>
<string name="store_tracks_in_rec_directory">Nyomvonalak rögzítése a \'rec\' könyvtárba</string>
<string name="store_tracks_in_daily_directories">Nyomvonalak rögzítése napi bontású könyvtárakba</string>
<string name="store_tracks_in_daily_directories_descrp">Nyomvonalak rögzítése alkönyvtárakba a rögzítés napja szerint (pl. 2018-01-01).</string>
<string name="store_tracks_in_rec_directory">Nyomvonalak felvétele a \'rec\' mappába</string>
<string name="store_tracks_in_daily_directories">Nyomvonalak felvétele napi bontású mappákba</string>
<string name="store_tracks_in_daily_directories_descrp">Nyomvonalak rögzítése a rögzítés napja szerinti almappákba (pl. 2018-01-01).</string>
<string name="export_profile">Profil exportálása</string>
<string name="exported_osmand_profile">OsmAnd profil: %1$s</string>
<string name="overwrite_profile_q">\'%1$s\' már létezik. Felülírja\?</string>
@ -3211,7 +3211,7 @@
<string name="rendering_attr_piste_difficulty_novice_name">Kezdő</string>
<string name="rendering_attr_piste_difficulty_easy_name">Könnyű</string>
<string name="rendering_attr_piste_difficulty_connection_name">Kapcsolat</string>
<string name="simulate_your_location_gpx_descr">Pozíció szimulálása egy rögzített GPX-nyomvonal felhasználásával.</string>
<string name="simulate_your_location_gpx_descr">Pozíció szimulálása egy felvett GPX nyomvonal felhasználásával.</string>
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Kerékpárút-hálózatok csomópontjainak megjelenítése</string>
<string name="clear_confirmation_msg">Törölje ezt: %1$s\?</string>
<string name="rendering_value_walkingRoutesOSMCNodes_name">Ponthálózatok</string>
@ -3222,7 +3222,7 @@
<string name="new_plugin_added">Új bővítmény hozzáadva</string>
<string name="join_segments">Szegmensek összekapcsolása</string>
<string name="save_heading">Irány belefoglalása</string>
<string name="save_heading_descr">Rögzítéskor menti az egyes útpontok irányát is.</string>
<string name="save_heading_descr">Felvételkor az egyes útpontok irányát is menti.</string>
<string name="select_navigation_icon">Pozíció ikon haladás közben</string>
<string name="select_map_icon">Pozíció ikon álló helyzetben</string>
<string name="delete_profiles_descr">Az Alkalmaz-ra koppintva a törölt profilok végérvényesen elvesznek.</string>
@ -3332,10 +3332,10 @@
<string name="multimedia_notes_prefs_descr">Képméret, hang- és videominőség</string>
<string name="osm_editing_prefs_descr">Bejelentkezés, jelszó, offline szerkesztés</string>
<string name="accessibility_prefs_descr">Ikonalak, -szín és -méret kiválasztása</string>
<string name="live_monitoring_descr">Lehetővé teszi az útvonal rögzítésével az aktuális pozíció megosztását.</string>
<string name="live_monitoring_descr">Az utazás felvételével lehetővé teszi az aktuális pozíció megosztását.</string>
<string name="live_monitoring">Online nyomvonalrögzítés</string>
<string name="save_track_logging_accuracy">Naplózás pontossága</string>
<string name="tracks_view_descr">Az összes rögzített nyomvonal megtalálható a %1$s helyen vagy a fájlkezelővel az OsmAnd mappában.</string>
<string name="tracks_view_descr">Az összes felvett nyomvonal megtalálható a %1$s helyen vagy a fájlkezelővel az OsmAnd mappában.</string>
<string name="multimedia_notes_view_descr">Az összes OSM-jegyzetét megtalálja a %1$s helyen.</string>
<string name="video_notes">Videojegyzetek</string>
<string name="photo_notes">Fényképes jegyzetek</string>
@ -3376,7 +3376,7 @@
<string name="restore_all_profile_settings">Visszaállítja a profil összes beállítását\?</string>
<string name="saving_new_profile">Új profil mentése</string>
<string name="profile_backup_failed">Profil biztonsági mentése sikertelen.</string>
<string name="clear_recorded_data_warning">Biztosan törölni szeretné a rögzített adatokat\?</string>
<string name="clear_recorded_data_warning">Biztosan törölni szeretné a felvett adatokat\?</string>
<string name="importing_from">Adatok importálása innen: %1$s</string>
<string name="shared_string_importing">Importálás</string>
<string name="slope_read_more">A lejtőkről többet olvashat itt: %1$s.</string>
@ -3428,7 +3428,7 @@
<string name="shared_string_octagon">Nyolcszög</string>
<string name="shared_string_square">Négyzet</string>
<string name="shared_string_min">Min</string>
<string name="clear_recorded_data">Rögzített adatok törlése</string>
<string name="clear_recorded_data">Felvett adatok törlése</string>
<string name="terrain_empty_state_text">Engedélyezésével domborzatárnyékolás vagy lejtőtérkép jeleníthető meg. Ezekről a térképfajtákról többet olvashat a honlapunkon.</string>
<string name="app_mode_ski_touring">Túrasízés</string>
<string name="app_mode_ski_snowmobile">Motoros szán</string>
@ -3704,10 +3704,10 @@
\n
\n</string>
<string name="gpx_split_interval_descr">Válassza ki, hogy a nyomvonalon milyen távolság- vagy időintervallumok jelzései jelenjenek meg.</string>
<string name="monitoring_min_distance_descr">Ez a szűrő kiküszöböli az ismétlődő pontok rögzítését ott, ahol túl kevés tényleges mozgás történhetett, így szebb lesz a később utólag fel nem dolgozott nyomvonalak térbeli megjelenése.</string>
<string name="monitoring_min_distance_descr">Ez a szűrő kiküszöböli az ismétlődő pontok felvételét ott, ahol túl kevés tényleges mozgás történhetett, így szebb lesz a később utólag fel nem dolgozott nyomvonalak térbeli megjelenése.</string>
<string name="multimedia_rec_split_title">Felvétel vágása</string>
<string name="disable_recording_once_app_killed_descrp">A nyomvonal naplózása szünetelni fog, amikor az alkalmazást (újabb alkalmazásokkal) kilövik. (Ilyenkor az OsmAnd háttérjelzése is eltűnik az Android értesítési sávjáról.)</string>
<string name="monitoring_min_speed_descr_recommendation">Javaslat: Először próbálja meg a mozgásérzékelést használni a legkisebb elmozdulást naplózó szűrővel (B). Ez jobb eredményeket hozhat, és kevesebb adatot veszít. Ha a nyomvonalak alacsony sebességnél továbbra is zajosak, próbálkozzon itt nullától eltérő értékekkel. Felhívjuk figyelmét, hogy egyes (hálózatalapú módszereket használó) mérőeszközök egyáltalán nem adnak sebességértéket, így ebben az esetben semmi sem fog rögzülni.</string>
<string name="monitoring_min_speed_descr_recommendation">Javaslat: Először próbálja meg a mozgásérzékelést használni a legkisebb elmozdulást naplózó szűrővel (B). Ez jobb eredményeket hozhat, és kevesebb adatot veszít. Ha a nyomvonalak alacsony sebességnél továbbra is zajosak, próbálkozzon itt nullától eltérő értékekkel. Felhívjuk figyelmét, hogy egyes (hálózatalapú módszereket használó) mérőeszközök egyáltalán nem adnak sebességértéket, így ebben az esetben semmi sem lesz felvéve.</string>
<string name="street_level_imagery">Utcaszintű képek</string>
<string name="simplified_track_description">Csak az út vonala lesz elmentve, az útpontok törlődnek.</string>
<string name="track_show_start_finish_icons">Kiindulás és érkezés ikonjainak megjelenítése</string>
@ -3718,7 +3718,7 @@
<string name="all_previous_segments_will_be_recalc">Minden korábbi szakasz újra lesz számítva a kiválasztott profilnak megfelelően.</string>
<string name="update_tile">Térkép frissítése</string>
<string name="previous_segment">Előző szakasz</string>
<string name="monitoring_min_accuracy_descr">Ez csak a minimális pontosságúnak megjelölt mért pontokat rögzíti (méterben/lábban, ahogy azt az Android a lapkakészletnek közvetíti). Ez pontosság (accuracy) a mérések valódi helyzethez való közelsége, és nem kapcsolódik közvetlenül az ismételt mérések szórásának pontosságához (precision).</string>
<string name="monitoring_min_accuracy_descr">Ez csak a minimális pontosságúnak megjelölt mért pontokat veszi fel (méterben/lábban, ahogy azt az Android a lapkakészletnek közvetíti). Ez pontosság (accuracy) a mérések valódi helyzethez való közelsége, és nem kapcsolódik közvetlenül az ismételt mérések szórásának pontosságához (precision).</string>
<string name="follow_track">Nyomvonal követése</string>
<string name="monitoring_control_start">REC</string>
<string name="system_default_theme">Rendszer alapértelmezett értékei</string>
@ -3728,8 +3728,8 @@
<string name="quick_action_add_gpx">Útpont hozzáadása a nyomvonalhoz</string>
<string name="save_track_to_gpx_globally">Nyomvonal rögzítése GPX-fájlba</string>
<string name="layer_gpx_layer">Nyomvonalak</string>
<string name="empty_state_my_tracks_desc">Nyomvonalfájlok importálása vagy rögzítése</string>
<string name="monitoring_min_speed_descr">Ez egy alacsonysebesség-leválasztó szűrő, amely egy bizonyos sebesség alatt nem rögzít pontokat. Ezáltal a rögzített nyomvonalak simábbnak néznek ki a térképen.</string>
<string name="empty_state_my_tracks_desc">Nyomvonalfájlok importálása vagy felvétele</string>
<string name="monitoring_min_speed_descr">Ez egy alacsonysebesség-leválasztó szűrő, amely egy bizonyos sebesség alatt nem vesz fel pontokat. Ezáltal a felvett nyomvonalak simábbnak néznek ki a térképen.</string>
<string name="checking_for_duplicate_description">Az OsmAnd ellenőrizze %1$s-t, hogy vannak-e másolatok az alkalmazás meglévő elemeivel.
\n
\nEz eltarthat egy ideig.</string>
@ -3740,7 +3740,7 @@
<string name="monitoring_min_accuracy_descr_side_effect">Mellékhatás: A pontosság szerinti szűrés eredményeként egyes pontok teljesen hiányozhatnak pl. hidak vagy fák alatt, magas épületek között, vagy bizonyos időjárási körülmények között.</string>
<string name="threshold_distance">Küszöbtávolság</string>
<string name="start_of_the_track">Nyomvonal kezdete</string>
<string name="save_track_to_gpx">Nyomvonal automatikus rögzítése navigáció közben</string>
<string name="save_track_to_gpx">Nyomvonal automatikus felvétele navigáció közben</string>
<string name="monitoring_min_speed_descr_side_effect">Mellékhatás: A nyomvonalból hiányozni fog minden olyan szakasz, ahol a legkisebb sebesség feltétele nem teljesült (pl. egy meredek dombra tolja fel a kerékpárt). Nem lesz információ az állásokról sem, például a pihenőkről. Ez hatással van minden elemzésre és utófeldolgozásra, például amikor megpróbálja meghatározni az utazás teljes hosszát, a mozgásban töltött időt vagy az átlagsebességét.</string>
<string name="one_point_error">Adjon hozzá legalább két pontot.</string>
<string name="attach_to_the_roads">Csatolás az utakhoz</string>
@ -3762,8 +3762,8 @@
<string name="context_menu_item_add_waypoint">Útpont hozzáadása a nyomvonalhoz</string>
<string name="plan_route_change_route_type_after">Útvonaltípus módosítása ez után:</string>
<string name="shared_string_gpx_route">Útvonal követése</string>
<string name="monitoring_min_accuracy_descr_recommendation">Ajánlás: Nehéz megjósolni, hogy mi fog rögzülni és mi nem, így talán a legjobb ezt a szűrőt kikapcsolni.</string>
<string name="map_widget_monitoring">Utazás rögzítése</string>
<string name="monitoring_min_accuracy_descr_recommendation">Ajánlás: Nehéz megjósolni, hogy mi lesz a felvételen és mi nem, így talán a legjobb ezt a szűrőt kikapcsolni.</string>
<string name="map_widget_monitoring">Utazás felvétele</string>
<string name="search_offline_geo_error">Nem sikerült elemezni a következő térképmegjelenítési szándékot: „%s”.</string>
<string name="plan_route_open_existing_track">Meglévő nyomvonal megnyitása</string>
<string name="track_coloring_solid">Tömör</string>
@ -3771,14 +3771,14 @@
<string name="route_between_points_next_segment_button_desc">Csak a következő szakasz lesz újraszámítva a kiválasztott profilnak megfelelően.</string>
<string name="route_between_points_warning_desc">Ezután a beállítás használatához igazítsa a nyomvonalat a legközelebbi úthoz az egyik navigációs profil segítségével.</string>
<string name="shared_string_custom">Egyedi</string>
<string name="gpx_monitoring_stop">Utazás rögzítésének szüneteltetése</string>
<string name="gpx_monitoring_stop">Utazás felvételének szüneteltetése</string>
<string name="shared_string_save_as_gpx">Mentés új nyomvonalfájlként</string>
<string name="plan_route_last_edited">Utoljára szerkesztve</string>
<string name="save_global_track_interval_descr">Adja meg az általános nyomvonalrögzítés naplózási intervallumát (bekapcsolva a térképen található „Utazás rögzítése” widgettel).</string>
<string name="save_global_track_interval_descr">Adja meg az általános nyomvonalfelvétel naplózási intervallumát (bekapcsolva a térképen található „Utazás felvétele” widgettel).</string>
<string name="gpx_split_interval_none_descr">Válassza ki a kívánt felosztási lehetőséget: idő vagy távolság szerint.</string>
<string name="gpx_monitoring_start">Utazás rögzítésének folytatása</string>
<string name="gpx_monitoring_start">Utazás felvételének folytatása</string>
<string name="navigation_profile">Navigációs profil</string>
<string name="monitoring_min_speed_descr_remark">Megjegyzés a „sebesség &gt; 0” ellenőrzéséhez: A legtöbb GPS lapkakészlet (chipset) csak akkor mutat sebességértéket, ha az algoritmus megállapítja, hogy mozgásban van. Ha nincs mozgás, akkor nem mutatnak sebességet. Ezért ebben a szűrőben a „&gt; 0” beállítás bizonyos értelemben a GPS lapkakészlet mozgásérzékelését használja. De még ha a rögzítés ideje alatt itt nem is szűrjük a GPX elemzése során mégis használjuk ezt a funkciót a korrigált távolság meghatározásához, vagyis az abban a mezőben megjelenített érték a mozgás közben rögzített távolság.</string>
<string name="monitoring_min_speed_descr_remark">Megjegyzés a „sebesség &gt; 0” ellenőrzéséhez: A legtöbb GPS lapkakészlet (chipset) csak akkor mutat sebességértéket, ha az algoritmus megállapítja, hogy mozgásban van. Ha nincs mozgás, akkor nem mutatnak sebességet. Ezért ebben a szűrőben a „&gt; 0” beállítás bizonyos értelemben a GPS lapkakészlet mozgásérzékelését használja. De még ha a felvétel ideje alatt itt nem is szűrjük a GPX elemzése során mégis használjuk ezt a funkciót a korrigált távolság meghatározásához, vagyis az abban a mezőben megjelenített érték a mozgás közben rögzített távolság.</string>
<string name="only_selected_segment_recalc">Csak a kijelölt szakasz lesz újraszámítva a kiválasztott profilnak megfelelően.</string>
<string name="plan_route_exit_dialog_descr">Biztosan elveti az összes módosítást a tervezett útvonalon\?</string>
<string name="follow_track_descr">Válassza ki a követendő nyomvonalfájlt</string>
@ -3793,7 +3793,7 @@
<string name="nearest_point">Legközelebbi pont</string>
<string name="empty_state_my_tracks">Nyomvonalfájlok hozzáadása</string>
<string name="in_case_of_reverse_direction">Fordított irány esetén</string>
<string name="monitoring_min_distance_descr_side_effect">Mellékhatások: A nyugalmi periódusok egyáltalán nem vagy csak egy ponttal rögzülnek. Kiszűrhetők a kis (valós) mozgások (pl. az út során egy átvezető út jelzése céljából megtett kitérők). A fájl kevesebb információt tartalmaz az utófeldolgozáshoz és rosszabb a statisztikája, mivel a felvételkor kiszűri a nyilvánvalóan felesleges pontokat, miközben megtarthatja a rossz vétel vagy a GPS lapkakészlet által okozott hibás mintázatok.</string>
<string name="monitoring_min_distance_descr_side_effect">Mellékhatások: A nyugalmi periódusok egyáltalán nem vagy csak egy ponttal lesznek felvéve. Kiszűrhetők a kis (valós) mozgások (pl. az út során egy átvezető út jelzése céljából megtett kitérők). A fájl kevesebb információt tartalmaz az utófeldolgozáshoz és rosszabb a statisztikája, mivel a felvételkor kiszűri a nyilvánvalóan felesleges pontokat, miközben megtarthatja a rossz vétel vagy a GPS lapkakészlet által okozott hibás mintázatok.</string>
<string name="all_next_segments">Minden későbbi szakasz</string>
<string name="number_of_gpx_files_selected_pattern">%s nyomvonalfájl kijelölve</string>
<string name="route_between_points_add_track_desc">Jelölje ki azt a nyomvonalfájlt, amelyhez az új szakasz hozzáadódjék.</string>
@ -3954,7 +3954,6 @@
<string name="keep_it_empty_if_not">Hagyja üresen, ha nem</string>
<string name="online_routing_example_hint">Az összes paraméterrel rendelkező URL így néz ki:</string>
<string name="test_route_calculation">Útvonaltervezés kipróbálása</string>
<string name="message_error_recheck_parameters">Hiba, ellenőrizze újra a paramétereket</string>
<string name="copy_address">Cím másolása</string>
<string name="online_routing_engine">Online útvonaltervező</string>
<string name="online_routing_engines">Online útvonaltervezők</string>
@ -3967,4 +3966,29 @@
<string name="edit_track">Nyomvonal szerkesztése</string>
<string name="rename_track">Nyomvonal átnevezése</string>
<string name="change_folder">Mappa módosítása</string>
<string name="start_recording">Felvétel indítása</string>
<string name="shared_string_sec">mp.</string>
<string name="announcement_time_passing">Túlhaladás</string>
<string name="announcement_time_approach">Megközelítés</string>
<string name="announcement_time_prepare_long">Hosszú felkészülés</string>
<string name="announcement_time_prepare">Felkészülés</string>
<string name="announcement_time_off_route">Letérés az útvonalról</string>
<string name="announcement_time_arrive">Érkezés a célponthoz</string>
<string name="shared_string_turn">Bekanyarodás</string>
<string name="announcement_time_intervals">Idő- és távolságintervallumok</string>
<string name="routing_engine_vehicle_type_mtb">Hegyi kerékpár</string>
<string name="routing_engine_vehicle_type_racingbike">Versenykerékpár</string>
<string name="show_track_on_map">Nyomvonal megjelenítése a térképen</string>
<string name="routing_engine_vehicle_type_wheelchair">Kerekesszék</string>
<string name="routing_engine_vehicle_type_hiking">Túrázás</string>
<string name="routing_engine_vehicle_type_walking">Gyaloglás</string>
<string name="routing_engine_vehicle_type_cycling_electric">E-kerékpározás</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Hegyi kerékpározás</string>
<string name="routing_engine_vehicle_type_cycling_road">Verenykerékpározás</string>
<string name="routing_engine_vehicle_type_cycling_regular">Rendes kerékpározás</string>
<string name="routing_engine_vehicle_type_truck">Tgk.</string>
<string name="routing_engine_vehicle_type_hgv">Nehéz tgk.</string>
<string name="routing_engine_vehicle_type_small_truck">Kisteherautó</string>
<string name="message_server_error">Szerverhiba: %1$s</string>
<string name="message_name_is_already_exists">Ez a név már létezik</string>
</resources>

View file

@ -2688,7 +2688,7 @@
<string name="maps_you_need_descr">Հիմնվելով ձեր պահպանած հոդվածներից, խորհուրդ ենք տալիս ներբեռնել հետեւյալ քարտեզները՝</string>
<string name="travel_card_download_descr">Ներբեռնեք Wikivoyage-ի ուղևորության ուղեցույցները` աշխարհի նշանավոր տեղերի մասին հոդվածներ դիտելու համար առանց ինտերնետի:</string>
<string name="start_editing_card_image_text">Աշխարհի ուղեցույց, որը կարող է խմբագրել ցանկացած մեկը:</string>
<string name="welcome_to_open_beta_description">Ուղեւորության ուղեցույցները ներկայումս հիմնված են Wikivoyage-ի վրա: Փորձեք անվճար բոլոր հնարավորությունները բետա տեստավորման ժամանակ: Հետագայում ուղեցույցը հասանելի կլինի OsmAnd Unlimited-ի և OsmAnd+ սեփականատերերի համար։</string>
<string name="welcome_to_open_beta_description">Ուղեւորության ուղեցույցները ներկայումս հիմնված են Wikivoyage-ի վրա: Փորձեք անվճար բոլոր հնարավորությունները բետա տեստավորման ժամանակ:</string>
<string name="wikivoyage_travel_guide_descr">Տեսեք ուղեցույցները, OsmAnd-ում աշխարհի ամենահետաքրքիր վայրերը, առանց ինտերնետին միանալու:</string>
<string name="purchase_dialog_travel_description">Գնեք հետեւյալներից մեկը, որպեսզի ստանաք ճանապարհորդական հոդվածները անցանց՝</string>
<string name="purchase_dialog_subtitle">Ընտրեք համապատասխան կետը</string>

View file

@ -644,7 +644,7 @@
<string name="update_is_available">Tersedia pembaruan</string>
<string name="download_file">Unduh berkas</string>
<string name="start_editing_card_image_text">Penduan perjalanan gratis semua orang bisa berkontribusi.</string>
<string name="welcome_to_open_beta_description">Panduan perjalanan saat ini berdasar pada Wikivoyage. Coba semua fitur selama uji coba beta secara gratis. Setelah itu, panduan perjalanan hanya akan tersedia untuk pelanggan OsmAnd Unlimited dan pemilik OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Panduan perjalanan saat ini berdasar pada Wikivoyage. Coba semua fitur selama uji coba beta secara gratis.</string>
<string name="start_editing">Mulai menyunting</string>
<string name="get_unlimited_access">Dapatkan akses tak terbatas</string>
<string name="welcome_to_open_beta">Selamat datang di uji coba beta</string>

View file

@ -2717,7 +2717,7 @@
<string name="update_is_available">Uppfærsla er tiltæk</string>
<string name="download_file">Sækja skrá</string>
<string name="start_editing_card_image_text">Frjálsa ferðagreinasafnið sem allir geta lagað og breytt.</string>
<string name="welcome_to_open_beta_description">Ferðaupplýsingar eru byggðar á Wikivoyage. Á meðan opnum forprófunum stendur hefurðu tækifæri til að meta alla eiginleikans ókeypis og án kvaða. Eftir að forprófunum lýkur, munu ferðaupplýsingar standa áskrifendum OsmAnd Unlimited og eigendum OsmAnd+ til boða.</string>
<string name="welcome_to_open_beta_description">Ferðaupplýsingar eru byggðar á Wikivoyage. Á meðan opnum forprófunum stendur hefurðu tækifæri til að meta alla eiginleikans ókeypis og án kvaða.</string>
<string name="start_editing_card_description">Þú getur breytt hvaða grein sem er á Wikivoyage. Við þörfnumst þekkingar þinnar, reynslu, hæfileika og áhuga þíns.</string>
<string name="start_editing">Hefja breytingar</string>
<string name="get_unlimited_access">Fáðu ótakmarkaðan aðgang</string>
@ -3965,6 +3965,5 @@
<string name="routing_engine_vehicle_type_foot">Gangandi</string>
<string name="routing_engine_vehicle_type_bike">Hjólandi</string>
<string name="routing_engine_vehicle_type_car">Bíll</string>
<string name="message_error_recheck_parameters">Villa, yfirfarðu breytur</string>
<string name="copy_address">Afrita heimilisfang</string>
</resources>

View file

@ -1097,7 +1097,7 @@
<string name="lang_id">Indonesiano</string>
<string name="lang_it">Italiano</string>
<string name="lang_ja">Giapponese</string>
<string name="lang_ko">Koreano</string>
<string name="lang_ko">Coreano</string>
<string name="lang_lv">Lettone</string>
<string name="lang_lt">Lituano</string>
<string name="lang_mr">Marathi</string>
@ -2634,7 +2634,7 @@
<string name="update_is_available">Aggiornamento disponibile</string>
<string name="download_file">Scarica file</string>
<string name="start_editing_card_image_text">La guida turistica libera in tutto il mondo che chiunque può modificare.</string>
<string name="welcome_to_open_beta_description">Le guide di viaggio sono basate su Wikivoyage. Prova tutte le caratteristiche durante la fase di beta test aperto, gratuitamente. Dopo, le Guide di Viaggio saranno disponibili per gli abbonati di OsmAnd Unlimited e per i proprietari di OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Le guide di viaggio sono basate su Wikivoyage. Prova tutte le caratteristiche durante la fase di beta test aperto, gratuitamente.</string>
<string name="start_editing_card_description">Puoi e dovresti editare qualche articolo su Wikivoyage. Condividi conoscenza, esperienza, talento e la tua attenzione.</string>
<string name="start_editing">Inizia a modificare</string>
<string name="get_unlimited_access">Ottieni l\'accesso illimitato</string>

View file

@ -2597,7 +2597,7 @@
<string name="update_is_available">קיים עדכון</string>
<string name="download_file">הורדת קובץ</string>
<string name="start_editing_card_image_text">מדריך התיירות המקוון שכל אחד יכול לערוך.</string>
<string name="welcome_to_open_beta_description">מדריכי התיירות מבוססים על ויקימסע. ניתן לבדוק את כל האפשרויות במהלך הבטא הפתוחה בחינם. לאחר סיום תקופת הבטא, מדריכי התיירות יהיו זמינים לנרשמי OsmAnd ללא הגבלה ולבעלי OsmAnd+.</string>
<string name="welcome_to_open_beta_description">מדריכי התיירות מבוססים על ויקימסע. ניתן לבדוק את כל האפשרויות במהלך הבטא הפתוחה בחינם.</string>
<string name="start_editing_card_description">ניתן וכדאי לערוך כל ערך בוויקימסע. השיתוף דורש את הידע, הניסיון, הכישרון ואת תשומת הלב שלך.</string>
<string name="start_editing">להתחיל בעריכה</string>
<string name="get_unlimited_access">קבלת גישה בלתי מוגבלת</string>
@ -3963,7 +3963,6 @@
<string name="routing_engine_vehicle_type_foot">ברגל</string>
<string name="routing_engine_vehicle_type_bike">אופנוע</string>
<string name="routing_engine_vehicle_type_car">מכונית</string>
<string name="message_error_recheck_parameters">שגיאה, נא לבדוק את המשתנים מחדש</string>
<string name="copy_address">העתקת כתובת</string>
<string name="online_routing_engine">מנוע ניווט מקוון</string>
<string name="online_routing_engines">מנועי ניווט מקוונים</string>
@ -3976,4 +3975,15 @@
<string name="edit_track">עריכת מסלול</string>
<string name="rename_track">שינוי שם מסלול</string>
<string name="change_folder">החלפת תיקייה</string>
<string name="announcement_time_title">זמן ההכרזה</string>
<string name="start_recording">התחלת הקלטה</string>
<string name="routing_engine_vehicle_type_wheelchair">כסא גלגלים</string>
<string name="routing_engine_vehicle_type_walking">הליכה</string>
<string name="routing_engine_vehicle_type_small_truck">משאית קטנה</string>
<string name="routing_engine_vehicle_type_truck">משאית</string>
<string name="routing_engine_vehicle_type_scooter">קטנוע</string>
<string name="routing_engine_vehicle_type_racingbike">אופנוע מרוצים</string>
<string name="routing_engine_vehicle_type_mtb">אופני הרים</string>
<string name="message_server_error">שגיאת שרת: %1$s</string>
<string name="message_name_is_already_exists">השם כבר קיים</string>
</resources>

View file

@ -2617,7 +2617,7 @@ POIの更新は利用できません</string>
<string name="popular_destinations">人気の目的地</string>
<string name="travel_card_download_descr">Wikivoyageの旅行ガイドをダウンロードしておけば、オフライン環境でも世界各地の観光名所を知ることができます。</string>
<string name="start_editing_card_image_text">誰でも自由に編集できる世界規模の旅行ガイドです。</string>
<string name="welcome_to_open_beta_description">『旅行ガイド』はWikivoyageをベースとした機能です。オープンβ時に限り無料で全ての機能を利用できます。旅行ガイドは将来的にOsmAndのサブスクリプション登録者や、OsmAnd+の利用者に提供される予定です。</string>
<string name="welcome_to_open_beta_description">『旅行ガイド』はWikivoyageをベースとした機能です。オープンβ時に限り無料で全ての機能を利用できます。</string>
<string name="start_editing_card_description">あなたもWikivoyageの記事を編集できます。場所に関する知識、旅先での経験、魅力あるスポットはもちろん注意事項なども共有できます。</string>
<string name="start_editing">編集を開始</string>
<string name="get_unlimited_access">無制限のアクセスを取得</string>

View file

@ -2449,7 +2449,6 @@
<string name="subscription_paused_title">OsmAndის გამოწერა დაპაუზებულია</string>
<string name="subscription_on_hold_title">OsmAndის გამოწერა შეჩერებულია</string>
<string name="online_routing_example_hint">URL ყველა პარამეტრით აი ასეთი იქნება:</string>
<string name="message_error_recheck_parameters">შეცდომა, გადაამოწმეთ პარამეტრები</string>
<string name="mapillary_image">Mapillary-ის გამოსახულება</string>
<string name="mapillary_widget">Mapillary-ის ღილაკი</string>
<string name="srtm_color_scheme">ფერთა გამა</string>
@ -2758,4 +2757,14 @@
<string name="rendering_attr_surface_fine_gravel_name">ქვიშა</string>
<string name="rendering_attr_surface_paving_stones_name">ხრეში</string>
<string name="rendering_attr_surface_grass_paver_name">ბალახიანი</string>
<string name="items_added">დამატებულია</string>
<string name="profile_type_custom_string">მორგებული პროფილი</string>
<string name="multimedia_rec_split_title">ჩანაწერის გაყოფა</string>
<string name="rendering_value_walkingRoutesOSMCNodes_name">უჯრედული ქსელები</string>
<string name="layer_osm_edits">OSM ჩასწორებები</string>
<string name="shared_string_osmand_usage">OsmAnd-ის გამოყენება</string>
<string name="gpx_join_gaps">ღრეჩოების შეერთება</string>
<string name="quick_action_add_create_items">შექმნა</string>
<string name="custom_search">მორგებული ძებნა</string>
<string name="shared_string_empty">ცარიელი</string>
</resources>

View file

@ -2770,7 +2770,6 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="test_route_calculation">Patikrinti maršruto apskaičiavimą</string>
<string name="routing_engine_vehicle_type_bike">Dviratis</string>
<string name="routing_engine_vehicle_type_car">Automobilis</string>
<string name="message_error_recheck_parameters">Įvyko klaida, patikrinkite paametrus</string>
<string name="copy_address">Kopijuoti adresą</string>
<string name="shared_string_folders">Folderiai</string>
<string name="select_folder">Pasirinkite folderį</string>

View file

@ -3005,7 +3005,7 @@ No Afganistānas līdz Zimbabvei, no Austrālijas līdz ASV, Argentīna, Brazīl
<string name="update_is_available">Pieejams atjauninājums</string>
<string name="download_file">Lejupielādēt failu</string>
<string name="start_editing_card_image_text">Brīvais pasaules ceļojumu gids, ko ikviens var papildināt.</string>
<string name="welcome_to_open_beta_description">Ceļojumu gidi dotajā brīdī ir bāzēti uz Vikiceļojumiem. Baudiet visas iespējas beta testēšanas periodā par brīvu. Vēlāk ceļojumu gidi būs pieejami OsmAnd Unlimited abonomentiem un OsmAnd+ lietotājiem.</string>
<string name="welcome_to_open_beta_description">Ceļojumu gidi dotajā brīdī ir bāzēti uz Vikiceļojumiem. Baudiet visas iespējas beta testēšanas periodā par brīvu.</string>
<string name="start_editing_card_description">Jūs varat papildināt jebkuru Vikiceļojuma rakstu. Mēs ļoti iesakām dalīties ar savu pieredzi, zināšanām un spējām rakstu veidošanā.</string>
<string name="start_editing">Sākt rakstīt</string>
<string name="get_unlimited_access">Saņemiet neierobežotu piekļuvi</string>

View file

@ -2593,7 +2593,7 @@
<string name="monthly_map_updates">മാപ്പ് അപ്ഡേറ്റുകൾ: എല്ലാ മാസവും every month</string>
<string name="daily_map_updates">മാപ്പ് അപ്ഡേറ്റുകൾ: ഓരോ മണിക്കൂറും every hour</string>
<string name="start_editing_card_image_text">ആർക്കും എഡിറ്റുചെയ്യാൻ കഴിയുന്ന സ്വതന്ത്ര ലോകവ്യാപക യാത്ര ഗൈഡ്.</string>
<string name="welcome_to_open_beta_description">"ട്രാവൽ ഗൈഡുകൾ നിലവിൽ വിക്കിവൊയേജ് അടിസ്ഥാനമാക്കിയുള്ളതാണ്. ബീറ്റ ടെസ്റ്റിംഗ് സമയത്ത് എല്ലാ സവിശേഷതകളും സൗജന്യ മായ് പരിശോധിക്കുക. അതിനുശേഷം| ഓസ് ആൻഡ് അൺലിംനെറ്റിന്റെ ഉടമസ്ഥർക്കും ഓസ്മണ്ട്+ (എഫ്-ഡ്രോയ്ഡ് ഉള്‍പ്പടെ) ഉടമസ്ഥർക്കും യാത്രാ ഗൈഡുകൾ ലഭ്യമാകും."</string>
<string name="welcome_to_open_beta_description">"ട്രാവൽ ഗൈഡുകൾ നിലവിൽ വിക്കിവൊയേജ് അടിസ്ഥാനമാക്കിയുള്ളതാണ്. ബീറ്റ ടെസ്റ്റിംഗ് സമയത്ത് എല്ലാ സവിശേഷതകളും സൗജന്യ മായ് പരിശോധിക്കുക."</string>
<string name="start_editing_card_description">വിക്കിവൊയേജിലെ ഏതൊരു ആർട്ടിക്കിളും നിങ്ങള്‍ക്ക് തിരുത്താം. അറിവ്| അനുഭവം| കഴിവുകൾ| നിങ്ങളുടെ ശ്രദ്ധ എന്നിവ പങ്കിടാം</string>
<string name="get_unlimited_access">പരിധിയില്ലാത്ത ആക്സസ്സ് നേടുക</string>
<string name="welcome_to_open_beta">ബീറ്റയിലേക്ക് വേര്‍ഷനിലേക്ക് സ്വാഗതം</string>

View file

@ -2654,7 +2654,7 @@
<string name="update_is_available">Oppdatering tilgjengelig</string>
<string name="download_file">Last ned fil</string>
<string name="start_editing_card_image_text">Den frie verdensomspennende reiseguiden alle kan redigere.</string>
<string name="welcome_to_open_beta_description">Reiseguider baserer seg nå på Wikivoyage. Test all funksjonalitet gratis under den åpne beta-perioden. Etterpå vil reiseguider være tilgjengelige for dem som abonnerer på ubegrenset OsmAnd og eiere av OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Reiseguider baserer seg nå på Wikivoyage. Test all funksjonalitet gratis under den åpne beta-perioden.</string>
<string name="start_editing_card_description">Du kan redigere enhver artikkel på Wikivoyage. Del kunnskap, erfaring, talent, og din oppmerksomhet.</string>
<string name="start_editing">Start redigering</string>
<string name="get_unlimited_access">Få ubegrenset tilgang</string>
@ -3864,4 +3864,21 @@
<string name="routing_attr_allow_streams_name">Tillat bekker og avløp</string>
<string name="routing_attr_allow_intermittent_name">Tillat periodiske vannveier</string>
<string name="routing_attr_allow_intermittent_description">Tillat periodiske vannveier</string>
<string name="shared_string_vehicle">Kjøretøy</string>
<string name="shared_string_api_key">API-nøkkel</string>
<string name="shared_string_server_url">Tjenernettadresse</string>
<string name="test_route_calculation">Test rutekalkulering</string>
<string name="routing_engine_vehicle_type_driving">Kjøring</string>
<string name="routing_engine_vehicle_type_foot">Til fots</string>
<string name="routing_engine_vehicle_type_bike">Sykkel</string>
<string name="routing_engine_vehicle_type_car">Bil</string>
<string name="copy_address">Kopier adresse</string>
<string name="shared_string_folders">Mapper</string>
<string name="select_folder">Velg mappe</string>
<string name="select_folder_descr">Velg mappe eller legg til en ny</string>
<string name="shared_string_empty">Tom</string>
<string name="edit_track">Rediger spor</string>
<string name="upload_to_openstreetmap">Last opp til OpenStreetMap</string>
<string name="rename_track">Gi spor nytt navn</string>
<string name="change_folder">Endre mappe</string>
</resources>

View file

@ -2588,7 +2588,7 @@
<string name="update_is_available">Update beschikbaar</string>
<string name="download_file">Bestand downloaden</string>
<string name="start_editing_card_image_text">De gratis wereldwijde reisgids die iedereen kan bewerken.</string>
<string name="welcome_to_open_beta_description">Reisgidsen zijn gebaseerd op Wikivoyage. Test gratis alle mogelijkheden tijdens de open beta-testfase. Hierna zijn de reisgidsen beschikbaar voor abonnees van OsmAnd Unlimited en OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Reisgidsen zijn gebaseerd op Wikivoyage. Test gratis alle mogelijkheden tijdens de open beta-testfase.</string>
<string name="start_editing_card_description">Je kunt artikelen bewerken op Wikivoyage. Deel jouw kennis, ervaringen, talent en interesses.</string>
<string name="start_editing">Begin met bewerken</string>
<string name="get_unlimited_access">Krijg onbeperkte toegang</string>
@ -3916,7 +3916,6 @@
<string name="routing_engine_vehicle_type_foot">Te voet</string>
<string name="routing_engine_vehicle_type_bike">Fiets</string>
<string name="routing_engine_vehicle_type_car">Auto</string>
<string name="message_error_recheck_parameters">Fout, controleer parameters opnieuw</string>
<string name="copy_address">Kopieer adres</string>
<string name="online_routing_engine">Online routeplanningssysteem</string>
<string name="online_routing_engines">Online routeplanningssystemen</string>

View file

@ -2619,7 +2619,7 @@
<string name="update_is_available">Dostępne uaktualnienie</string>
<string name="download_file">Pobierz plik</string>
<string name="start_editing_card_image_text">Bezpłatny przewodnik po świecie, który każdy może edytować.</string>
<string name="welcome_to_open_beta_description">Przewodniki turystyczne obecnie oparte są na Wikipodróżach. Przetestuj wszystkie funkcje podczas otwartych beta-testów za darmo. Po ich zakończeniu, przewodniki turystyczne będą dostępne dla subskrybentów OsmAnd Unlimited oraz posiadaczy OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Przewodniki turystyczne obecnie oparte są na Wikipodróżach. Przetestuj wszystkie funkcje podczas otwartych beta-testów za darmo.</string>
<string name="start_editing_card_description">Możesz i powinieneś edytować dowolny artykuł w Wikipodóżach. Podziel się wiedzą, doświadczeniem, talentem i uwagą.</string>
<string name="start_editing">Rozpocznij edycję</string>
<string name="get_unlimited_access">Uzyskaj nieograniczony dostęp</string>
@ -3956,7 +3956,6 @@
<string name="test_route_calculation">Obliczanie trasy testowej</string>
<string name="routing_engine_vehicle_type_bike">Rower</string>
<string name="routing_engine_vehicle_type_car">Samochód</string>
<string name="message_error_recheck_parameters">Błąd, ponownie sprawdź parametry</string>
<string name="copy_address">Skopiuj adres</string>
<string name="routing_engine_vehicle_type_driving">Jazda</string>
<string name="routing_engine_vehicle_type_foot">Stopa</string>
@ -3964,4 +3963,37 @@
<string name="select_folder">Wybierz folder</string>
<string name="select_folder_descr">Wybierz folder lub dodaj nowy</string>
<string name="shared_string_empty">Opróżnij</string>
<string name="analyze_by_intervals">Analiza według przedziałów (przedział podziału)</string>
<string name="upload_to_openstreetmap">Prześlij do OpenStreetMap</string>
<string name="edit_track">Edytuj trasę</string>
<string name="rename_track">Zmień nazwę trasy</string>
<string name="change_folder">Zmień folder</string>
<string name="shared_string_sec">sek</string>
<string name="announcement_time_passing">Omijanie</string>
<string name="announcement_time_approach">Podejście</string>
<string name="announcement_time_prepare_long">Długie przygotowanie</string>
<string name="announcement_time_prepare">Przygotuj</string>
<string name="announcement_time_off_route">Poza trasą</string>
<string name="announcement_time_arrive">Przyjedź do miejsca docelowego</string>
<string name="shared_string_turn">Zakręt</string>
<string name="announcement_time_intervals">Odstępy czasowe i odległościowe</string>
<string name="announcement_time_descr">Czas ogłaszania różnych komunikatów głosowych zależy od rodzaju komunikatu, aktualnej prędkości nawigacji i domyślnej prędkości nawigacji.</string>
<string name="announcement_time_title">Czas ogłoszenia</string>
<string name="start_recording">Rozpocznij nagrywanie</string>
<string name="show_track_on_map">Pokaż trasę na mapie</string>
<string name="routing_engine_vehicle_type_wheelchair">Wózek inwalidzki</string>
<string name="routing_engine_vehicle_type_hiking">Wędrówki</string>
<string name="routing_engine_vehicle_type_walking">Pieszo</string>
<string name="routing_engine_vehicle_type_cycling_electric">Jazda na rowerze elektrycznym</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Kolarstwo górskie</string>
<string name="routing_engine_vehicle_type_cycling_road">Kolarstwo szosowe</string>
<string name="routing_engine_vehicle_type_cycling_regular">Regularna jazda na rowerze</string>
<string name="routing_engine_vehicle_type_hgv">HGV</string>
<string name="routing_engine_vehicle_type_small_truck">Mała ciężarówka</string>
<string name="routing_engine_vehicle_type_truck">Ciężarówka</string>
<string name="routing_engine_vehicle_type_scooter">Skuter</string>
<string name="routing_engine_vehicle_type_racingbike">Rower wyścigowy</string>
<string name="routing_engine_vehicle_type_mtb">MTB</string>
<string name="message_server_error">Błąd serwera: %1$s</string>
<string name="message_name_is_already_exists">Taka nazwa już istnieje</string>
</resources>

View file

@ -2673,7 +2673,7 @@
<string name="maps_you_need_descr">Baseado nos artigos que você marcou, recomendamos você baixar os seguintes mapas:</string>
<string name="maps_you_need">Mapas que você precisa</string>
<string name="travel_card_download_descr">Baixe os guias de viagem Wikivoyage para ver artigos sobre lugares ao redor do mundo sem conexão à Internet.</string>
<string name="welcome_to_open_beta_description">Os guias de viagem atualmente baseiam-se no Wikivoyage. Teste todos os recursos durante o teste beta aberto, de graça. Depois, os guias estarão disponíveis para assinantes OsmAnd Unlimited e proprietários do OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Os guias de viagem atualmente baseiam-se no Wikivoyage. Teste todos os recursos durante o teste beta aberto, de graça.</string>
<string name="download_wikipedia_description">Baixe artigos da Wikipédia por %1$s para lê-los offline.</string>
<string name="wiki_article_search_text">Procurando o artigo wiki correspondente</string>
<string name="shared_string_bookmark">Marcar</string>
@ -3955,7 +3955,6 @@
<string name="routing_engine_vehicle_type_foot"></string>
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
<string name="routing_engine_vehicle_type_car">Carro</string>
<string name="message_error_recheck_parameters">Erro, verifique novamente os parâmetros</string>
<string name="copy_address">Copiar endereço</string>
<string name="online_routing_engine">Motor de encaminhamento online</string>
<string name="online_routing_engines">Mecanismos de roteamento online</string>
@ -3963,4 +3962,37 @@
<string name="select_folder">Selecione a pasta</string>
<string name="select_folder_descr">Selecione a pasta ou adicione uma nova</string>
<string name="shared_string_empty">Vazio</string>
<string name="analyze_by_intervals">Analisar por intervalos (intervalo de divisão)</string>
<string name="upload_to_openstreetmap">Carregar para OpenStreetMap</string>
<string name="edit_track">Editar trilha</string>
<string name="rename_track">Renomear trilha</string>
<string name="change_folder">Mudar pasta</string>
<string name="shared_string_sec">seg</string>
<string name="announcement_time_passing">Passando</string>
<string name="announcement_time_approach">Aproximação</string>
<string name="announcement_time_prepare_long">Longa preparação</string>
<string name="announcement_time_prepare">Preparar</string>
<string name="announcement_time_off_route">Fora da rota</string>
<string name="announcement_time_arrive">Chegue ao destino</string>
<string name="shared_string_turn">Virar</string>
<string name="announcement_time_intervals">Intervalos de tempo e distância</string>
<string name="announcement_time_descr">O tempo de anúncio de diferentes comandos de voz depende do tipo de prompt, velocidade de navegação atual e velocidade de navegação padrão.</string>
<string name="announcement_time_title">Hora do anúncio</string>
<string name="start_recording">Comece a gravar</string>
<string name="show_track_on_map">Mostrar trilha no mapa</string>
<string name="routing_engine_vehicle_type_wheelchair">Cadeira de rodas</string>
<string name="routing_engine_vehicle_type_hiking">Caminhada</string>
<string name="routing_engine_vehicle_type_walking">Caminhando</string>
<string name="routing_engine_vehicle_type_cycling_electric">Ciclismo elétrico</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Mountain bike</string>
<string name="routing_engine_vehicle_type_cycling_road">Ciclismo regular</string>
<string name="routing_engine_vehicle_type_cycling_regular">Ciclismo regular</string>
<string name="routing_engine_vehicle_type_hgv">Veículos de carga pesada</string>
<string name="routing_engine_vehicle_type_small_truck">Caminhão pequeno</string>
<string name="routing_engine_vehicle_type_truck">Caminhão</string>
<string name="routing_engine_vehicle_type_scooter">Lambreta</string>
<string name="routing_engine_vehicle_type_racingbike">Bicicleta de corrida</string>
<string name="routing_engine_vehicle_type_mtb">MTB</string>
<string name="message_server_error">Erro de servidor: %1$s</string>
<string name="message_name_is_already_exists">O nome já existe</string>
</resources>

View file

@ -2186,7 +2186,7 @@
<string name="update_is_available">Atualização disponível</string>
<string name="download_file">Descarregar ficheiro</string>
<string name="start_editing_card_image_text">O mundo livre guia de viagem, que qualquer pessoa pode editar.</string>
<string name="welcome_to_open_beta_description">Os guias de viagem estão atualmente baseados no Wikivoyage. Teste todos os recursos gratuitamente durante o teste aberto beta. Posteriormente os guias de viagem estarão disponíveis para assinantes do OsmAnd Unlimited e proprietários da OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Os guias de viagem estão atualmente baseados no Wikivoyage. Teste todos os recursos gratuitamente durante o teste aberto beta.</string>
<string name="start_editing_card_description">Pode e deve editar qualquer artigo no Wikivoyage. Partilhe saber, experiência, talento e a sua atenção.</string>
<string name="start_editing">Começar a editar</string>
<string name="get_unlimited_access">Obter acesso ilimitado</string>
@ -3934,4 +3934,30 @@
\n• Cores personalizadas para favoritos e pontos de rotas de trilhos
\n
\n</string>
<string name="edit_online_routing_engine">Editar o mecanismo de roteamento online</string>
<string name="shared_string_subtype">Subtipo</string>
<string name="shared_string_vehicle">Veículo</string>
<string name="shared_string_api_key">Chave de API</string>
<string name="shared_string_server_url">URL do servidor</string>
<string name="shared_string_enter_param">Digite o param</string>
<string name="keep_it_empty_if_not">Mantenha-o vazio se não</string>
<string name="online_routing_example_hint">O URL com todos os parâmetros parecerá-se assim:</string>
<string name="test_route_calculation">Cálculo da rota de teste</string>
<string name="routing_engine_vehicle_type_driving">Condução</string>
<string name="routing_engine_vehicle_type_foot"></string>
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
<string name="routing_engine_vehicle_type_car">Carro</string>
<string name="message_error_recheck_parameters">Erro, verifique novamente os parâmetros</string>
<string name="copy_address">Copiar endereço</string>
<string name="online_routing_engine">Mecanismo de roteamento online</string>
<string name="online_routing_engines">Mecanismos de roteamento online</string>
<string name="shared_string_folders">Pastas</string>
<string name="select_folder">Selecionar pasta</string>
<string name="select_folder_descr">Selecione a pasta ou adicione uma</string>
<string name="shared_string_empty">Vazio</string>
<string name="analyze_by_intervals">Analisar por intervalos (intervalo dividido)</string>
<string name="upload_to_openstreetmap">Enviar ao OpenStreetMap</string>
<string name="edit_track">Editar trilho</string>
<string name="rename_track">Renomear trilho</string>
<string name="change_folder">Mudar pasta</string>
</resources>

View file

@ -1200,7 +1200,7 @@
<string name="recording_context_menu_precord">Сделать фото</string>
<string name="dropbox_plugin_description">Синхронизация треков и медиазаметок с вашим аккаунтом Dropbox.</string>
<string name="dropbox_plugin_name">Плагин Dropbox</string>
<string name="osmand_srtm_long_description_1000_chars">Плагин обеспечивает наложение контурных линии и затемняющего слоя (рельефа), которые будут отображаться поверх стандартных карт OsmAnd. Эту функцию оценят спортсмены, туристы, путешественники и все, для кого рельеф местности имеет значение.
<string name="osmand_srtm_long_description_1000_chars">Плагин обеспечивает наложение контурных линий и затемняющего слоя (рельефа), которые будут отображаться поверх стандартных карт OsmAnd. Эту функцию оценят спортсмены, туристы, путешественники и все, для кого рельеф местности имеет значение.
\n
\nГлобальные данные (между 70° на севере и 70° на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), инструментом визуализации Terra, флагманского спутника Земли системы наблюдения NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), космических систем Японии (J-spacesystems).</string>
<string name="recording_photo_description">Фото %1$s %2$s</string>
@ -2547,12 +2547,12 @@
\n OsmAnd + — платная версия программы. Приобретая её, вы поддержите проект, финансируете разработку новых возможностей и получите последние обновления.
\n
\n Некоторые из главных возможностей:</string>
<string name="osmand_plus_extended_description_part2">Навигация
\n• Работает через интернет (быстрее) или автономно (без платы за роуминг за границей)
\n• Пошаговые голосовые подсказки (записанные или синтезированные голоса)
\n• Полосы движения, отображение названия улицы и приблизительное время прибытия
\n• Поддержка промежуточных точек на вашем маршруте
\n• Автоматическое перестройка маршрута при отклонении от существующего
<string name="osmand_plus_extended_description_part2">Навигация
\n• Работает через интернет (быстрее) или автономно (без платы за роуминг за границей)
\n• Пошаговые голосовые подсказки (записанные или синтезированные голоса)
\n• Полосы движения, отображение названия улицы и приблизительное время прибытия
\n• Поддержка промежуточных точек на вашем маршруте
\n• Автоматическая перестройка маршрута при отклонении от существующего
\n• Поиск мест по адресу, типу (например, ресторан, гостиница, заправка, музей) или географическим координатам
\n</string>
<string name="osmand_plus_extended_description_part3">Просмотр карты
@ -2593,12 +2593,12 @@
\n• Возможность изменения масштаба в зависимости от скорости
\n• Возможность делиться своим местоположением, чтобы друзья смогли найти вас
\n</string>
<string name="osmand_plus_extended_description_part6">Возможности для пешеходов и велосипедистов
\n• Просмотр пешеходных, туристических и велосипедных дорожек, прекрасно подходит для активного отдыха
\n• Специальный режимы маршрутизации и отображения для велосипедистов и пешеходов
\n• Возможность отображения остановок общественного транспорта (автобус, трамвай, поезд), включая названия маршрутов
\n• Возможность записи путешествие в локальный файл GPX или интернет-сервис
\n• Возможность отображения скорости и высоты
<string name="osmand_plus_extended_description_part6">Возможности для пешеходов и велосипедистов
\n• Просмотр пешеходных, туристических и велосипедных дорожек, прекрасно подходит для активного отдыха
\n• Специальные режимы маршрутизации и отображения для велосипедистов и пешеходов
\n• Возможность отображения остановок общественного транспорта (автобус, трамвай, поезд), включая названия маршрутов
\n• Возможность записи путешествие в локальный файл GPX или интернет-сервис
\n• Возможность отображения скорости и высоты
\n• Отображение контурных линий и затенения высот (через дополнительный плагин)</string>
<string name="osmand_plus_extended_description_part7">Непосредственный вклад в OSM
\n • Сообщения об ошибках в данных
@ -2741,7 +2741,7 @@
<string name="update_is_available">Доступно обновление</string>
<string name="download_file">Скачать файл</string>
<string name="start_editing_card_image_text">Бесплатный путеводитель по всему миру, который может редактировать каждый.</string>
<string name="welcome_to_open_beta_description">В настоящее время путеводители основаны на Викигиде. Проверьте бесплатно все функции во время открытого бета-тестирования. Впоследствии путеводители будут доступны подписчикам OsmAnd Unlimited и владельцам OsmAnd+.</string>
<string name="welcome_to_open_beta_description">В настоящее время путеводители основаны на Викигиде. Проверьте бесплатно все функции во время открытого бета-тестирования.</string>
<string name="start_editing_card_description">Вы можете изменять любую статью Викигида, более того, ваше участие в нашем проекте всячески приветствуется! Делитесь знаниями, опытом, талантами и своим вниманием.</string>
<string name="start_editing">Начать редактирование</string>
<string name="get_unlimited_access">Получить неограниченный доступ</string>

View file

@ -2708,7 +2708,7 @@
<string name="update_is_available">Agiornamentu disponìbile</string>
<string name="download_file">Iscàrriga documentu</string>
<string name="start_editing_card_image_text">Sa ghia turìstica lìbera pro totu su mundu chi totus podent megiorare.</string>
<string name="welcome_to_open_beta_description">Sas ghias de biàgiu sunt basadas in subra de Wikivoyage. Proa totu sas funtzionalidades suas de badas pro su tempus chi at a durare sa beta aberta. A pustis de sa fine de custu perìodu, imbetzes, at a èssere disponìbile petzi pro abbonados a OsmAnd Unlimited e a chie tenet OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Sas ghias de biàgiu sunt basadas in subra de Wikivoyage. Proa totu sas funtzionalidades suas de badas pro su tempus chi at a durare sa beta aberta.</string>
<string name="start_editing_card_description">Podes acontzare cale si siat artìculu in Wikivoyage. Cumpartzi connoschèntzias, esperièntzias, talentu e s\'atentzione tua.</string>
<string name="start_editing">Incumintza a modificare</string>
<string name="get_unlimited_access">Otene satzessu illimitadu</string>
@ -3957,7 +3957,6 @@
<string name="routing_engine_vehicle_type_foot">A pee</string>
<string name="routing_engine_vehicle_type_bike">Bitzicleta</string>
<string name="routing_engine_vehicle_type_car">Màchina</string>
<string name="message_error_recheck_parameters">Errore, torra a verificare sos paràmetros</string>
<string name="copy_address">Còpia s\'indiritzu</string>
<string name="online_routing_engine">Motore de càrculu in lìnia</string>
<string name="online_routing_engines">Motores de càrculu in lìnia</string>

View file

@ -133,7 +133,7 @@
<string name="poi_vehicle_inspection">Kontrola vozidla (technická/emisná)</string>
<string name="poi_car_wash">Autoumyváreň</string>
<string name="poi_fuel">Benzínová pumpa;Čerpacia stanica</string>
<string name="poi_electricity_combined_charging">Nabíjacia stanica</string>
<string name="poi_electricity_combined_charging">Nabíjacia stanica pre vozidlá</string>
<string name="poi_vehicle_ramp">Servisná rampa na auto</string>
<string name="poi_compressed_air">Stlačený vzduch</string>
<string name="poi_parking">Parkovisko</string>

View file

@ -2724,7 +2724,7 @@
<string name="update_is_available">Je dostupná aktualizácia</string>
<string name="download_file">Stiahnuť súbor</string>
<string name="start_editing_card_image_text">Voľný cestovný sprievodca po svete, ktorý môže upravovať každý.</string>
<string name="welcome_to_open_beta_description">Cestovní sprievodcovia sú založení na Wikivoyage. Vyskúšajte všetky funkcie počas otvoreného betatestovania zadarmo. Potom budú cestovní sprievodcovia dostupní predplatiteľom Neobmedzeného OsmAnd a používateľom OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Cestovní sprievodcovia sú založení na Wikivoyage. Vyskúšajte všetky funkcie počas otvoreného betatestovania zadarmo.</string>
<string name="start_editing_card_description">Môžete upravovať články na Wikivoyage. Zdieľajte znalosti, skúsenosti, talent a vašu pozornosť.</string>
<string name="start_editing">Začať upravovať</string>
<string name="welcome_to_open_beta">Vitajte v otvorenej beta verzii</string>
@ -3955,7 +3955,6 @@
<string name="routing_engine_vehicle_type_foot">Chôdza</string>
<string name="routing_engine_vehicle_type_bike">Bicykel</string>
<string name="routing_engine_vehicle_type_car">Auto</string>
<string name="message_error_recheck_parameters">Chyba, skontrolujte parametre</string>
<string name="copy_address">Kopírovať adresu</string>
<string name="online_routing_engine">Online navigačná služba</string>
<string name="online_routing_engines">Online navigačné služby</string>
@ -3963,4 +3962,37 @@
<string name="select_folder">Zvoľte priečinok</string>
<string name="select_folder_descr">Zvoľte priečinok alebo pridajte nový</string>
<string name="shared_string_empty">Prázdne</string>
<string name="analyze_by_intervals">Analyzovať podľa intervalov (rozdeliť interval)</string>
<string name="upload_to_openstreetmap">Nahrať do OpenStreetMap</string>
<string name="edit_track">Upraviť stopu</string>
<string name="rename_track">Premenovať stopu</string>
<string name="change_folder">Zmeniť priečinok</string>
<string name="shared_string_sec">sek.</string>
<string name="announcement_time_passing">Pri bode trasy</string>
<string name="announcement_time_approach">Priblíženie sa</string>
<string name="announcement_time_prepare_long">Pripraviť sa neskôr</string>
<string name="announcement_time_prepare">Pripraviť sa</string>
<string name="announcement_time_off_route">Mimo trasy</string>
<string name="announcement_time_arrive">Dosiahnutie cieľa</string>
<string name="announcement_time_intervals">Intervaly času a vzdialenosti</string>
<string name="announcement_time_descr">Čas oznamu rôznych hlasových pokynov závisí od typu pokynu, aktuálnej rýchlosti navigácie a predvolenej rýchlosti navigácie.</string>
<string name="announcement_time_title">Čas oznamu</string>
<string name="start_recording">Začať záznam</string>
<string name="show_track_on_map">Zobraziť stopu na mape</string>
<string name="routing_engine_vehicle_type_wheelchair">Invalidný vozík</string>
<string name="routing_engine_vehicle_type_hiking">Turistika</string>
<string name="routing_engine_vehicle_type_walking">Chôdza</string>
<string name="routing_engine_vehicle_type_cycling_electric">Elektrické bicyklovanie</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Horské bicyklovanie</string>
<string name="routing_engine_vehicle_type_cycling_road">Cestné bicyklovanie</string>
<string name="routing_engine_vehicle_type_cycling_regular">Bežné bicyklovanie</string>
<string name="routing_engine_vehicle_type_hgv">Nákladné auto</string>
<string name="routing_engine_vehicle_type_small_truck">Malé nákladné auto</string>
<string name="routing_engine_vehicle_type_truck">Kamión</string>
<string name="routing_engine_vehicle_type_scooter">Skúter</string>
<string name="routing_engine_vehicle_type_racingbike">Závodný bicykel</string>
<string name="routing_engine_vehicle_type_mtb">Horský bicykel</string>
<string name="message_server_error">Chyba servera: %1$s</string>
<string name="message_name_is_already_exists">Názov už existuje</string>
<string name="shared_string_turn">Odbočiť</string>
</resources>

View file

@ -2779,7 +2779,7 @@
<string name="purchase_cancelled_dialog_descr">Obnovite naročilo za uporabo vseh zmožnosti programa:</string>
<string name="maps_you_need_descr">Na osnovi shranjenih zaznamkov je priporočljivo prejeti zemljevide:</string>
<string name="travel_card_download_descr">Prejmite popotniške vodnike Wikivoyage za pregled prispevkov različnih svetovnih krajev brez povezave na internet.</string>
<string name="welcome_to_open_beta_description">Popotniški vodniki so zasnovani po vsebinah Wikivoyage. Storitev je na voljo brezplačno med preizkušanjem delovanja različice beta. Po tem obdobju bodo vodniki na voljo le uporabnikom paketov OsmAnd Neomejeno in OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Popotniški vodniki so zasnovani po vsebinah Wikivoyage. Storitev je na voljo brezplačno med preizkušanjem delovanja različice beta.</string>
<string name="start_editing_card_description">Vsakdo lahko (in tudi zaželeno je) ureja prispevke na WikiVoyage. Skupno znanje, izkušnje in mnenja povečajo kakovost vsebine.</string>
<string name="welcome_to_open_beta">Dobrodošli v različici Open beta</string>
<string name="wikivoyage_travel_guide_descr">Krajevno shranjeni vodniki po najbolj zanimivih krajih sveta, prikazani v programu OsmAnd, tudi na mestih, kjer ni povezave z internetom.</string>

View file

@ -2375,7 +2375,7 @@
<string name="wiki_article_search_text">Претражујем одговарајући вики чланак</string>
<string name="wiki_article_not_found">Чланак није нађен</string>
<string name="how_to_open_wiki_title">Како да отворите чланке са Википедије?</string>
<string name="welcome_to_open_beta_description">Туристички водичи су тренутно базирани на Wikivoyage-у. Тестирајте све функционалности бесплатно. После тога, туристички водичи ће бити доступни само претплатницима на OsmAnd Unlimited и власницима OsmAnd+-а.</string>
<string name="welcome_to_open_beta_description">Туристички водичи су тренутно базирани на Wikivoyage-у. Тестирајте све функционалности бесплатно.</string>
<string name="start_editing_card_description">Можете и требали бисте да мењате било који чланак на Wikivoyage-у, а и надамо се да хоћете. Делите Ваше знање, искуство, таленат и пажњу.</string>
<string name="monthly_map_updates">Месечна ажурирања карата</string>
<string name="daily_map_updates">Сатна ажурирања карата</string>

View file

@ -2555,7 +2555,7 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="update_is_available">Uppdatering tillgänglig</string>
<string name="download_file">Hämta fil</string>
<string name="start_editing_card_image_text">Den fria, världsomspännande reseguiden som alla kan redigera.</string>
<string name="welcome_to_open_beta_description">Reseguider är baserade på Wikivoyage. Testa alla funktioner under öppnen beta-testning gratis. Efteråt kommer resor att vara tillgängliga för prenumeranter av OsmAnd Unlimited och ägare av OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Reseguider är baserade på Wikivoyage. Testa alla funktioner under öppnen beta-testning gratis.</string>
<string name="start_editing_card_description">Du kan och bör redigera en artikel på Wikivoyage. Dela med dig av kunskap, erfarenhet, talang och din kännedom</string>
<string name="start_editing">Börja redigera</string>
<string name="get_unlimited_access">Få obegränsad tillgång</string>

View file

@ -194,7 +194,7 @@
<string name="poi_fuel">Gaz istasyonu;Benzin istasyonu;Dolum istasyonu;Petrol istasyonu</string>
<string name="poi_fuel_diesel">Dizel</string>
<string name="poi_fuel_gtl_diesel">GTL dizel</string>
<string name="poi_fuel_hgv_diesel">TIR dizel</string>
<string name="poi_fuel_hgv_diesel">ır yük aracı dizeli</string>
<string name="poi_fuel_biodiesel">Bio dizel</string>
<string name="poi_fuel_lpg">LPG</string>
<string name="poi_fuel_octane_80">80 Oktan</string>
@ -215,7 +215,7 @@
<string name="poi_fuel_biogas">Biyogaz</string>
<string name="poi_fuel_lh2">Sıvı hidrojen</string>
<string name="poi_fuel_electricity">Elektrik</string>
<string name="poi_electricity_combined_charging">Şarj istasyonu</string>
<string name="poi_electricity_combined_charging">Şarj istasyonu; Elektrikli araç şarj istasyonu; EA şarj istasyonu; Elektrikli şarj noktası; Şarj noktası; Elektronik şarj istasyonu; Elektrikli araç besleme ekipmanı</string>
<string name="poi_vehicle_ramp">Araç rampa</string>
<string name="poi_compressed_air">Basınçlı hava</string>
<string name="poi_parking">Otopark</string>
@ -1187,7 +1187,7 @@
<string name="poi_car_pooling">Sürüş paylaşım noktası</string>
<string name="poi_park_ride">Park ve sürüş</string>
<string name="poi_access_mofa">Mofa erişimi</string>
<string name="poi_access_hgv">ır vasıta erişimi</string>
<string name="poi_access_hgv">ır yük aracı erişimi</string>
<string name="poi_access_goods">Hafif ticari araç erişimi</string>
<string name="poi_berth">Demirleme yeri</string>
<string name="poi_buoy_installation">Yükleme şamandırası</string>
@ -1436,7 +1436,7 @@
<string name="poi_traffic_signals_sound_yes">Evet</string>
<string name="poi_traffic_signals_sound_no">Ses: hayır</string>
<string name="poi_traffic_signals_sound_walk">Sadece yürümeye izin verildiğinde</string>
<string name="poi_toll_hgv_yes">ır vasıta geçiş ücreti</string>
<string name="poi_toll_hgv_yes">ır yük aracı geçiş ücreti</string>
<string name="poi_rescue_station">Kurtarma istasyonu</string>
<string name="poi_bicycle_parking_anchors">Çapalar</string>
<string name="poi_services">Servis alanı</string>
@ -3133,4 +3133,9 @@
<string name="poi_street_cabinet_cable_tv">Dolap türü: kablo tv</string>
<string name="poi_street_cabinet_telecom">Dolap türü: telefon</string>
<string name="poi_street_cabinet_power">Dolap türü: elektrik</string>
<string name="poi_hgv_unsuitable">ır yük aracı erişimi: uygun değil</string>
<string name="poi_hgv_discouraged">ır yük aracı erişimi: önerilmiyor</string>
<string name="poi_hgv_agricultural">ır yük aracı erişimi: tarım</string>
<string name="poi_hgv_no">ır yük aracı erişimi: hayır</string>
<string name="poi_hgv_private">ır yük aracı erişimi: özel</string>
</resources>

View file

@ -2839,7 +2839,7 @@
<string name="update_is_available">Güncelleme mevcut</string>
<string name="download_file">Dosyayı indir</string>
<string name="start_editing_card_image_text">Herkesin düzenleyebileceği ücretsiz dünya çapında seyahat rehberi.</string>
<string name="welcome_to_open_beta_description">Seyahat rehberleri şu anda Wikivoyage\'ı temel almaktadır. Açık beta testi sırasında tüm özellikleri ücretsiz test edin. Daha sonra seyahat rehberleri OsmAnd Unlimited aboneleri ve OsmAnd+ sahipleri için mevcut olacaktır.</string>
<string name="welcome_to_open_beta_description">Seyahat rehberleri şu anda Wikivoyage\'ı temel almaktadır. Açık beta testi sırasında tüm özellikleri ücretsiz test edin.</string>
<string name="start_editing_card_description">Wikivoyage üzerindeki herhangi bir makaleyi düzenleyebilirsiniz. Bilgi, deneyim, yetenek ve dikkatinizi paylaşın.</string>
<string name="start_editing">Düzenlemeye başla</string>
<string name="welcome_to_open_beta">ık betaya hoş geldiniz</string>
@ -3961,7 +3961,6 @@
<string name="routing_engine_vehicle_type_foot">Yürüme</string>
<string name="routing_engine_vehicle_type_bike">Bisiklet</string>
<string name="routing_engine_vehicle_type_car">Araba</string>
<string name="message_error_recheck_parameters">Hata, parametreleri tekrar gözden geçirin</string>
<string name="copy_address">Adresi kopyala</string>
<string name="online_routing_engine">Çevrim içi yönlendirme motoru</string>
<string name="online_routing_engines">Çevrim içi yönlendirme motorları</string>
@ -3974,4 +3973,32 @@
<string name="edit_track">Yolu düzenle</string>
<string name="rename_track">Yolu yeniden adlandır</string>
<string name="change_folder">Klasörü değiştir</string>
<string name="shared_string_sec">sn</string>
<string name="announcement_time_passing">Geçme</string>
<string name="announcement_time_approach">Yaklaşma</string>
<string name="announcement_time_prepare">Hazırlık</string>
<string name="announcement_time_prepare_long">Uzun hazırlık</string>
<string name="announcement_time_off_route">Güzergah dışı</string>
<string name="announcement_time_arrive">Hedefe varış</string>
<string name="shared_string_turn">Dönüş</string>
<string name="announcement_time_intervals">Zaman ve mesafe aralıkları</string>
<string name="announcement_time_descr">Farklı sesli komutların duyuru zamanı komut türüne, geçerli navigasyon hızına ve öntanımlı navigasyon hızına bağlıdır.</string>
<string name="announcement_time_title">Duyuru zamanı</string>
<string name="start_recording">Kaydı başlat</string>
<string name="show_track_on_map">Yolu haritada göster</string>
<string name="routing_engine_vehicle_type_wheelchair">Tekerlekli sandalye</string>
<string name="routing_engine_vehicle_type_hiking">Yürüyüş</string>
<string name="routing_engine_vehicle_type_walking">Yürüme</string>
<string name="routing_engine_vehicle_type_cycling_electric">Elektrikli bisiklet</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Dağ bisikleti</string>
<string name="routing_engine_vehicle_type_cycling_road">Yol bisikleti</string>
<string name="routing_engine_vehicle_type_cycling_regular">Genel bisiklet</string>
<string name="routing_engine_vehicle_type_hgv">ır yük aracı</string>
<string name="routing_engine_vehicle_type_mtb">Dağ bisikleti</string>
<string name="routing_engine_vehicle_type_small_truck">Küçük kamyon</string>
<string name="routing_engine_vehicle_type_truck">Kamyon</string>
<string name="routing_engine_vehicle_type_scooter">Mobilet</string>
<string name="routing_engine_vehicle_type_racingbike">Yarış bisikleti</string>
<string name="message_server_error">Sunucu hatası: %1$s</string>
<string name="message_name_is_already_exists">Ad zaten var</string>
</resources>

View file

@ -2699,7 +2699,7 @@
<string name="update_is_available">Доступне оновлення</string>
<string name="download_file">Завантажити файл</string>
<string name="start_editing_card_image_text">Безплатний всесвітній путівник, який може правити кожен.</string>
<string name="welcome_to_open_beta_description">Туристичні путівники, в цей час, засновані на Вікімандрах. Перевірте усі функції безплатно під час відкритого бета-тестування. Потім, путівники будуть доступні передплатникам OsmAnd Unlimited і власникам OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Туристичні путівники, в цей час, засновані на Вікімандрах. Перевірте усі функції безплатно під час відкритого бета-тестування.</string>
<string name="start_editing_card_description">Вам можна і слід правити будь-яку статтю на Вікімандрах. Діліться знаннями, досвідом, талантом і Вашої увагою.</string>
<string name="start_editing">Розпочати правку</string>
<string name="get_unlimited_access">Отримати необмежений доступ</string>
@ -3111,7 +3111,7 @@
<string name="app_mode_campervan">Дім на колесах</string>
<string name="rendering_attr_showLez_description">Показати на мапі зони низьких викидів. Не впливає на маршрутизацію.</string>
<string name="rendering_attr_showLez_name">Показати зони низьких викидів</string>
<string name="temporary_conditional_routing">Враховувати часові обмеження</string>
<string name="temporary_conditional_routing">Враховувати тимчасові обмеження</string>
<string name="shared_string_default">Усталений</string>
<string name="new_route_calculated_dist_dbg">Маршрут: відстань %1$s, час навігації %2$s \nРозрахунок: %3$.1f с, %4$d доріг, %5$d тайлів)</string>
<string name="lang_oc">Окситанська</string>
@ -3959,7 +3959,6 @@
<string name="routing_engine_vehicle_type_foot">Пішки</string>
<string name="routing_engine_vehicle_type_bike">Велосипед</string>
<string name="routing_engine_vehicle_type_car">Автомобіль</string>
<string name="message_error_recheck_parameters">Помилка, повторно перевірте параметри</string>
<string name="copy_address">Копіювати адресу</string>
<string name="online_routing_engine">Мережний рушій маршрутизації</string>
<string name="online_routing_engines">Мережні рушії маршрутизації</string>
@ -3972,4 +3971,32 @@
<string name="edit_track">Редагувати трек</string>
<string name="rename_track">Перейменувати трек</string>
<string name="change_folder">Змінити теку</string>
<string name="shared_string_sec">с</string>
<string name="announcement_time_passing">Проходження</string>
<string name="announcement_time_approach">Наближення</string>
<string name="announcement_time_prepare_long">Завчасне приготування</string>
<string name="announcement_time_prepare">Приготуватися</string>
<string name="announcement_time_off_route">По за маршрутом</string>
<string name="announcement_time_arrive">Прибуття до місця призначення</string>
<string name="shared_string_turn">Поворот</string>
<string name="announcement_time_intervals">Інтервали часу та відстаней</string>
<string name="announcement_time_descr">Час оголошення різних голосових підказок залежить від типу запиту, поточної швидкості навігації та типової швидкості переходів.</string>
<string name="announcement_time_title">Час оголошення</string>
<string name="start_recording">Почати запис</string>
<string name="show_track_on_map">Показати трек на мапі</string>
<string name="routing_engine_vehicle_type_wheelchair">Інвалідний візок</string>
<string name="routing_engine_vehicle_type_hiking">Піша прогулянка</string>
<string name="routing_engine_vehicle_type_walking">Ходьба</string>
<string name="routing_engine_vehicle_type_cycling_electric">Електричний велосипед</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Гірський велосипед</string>
<string name="routing_engine_vehicle_type_cycling_road">Дорожній велосипед</string>
<string name="routing_engine_vehicle_type_cycling_regular">Звичайний велосипед</string>
<string name="routing_engine_vehicle_type_hgv">Вантажівка</string>
<string name="routing_engine_vehicle_type_small_truck">Невелика вантажівка</string>
<string name="routing_engine_vehicle_type_truck">Вантажівка</string>
<string name="routing_engine_vehicle_type_scooter">Скутер</string>
<string name="routing_engine_vehicle_type_racingbike">Гоночний велосипед</string>
<string name="routing_engine_vehicle_type_mtb">Гірський велосипед</string>
<string name="message_server_error">Помилка сервера: %1$s</string>
<string name="message_name_is_already_exists">Назва вже існує</string>
</resources>

View file

@ -2704,7 +2704,7 @@
<string name="update_is_available">有更新可用</string>
<string name="download_file">下載檔案</string>
<string name="start_editing_card_image_text">人人都可編輯的自由全球旅行指南。</string>
<string name="welcome_to_open_beta_description">目前旅遊指南是基於維基導遊。在公開測試期間,測試所有的功能為免費。在這之後,旅遊指南功能將只提供給 OsmAnd Unlimited 的訂戶與 OsmAnd+ 的擁有者。</string>
<string name="welcome_to_open_beta_description">目前旅遊指南是基於維基導遊。在公開測試期間,測試所有的功能為免費。</string>
<string name="start_editing_card_description">您可以也應該在維基導遊上編輯任何文章。分享知識、經驗、才能與您關心的東西。</string>
<string name="start_editing">開始編輯</string>
<string name="get_unlimited_access">取得無限制的存取</string>
@ -3953,7 +3953,6 @@
<string name="routing_engine_vehicle_type_foot">步行</string>
<string name="routing_engine_vehicle_type_bike">自行車</string>
<string name="routing_engine_vehicle_type_car">汽車</string>
<string name="message_error_recheck_parameters">錯誤,重新檢查參數</string>
<string name="copy_address">複製地址</string>
<string name="online_routing_engine">線上路線計算引擎</string>
<string name="online_routing_engines">線上路線計算引擎</string>
@ -3961,4 +3960,37 @@
<string name="select_folder">選取資料夾</string>
<string name="select_folder_descr">選取資料夾或新增</string>
<string name="shared_string_empty"></string>
<string name="analyze_by_intervals">按時間間隔分析(分割時間間隔)</string>
<string name="upload_to_openstreetmap">上傳到 OpenStreetMap</string>
<string name="edit_track">編輯軌跡</string>
<string name="rename_track">重新命名軌跡</string>
<string name="change_folder">變更資料夾</string>
<string name="shared_string_sec"></string>
<string name="announcement_time_passing">通過</string>
<string name="announcement_time_approach">接近</string>
<string name="announcement_time_prepare_long">長準備</string>
<string name="announcement_time_prepare">準備</string>
<string name="announcement_time_off_route">偏離路線</string>
<string name="announcement_time_arrive">抵達目的地</string>
<string name="shared_string_turn">轉彎</string>
<string name="announcement_time_intervals">時間與距離間隔</string>
<string name="announcement_time_descr">不同語音提示的公告時間取決於提示類型、目前的導航速度與預設的導航速度。</string>
<string name="announcement_time_title">公告時間</string>
<string name="start_recording">開始錄製</string>
<string name="show_track_on_map">在地圖上顯示軌跡</string>
<string name="routing_engine_vehicle_type_wheelchair">輪椅</string>
<string name="routing_engine_vehicle_type_hiking">健行</string>
<string name="routing_engine_vehicle_type_walking">步行</string>
<string name="routing_engine_vehicle_type_cycling_electric">電動自行車</string>
<string name="routing_engine_vehicle_type_cycling_mountain">山地自行車</string>
<string name="routing_engine_vehicle_type_cycling_road">公路自行車</string>
<string name="routing_engine_vehicle_type_cycling_regular">一般自行車</string>
<string name="routing_engine_vehicle_type_hgv">大貨車</string>
<string name="routing_engine_vehicle_type_small_truck">小貨車</string>
<string name="routing_engine_vehicle_type_truck">卡車</string>
<string name="routing_engine_vehicle_type_scooter">速克達</string>
<string name="routing_engine_vehicle_type_racingbike">競賽摩托車</string>
<string name="routing_engine_vehicle_type_mtb">登山車</string>
<string name="message_server_error">伺服器錯誤:%1$s</string>
<string name="message_name_is_already_exists">名稱已存在</string>
</resources>

View file

@ -12,6 +12,23 @@
-->
<string name="message_name_is_already_exists">The name is already exists</string>
<string name="message_server_error">Server error: %1$s</string>
<string name="routing_engine_vehicle_type_mtb">MTB</string>
<string name="routing_engine_vehicle_type_racingbike">Racing bike</string>
<string name="routing_engine_vehicle_type_scooter">Scooter</string>
<string name="routing_engine_vehicle_type_truck">Truck</string>
<string name="routing_engine_vehicle_type_small_truck">Small truck</string>
<string name="routing_engine_vehicle_type_hgv">HGV</string>
<string name="routing_engine_vehicle_type_cycling_regular">Regular cycling</string>
<string name="routing_engine_vehicle_type_cycling_road">Road cycling</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Mountain cycling</string>
<string name="routing_engine_vehicle_type_cycling_electric">Electric cycling</string>
<string name="routing_engine_vehicle_type_walking">Walking</string>
<string name="routing_engine_vehicle_type_hiking">Hiking</string>
<string name="routing_engine_vehicle_type_wheelchair">Wheelchair</string>
<string name="show_track_on_map">Show track on map</string>
<string name="start_recording">Start recording</string>
<string name="announcement_time_title">Announcement time</string>
<string name="announcement_time_descr">Announcement time of different voice prompts depends on prompt type, current navigation speed and default navigation speed.</string>
<string name="announcement_time_intervals">Time and distance intervals</string>
@ -35,7 +52,6 @@
<string name="online_routing_engines">Online routing engines</string>
<string name="online_routing_engine">Online routing engine</string>
<string name="copy_address">Copy address</string>
<string name="message_error_recheck_parameters">Error, recheck parameters</string>
<string name="routing_engine_vehicle_type_car">Car</string>
<string name="routing_engine_vehicle_type_bike">Bike</string>
<string name="routing_engine_vehicle_type_foot">Foot</string>
@ -1172,7 +1188,7 @@
<string name="update_is_available">Update available</string>
<string name="download_file">Download file</string>
<string name="start_editing_card_image_text">The free worldwide travel guide anyone can edit.</string>
<string name="welcome_to_open_beta_description">Travel guides are currently based on Wikivoyage. Test all features during open beta testing for free. Afterwards, travel guides will be available to subscribers of OsmAnd Unlimited and owners of OsmAnd+.</string>
<string name="welcome_to_open_beta_description">Travel guides are currently based on Wikivoyage. Test all features during open beta testing for free.</string>
<string name="start_editing_card_description">You can and should edit any article on Wikivoyage. Share knowledge, experience, talent, and your attention.</string>
<string name="start_editing">Start editing</string>
<string name="get_unlimited_access">Get unlimited access</string>

View file

@ -54,7 +54,7 @@
<item name="android:windowBackground">@drawable/first_splash_screen_free</item>
</style>
<style name="FirstSplashScreenFreeDev" parent="SplashScreenBaseTheme">
<style name="FirstSplashScreenNightlyFree" parent="SplashScreenBaseTheme">
<item name="android:windowBackground">@drawable/first_splash_screen_free_dev</item>
</style>

View file

@ -0,0 +1,159 @@
package net.osmand.plus;
import android.location.Location;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationAvailability;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import net.osmand.PlatformUtil;
import net.osmand.plus.helpers.DayNightHelper;
import net.osmand.plus.helpers.LocationServiceHelper;
import org.apache.commons.logging.Log;
import java.util.Collections;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class LocationServiceHelperImpl extends LocationServiceHelper {
private static final Log LOG = PlatformUtil.getLog(DayNightHelper.class);
private final OsmandApplication app;
// FusedLocationProviderClient - Main class for receiving location updates.
private final FusedLocationProviderClient fusedLocationProviderClient;
// LocationRequest - Requirements for the location updates, i.e., how often you should receive
// updates, the priority, etc.
private final LocationRequest fusedLocationRequest;
// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private final com.google.android.gms.location.LocationCallback fusedLocationCallback;
private LocationCallback locationCallback;
public LocationServiceHelperImpl(@NonNull OsmandApplication app) {
this.app = app;
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(app);
fusedLocationRequest = new LocationRequest()
// Sets the desired interval for active location updates. This interval is inexact. You
// may not receive updates at all if no location sources are available, or you may
// receive them less frequently than requested. You may also receive updates more
// frequently than requested if other applications are requesting location at a more
// frequent interval.
//
// IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
// targetSdkVersion) may receive updates less frequently than this interval when the app
// is no longer in the foreground.
.setInterval(100)
// Sets the fastest rate for active location updates. This interval is exact, and your
// application will never receive updates more frequently than this value.
.setFastestInterval(50)
// Sets the maximum time when batched location updates are delivered. Updates may be
// delivered sooner than this interval.
.setMaxWaitTime(200)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fusedLocationCallback = new com.google.android.gms.location.LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
LocationCallback locationCallback = LocationServiceHelperImpl.this.locationCallback;
if (locationCallback != null) {
Location location = locationResult != null ? locationResult.getLastLocation() : null;
net.osmand.Location l = convertLocation(location);
locationCallback.onLocationResult(l == null
? Collections.<net.osmand.Location>emptyList() : Collections.singletonList(l));
}
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
LocationCallback locationCallback = LocationServiceHelperImpl.this.locationCallback;
if (locationAvailability != null && locationCallback != null) {
locationCallback.onLocationAvailability(locationAvailability.isLocationAvailable());
}
}
};
}
@Override
public void requestLocationUpdates(@NonNull LocationCallback locationCallback) {
this.locationCallback = locationCallback;
// request location updates
try {
fusedLocationProviderClient.requestLocationUpdates(
fusedLocationRequest, fusedLocationCallback, Looper.myLooper());
} catch (SecurityException e) {
LOG.debug("Location service permission not granted");
throw e;
} catch (IllegalArgumentException e) {
LOG.debug("GPS location provider not available");
throw e;
}
}
@Override
public boolean isNetworkLocationUpdatesSupported() {
return false;
}
@Override
public void requestNetworkLocationUpdates(@NonNull LocationCallback locationCallback) {
}
@Override
public void removeLocationUpdates() {
// remove location updates
try {
fusedLocationProviderClient.removeLocationUpdates(fusedLocationCallback);
} catch (SecurityException e) {
LOG.debug("Location service permission not granted", e);
throw e;
}
}
@Nullable
public net.osmand.Location getFirstTimeRunDefaultLocation(@Nullable final LocationCallback locationCallback) {
if (locationCallback == null) {
return null;
}
try {
Task<Location> lastLocation = fusedLocationProviderClient.getLastLocation();
lastLocation.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location loc) {
locationCallback.onLocationResult(loc != null
? Collections.singletonList(convertLocation(loc)) : Collections.<net.osmand.Location>emptyList() );
}
});
} catch (SecurityException e) {
LOG.debug("Location service permission not granted");
} catch (IllegalArgumentException e) {
LOG.debug("GPS location provider not available");
}
return null;
}
@Nullable
private net.osmand.Location convertLocation(@Nullable Location location) {
return location == null ? null : OsmAndLocationProvider.convertLocation(location, app);
}
}

View file

@ -0,0 +1,188 @@
package net.osmand.plus;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.PlatformUtil;
import net.osmand.plus.helpers.DayNightHelper;
import net.osmand.plus.helpers.LocationServiceHelper;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import static android.content.Context.LOCATION_SERVICE;
public class LocationServiceHelperImpl extends LocationServiceHelper implements LocationListener {
private static final Log LOG = PlatformUtil.getLog(DayNightHelper.class);
private final OsmandApplication app;
private LocationCallback locationCallback;
private LocationCallback networkLocationCallback;
private final LinkedList<LocationListener> networkListeners = new LinkedList<>();
// Working with location checkListeners
private class NetworkListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
LocationCallback locationCallback = LocationServiceHelperImpl.this.networkLocationCallback;
if (locationCallback != null) {
net.osmand.Location l = convertLocation(location);
locationCallback.onLocationResult(l == null
? Collections.<net.osmand.Location>emptyList() : Collections.singletonList(l));
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
public LocationServiceHelperImpl(@NonNull OsmandApplication app) {
this.app = app;
}
@Override
public void requestLocationUpdates(@NonNull LocationCallback locationCallback) {
this.locationCallback = locationCallback;
// request location updates
LocationManager locationManager = (LocationManager) app.getSystemService(LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} catch (SecurityException e) {
LOG.debug("Location service permission not granted");
throw e;
} catch (IllegalArgumentException e) {
LOG.debug("GPS location provider not available");
throw e;
}
}
@Override
public boolean isNetworkLocationUpdatesSupported() {
return true;
}
@Override
public void requestNetworkLocationUpdates(@NonNull LocationCallback locationCallback) {
this.networkLocationCallback = locationCallback;
// request location updates
LocationManager locationManager = (LocationManager) app.getSystemService(LOCATION_SERVICE);
List<String> providers = locationManager.getProviders(true);
for (String provider : providers) {
if (provider == null || provider.equals(LocationManager.GPS_PROVIDER)) {
continue;
}
try {
NetworkListener networkListener = new NetworkListener();
locationManager.requestLocationUpdates(provider, 0, 0, networkListener);
networkListeners.add(networkListener);
} catch (SecurityException e) {
LOG.debug(provider + " location service permission not granted");
} catch (IllegalArgumentException e) {
LOG.debug(provider + " location provider not available");
}
}
}
@Override
public void removeLocationUpdates() {
// remove location updates
LocationManager locationManager = (LocationManager) app.getSystemService(LOCATION_SERVICE);
try {
locationManager.removeUpdates(this);
} catch (SecurityException e) {
LOG.debug("Location service permission not granted", e);
throw e;
} finally {
while (!networkListeners.isEmpty()) {
LocationListener listener = networkListeners.poll();
if (listener != null) {
locationManager.removeUpdates(listener);
}
}
}
}
@Nullable
public net.osmand.Location getFirstTimeRunDefaultLocation(@Nullable LocationCallback locationCallback) {
LocationManager locationManager = (LocationManager) app.getSystemService(Context.LOCATION_SERVICE);
List<String> providers = new ArrayList<>(locationManager.getProviders(true));
// note, passive provider is from API_LEVEL 8 but it is a constant, we can check for it.
// constant should not be changed in future
int passiveFirst = providers.indexOf(LocationManager.PASSIVE_PROVIDER);
// put passive provider to first place
if (passiveFirst > -1) {
providers.add(0, providers.remove(passiveFirst));
}
// find location
for (String provider : providers) {
try {
net.osmand.Location location = convertLocation(locationManager.getLastKnownLocation(provider));
if (location != null) {
return location;
}
} catch (SecurityException e) {
// location service permission not granted
} catch (IllegalArgumentException e) {
// location provider not available
}
}
return null;
}
@Nullable
private net.osmand.Location convertLocation(@Nullable Location location) {
return location == null ? null : OsmAndLocationProvider.convertLocation(location, app);
}
@Override
public void onLocationChanged(Location location) {
LocationCallback locationCallback = this.locationCallback;
if (locationCallback != null) {
net.osmand.Location l = convertLocation(location);
locationCallback.onLocationResult(l == null
? Collections.<net.osmand.Location>emptyList() : Collections.singletonList(l));
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
LocationCallback locationCallback = this.locationCallback;
if (locationCallback != null) {
locationCallback.onLocationAvailability(true);
}
}
@Override
public void onProviderDisabled(String provider) {
LocationCallback locationCallback = this.locationCallback;
if (locationCallback != null) {
locationCallback.onLocationAvailability(false);
}
}
}

View file

@ -4,20 +4,24 @@ import android.app.Notification;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import net.osmand.Location;
import net.osmand.PlatformUtil;
import net.osmand.plus.helpers.LocationServiceHelper;
import net.osmand.plus.helpers.LocationServiceHelper.LocationCallback;
import net.osmand.plus.notifications.OsmandNotification;
import net.osmand.plus.settings.backend.OsmandSettings;
public class NavigationService extends Service implements LocationListener {
import java.util.List;
public class NavigationService extends Service {
public static class NavigationServiceBinder extends Binder {
}
@ -29,11 +33,11 @@ public class NavigationService extends Service implements LocationListener {
private final NavigationServiceBinder binder = new NavigationServiceBinder();
private String serviceOffProvider;
private OsmandSettings settings;
protected int usedBy = 0;
private OsmAndLocationProvider locationProvider;
private LocationServiceHelper locationServiceHelper;
@Override
public IBinder onBind(Intent intent) {
@ -72,21 +76,37 @@ public class NavigationService extends Service implements LocationListener {
settings = app.getSettings();
usedBy = intent.getIntExtra(USAGE_INTENT, 0);
// use only gps provider
serviceOffProvider = LocationManager.GPS_PROVIDER;
locationProvider = app.getLocationProvider();
locationServiceHelper = app.createLocationServiceHelper();
app.setNavigationService(this);
// request location updates
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(serviceOffProvider, 0, 0, NavigationService.this);
locationServiceHelper.requestLocationUpdates(new LocationCallback() {
@Override
public void onLocationResult(@NonNull List<net.osmand.Location> locations) {
if (!locations.isEmpty()) {
Location location = locations.get(locations.size() - 1);
if (!settings.MAP_ACTIVITY_ENABLED.get()) {
locationProvider.setLocationFromService(location);
}
}
}
@Override
public void onLocationAvailability(boolean locationAvailable) {
if (!locationAvailable) {
OsmandApplication app = (OsmandApplication) getApplication();
if (app != null) {
app.showToastMessage(getString(R.string.off_router_service_no_gps_available));
}
}
}
});
} catch (SecurityException e) {
Toast.makeText(this, R.string.no_location_permission, Toast.LENGTH_LONG).show();
Log.d(PlatformUtil.TAG, "Location service permission not granted"); //$NON-NLS-1$
} catch (IllegalArgumentException e) {
Toast.makeText(this, R.string.gps_not_available, Toast.LENGTH_LONG).show();
Log.d(PlatformUtil.TAG, "GPS location provider not available"); //$NON-NLS-1$
}
// registering icon at top level
@ -117,11 +137,10 @@ public class NavigationService extends Service implements LocationListener {
app.setNavigationService(null);
usedBy = 0;
// remove updates
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
locationManager.removeUpdates(this);
locationServiceHelper.removeLocationUpdates();
} catch (SecurityException e) {
Log.d(PlatformUtil.TAG, "Location service permission not granted"); //$NON-NLS-1$
// Location service permission not granted
}
// remove notification
stopForeground(Boolean.TRUE);
@ -134,29 +153,6 @@ public class NavigationService extends Service implements LocationListener {
}, 500);
}
@Override
public void onLocationChanged(Location l) {
if (l != null && !settings.MAP_ACTIVITY_ENABLED.get()) {
net.osmand.Location location = OsmAndLocationProvider.convertLocation(l, (OsmandApplication) getApplication());
locationProvider.setLocationFromService(location);
}
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, getString(R.string.off_router_service_no_gps_available), Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onTaskRemoved(Intent rootIntent) {
OsmandApplication app = ((OsmandApplication) getApplication());

View file

@ -1,6 +1,7 @@
package net.osmand.plus;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
@ -16,7 +17,6 @@ import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.GpsStatus.Listener;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Build.VERSION;
@ -25,6 +25,7 @@ import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;
@ -38,8 +39,9 @@ import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon;
import net.osmand.data.QuadPoint;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.helpers.LocationServiceHelper;
import net.osmand.plus.routing.RouteSegmentSearchResult;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.router.RouteSegmentResult;
@ -47,8 +49,6 @@ import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@ -75,8 +75,6 @@ public class OsmAndLocationProvider implements SensorEventListener {
private static final float ACCURACY_FOR_GPX_AND_ROUTING = 50;
private static final int GPS_TIMEOUT_REQUEST = 0;
private static final int GPS_DIST_REQUEST = 0;
private static final int NOT_SWITCH_TO_NETWORK_WHEN_GPS_LOST_MS = 12000;
private static final long LOCATION_TIMEOUT_TO_BE_STALE = 1000 * 60 * 2; // 2 minutes
@ -85,9 +83,8 @@ public class OsmAndLocationProvider implements SensorEventListener {
private static final long AGPS_TO_REDOWNLOAD = 16 * 60 * 60 * 1000; // 16 hours
private static final int REQUESTS_BEFORE_CHECK_LOCATION = 100;
private AtomicInteger locationRequestsCounter = new AtomicInteger();
private AtomicInteger staleLocationRequestsCounter = new AtomicInteger();
private final AtomicInteger locationRequestsCounter = new AtomicInteger();
private final AtomicInteger staleLocationRequestsCounter = new AtomicInteger();
private long lastTimeGPSLocationFixed = 0;
@ -122,23 +119,23 @@ public class OsmAndLocationProvider implements SensorEventListener {
// Current screen orientation
private int currentScreenOrientation;
private OsmandApplication app;
private final OsmandApplication app;
private NavigationInfo navigationInfo;
private CurrentPositionHelper currentPositionHelper;
private OsmAndLocationSimulation locationSimulation;
private final NavigationInfo navigationInfo;
private final CurrentPositionHelper currentPositionHelper;
private final OsmAndLocationSimulation locationSimulation;
private final LocationServiceHelper locationServiceHelper;
private net.osmand.Location location = null;
private GPSInfo gpsInfo = new GPSInfo();
private List<OsmAndLocationListener> locationListeners = new ArrayList<OsmAndLocationProvider.OsmAndLocationListener>();
private List<OsmAndCompassListener> compassListeners = new ArrayList<OsmAndLocationProvider.OsmAndCompassListener>();
private List<OsmAndLocationListener> locationListeners = new ArrayList<>();
private List<OsmAndCompassListener> compassListeners = new ArrayList<>();
private Object gpsStatusListener;
private float[] mRotationM = new float[9];
public class SimulationProvider {
public static class SimulationProvider {
private int currentRoad;
private int currentSegment;
private QuadPoint currentPoint;
@ -228,6 +225,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
navigationInfo = new NavigationInfo(app);
currentPositionHelper = new CurrentPositionHelper(app);
locationSimulation = new OsmAndLocationSimulation(app, this);
locationServiceHelper = app.createLocationServiceHelper();
addLocationListener(navigationInfo);
addCompassListener(navigationInfo);
}
@ -236,7 +234,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
final LocationManager service = (LocationManager) app.getSystemService(Context.LOCATION_SERVICE);
if (app.getSettings().isInternetConnectionAvailable()) {
if (System.currentTimeMillis() - app.getSettings().AGPS_DATA_LAST_TIME_DOWNLOADED.get() > AGPS_TO_REDOWNLOAD) {
//force an updated check for internet connectivity here before destroying A-GPS-data
// force an updated check for internet connectivity here before destroying A-GPS-data
if (app.getSettings().isInternetConnectionAvailable(true)) {
redownloadAGPS();
}
@ -245,27 +243,34 @@ public class OsmAndLocationProvider implements SensorEventListener {
if (isLocationPermissionAvailable(app)) {
registerGpsStatusListener(service);
try {
service.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, gpsListener);
locationServiceHelper.requestLocationUpdates(new LocationServiceHelper.LocationCallback() {
@Override
public void onLocationResult(@NonNull List<net.osmand.Location> locations) {
net.osmand.Location location = null;
if (!locations.isEmpty()) {
location = locations.get(locations.size() - 1);
lastTimeGPSLocationFixed = System.currentTimeMillis();
}
if (!locationSimulation.isRouteAnimating()) {
setLocation(location);
}
}
});
} catch (SecurityException e) {
// Location service permission not granted
} catch (IllegalArgumentException e) {
Log.d(PlatformUtil.TAG, "GPS location provider not available"); //$NON-NLS-1$
// GPS location provider not available
}
// try to always ask for network provide : it is faster way to find location
List<String> providers = service.getProviders(true);
if (providers == null) {
return;
}
for (String provider : providers) {
if (provider == null || provider.equals(LocationManager.GPS_PROVIDER)) {
continue;
}
try {
NetworkListener networkListener = new NetworkListener();
service.requestLocationUpdates(provider, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, networkListener);
networkListeners.add(networkListener);
} catch (IllegalArgumentException e) {
Log.d(PlatformUtil.TAG, provider + " location provider not available"); //$NON-NLS-1$
}
if (locationServiceHelper.isNetworkLocationUpdatesSupported()) {
locationServiceHelper.requestNetworkLocationUpdates(new LocationServiceHelper.LocationCallback() {
@Override
public void onLocationResult(@NonNull List<net.osmand.Location> locations) {
if (!locations.isEmpty() && !useOnlyGPS() && !locationSimulation.isRouteAnimating()) {
setLocation(locations.get(locations.size() - 1));
}
}
});
}
}
}
@ -285,8 +290,9 @@ public class OsmAndLocationProvider implements SensorEventListener {
}
}
private void registerGpsStatusListener(final LocationManager service) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@SuppressLint("MissingPermission")
private void registerGpsStatusListener(@NonNull final LocationManager service) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
gpsStatusListener = new GnssStatus.Callback() {
@Override
@ -321,7 +327,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
updateLocation(location);
}
};
service.registerGnssStatusCallback((GnssStatus.Callback) gpsStatusListener);
service.registerGnssStatusCallback((GnssStatus.Callback) gpsStatusListener, null);
} else {
gpsStatusListener = new Listener() {
private GpsStatus gpsStatus;
@ -336,14 +342,12 @@ public class OsmAndLocationProvider implements SensorEventListener {
}
}
private void updateGPSInfo(GpsStatus s) {
private void updateGPSInfo(@Nullable GpsStatus s) {
boolean fixed = false;
int n = 0;
int u = 0;
if (s != null) {
Iterator<GpsSatellite> iterator = s.getSatellites().iterator();
while (iterator.hasNext()) {
GpsSatellite g = iterator.next();
for (GpsSatellite g : s.getSatellites()) {
n++;
if (g.usedInFix()) {
u++;
@ -355,7 +359,8 @@ public class OsmAndLocationProvider implements SensorEventListener {
gpsInfo.foundSatellites = n;
gpsInfo.usedSatellites = u;
}
@NonNull
public GPSInfo getGPSInfo(){
return gpsInfo;
}
@ -364,51 +369,35 @@ public class OsmAndLocationProvider implements SensorEventListener {
currentScreenOrientation = orientation;
}
public void addLocationListener(OsmAndLocationListener listener){
if(!locationListeners.contains(listener)) {
public void addLocationListener(@NonNull OsmAndLocationListener listener) {
if (!locationListeners.contains(listener)) {
locationListeners.add(listener);
}
}
public void removeLocationListener(OsmAndLocationListener listener){
public void removeLocationListener(@NonNull OsmAndLocationListener listener) {
locationListeners.remove(listener);
}
public void addCompassListener(OsmAndCompassListener listener){
if(!compassListeners.contains(listener)) {
public void addCompassListener(@NonNull OsmAndCompassListener listener) {
if (!compassListeners.contains(listener)) {
compassListeners.add(listener);
}
}
public void removeCompassListener(OsmAndCompassListener listener){
public void removeCompassListener(@NonNull OsmAndCompassListener listener) {
compassListeners.remove(listener);
}
public net.osmand.Location getFirstTimeRunDefaultLocation() {
if (!isLocationPermissionAvailable(app)) {
return null;
}
LocationManager service = (LocationManager) app.getSystemService(Context.LOCATION_SERVICE);
List<String> ps = service.getProviders(true);
if(ps == null) {
return null;
}
List<String> providers = new ArrayList<String>(ps);
// note, passive provider is from API_LEVEL 8 but it is a constant, we can check for it.
// constant should not be changed in future
int passiveFirst = providers.indexOf("passive"); // LocationManager.PASSIVE_PROVIDER
// put passive provider to first place
if (passiveFirst > -1) {
providers.add(0, providers.remove(passiveFirst));
}
// find location
for (String provider : providers) {
net.osmand.Location location = convertLocation(service.getLastKnownLocation(provider), app);
if (location != null) {
return location;
@Nullable
public net.osmand.Location getFirstTimeRunDefaultLocation(@Nullable final OsmAndLocationListener locationListener) {
return isLocationPermissionAvailable(app)
? locationServiceHelper.getFirstTimeRunDefaultLocation(locationListener != null ? new LocationServiceHelper.LocationCallback() {
@Override
public void onLocationResult(@NonNull List<net.osmand.Location> locations) {
locationListener.updateLocation(locations.isEmpty() ? null : locations.get(0));
}
}
return null;
} : null) : null;
}
public synchronized void registerOrUnregisterCompassListener(boolean register) {
@ -467,10 +456,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
}
private boolean isRunningOnEmulator() {
if (Build.DEVICE.equals("generic")) { //$NON-NLS-1$
return true;
}
return false;
return Build.DEVICE.equals("generic");
}
@Override
@ -600,78 +586,25 @@ public class OsmAndLocationProvider implements SensorEventListener {
return MapUtils.unifyRotationTo360((float) (Math.atan2(sinA, cosA) * 180 / Math.PI));
}
private void updateLocation(net.osmand.Location loc) {
for (OsmAndLocationListener l : locationListeners) {
l.updateLocation(loc);
}
}
private LocationListener gpsListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
// lastTimeGPSLocationFixed = location.getTime();
lastTimeGPSLocationFixed = System.currentTimeMillis();
}
if(!locationSimulation.isRouteAnimating()) {
setLocation(convertLocation(location, app));
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
private LinkedList<LocationListener> networkListeners = new LinkedList<LocationListener>();
private boolean useOnlyGPS() {
if(app.getRoutingHelper().isFollowingMode()) {
if (app.getRoutingHelper().isFollowingMode()) {
return true;
}
if((System.currentTimeMillis() - lastTimeGPSLocationFixed) < NOT_SWITCH_TO_NETWORK_WHEN_GPS_LOST_MS) {
if ((System.currentTimeMillis() - lastTimeGPSLocationFixed) < NOT_SWITCH_TO_NETWORK_WHEN_GPS_LOST_MS) {
return true;
}
if(isRunningOnEmulator()) {
if (isRunningOnEmulator()) {
return true;
}
return false;
}
// Working with location checkListeners
private class NetworkListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (!useOnlyGPS() && !locationSimulation.isRouteAnimating()) {
setLocation(convertLocation(location, app));
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
private void stopLocationRequests() {
LocationManager service = (LocationManager) app.getSystemService(Context.LOCATION_SERVICE);
if (gpsStatusListener != null) {
@ -681,9 +614,10 @@ public class OsmAndLocationProvider implements SensorEventListener {
service.removeGpsStatusListener((Listener) gpsStatusListener);
}
}
service.removeUpdates(gpsListener);
while (!networkListeners.isEmpty()) {
service.removeUpdates(networkListeners.poll());
try {
locationServiceHelper.removeLocationUpdates();
} catch (SecurityException e) {
// Location service permission not granted
}
}
@ -979,7 +913,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
}
public static boolean isNotSimulatedLocation(net.osmand.Location l) {
if(l != null) {
if (l != null) {
return !SIMULATED_PROVIDER.equals(l.getProvider());
}
return true;
@ -1000,7 +934,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
networkenabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}
if(!gpsenabled && !networkenabled) {
if (!gpsenabled && !networkenabled) {
// notify user
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled));
@ -1019,11 +953,8 @@ public class OsmAndLocationProvider implements SensorEventListener {
}
public static boolean isLocationPermissionAvailable(Context context) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
return true;
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED;
}
public static void requestFineLocationPermissionIfNeeded(Activity activity) {

View file

@ -57,6 +57,7 @@ import net.osmand.plus.download.DownloadService;
import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.AvoidSpecificRoads;
import net.osmand.plus.helpers.DayNightHelper;
import net.osmand.plus.helpers.LocationServiceHelper;
import net.osmand.plus.helpers.LockHelper;
import net.osmand.plus.helpers.WaypointHelper;
import net.osmand.plus.helpers.enums.DrivingRegion;
@ -300,7 +301,11 @@ public class OsmandApplication extends MultiDexApplication {
public QuickActionRegistry getQuickActionRegistry() {
return quickActionRegistry;
}
public LocationServiceHelper createLocationServiceHelper() {
return new LocationServiceHelperImpl(this);
}
public void setAppCustomization(OsmAndAppCustomization appCustomization) {
this.appCustomization = appCustomization;
this.appCustomization.setup(this);

View file

@ -388,7 +388,7 @@ public abstract class OsmandPlugin {
}
private static boolean updateMarketPlugin(@NonNull OsmandApplication app, @NonNull Set<String> enabledPlugins, @NonNull OsmandPlugin plugin) {
boolean marketEnabled = Version.isMarketEnabled(app);
boolean marketEnabled = Version.isMarketEnabled();
boolean pckg = plugin.pluginAvailable(app);
boolean paid = plugin.isPaid();
if ((Version.isDeveloperVersion(app) || !Version.isProductionVersion(app)) && !paid) {

View file

@ -445,7 +445,7 @@ public class TargetPointsHelper {
Location lastKnownLocation = ctx.getLocationProvider().getLastKnownLocation();
LatLon latLon = lastKnownLocation != null ?
new LatLon(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()) : null;
RoutingHelperUtils.checkAndUpdateStartLocation(ctx, latLon);
RoutingHelperUtils.checkAndUpdateStartLocation(ctx, latLon, false);
setMyLocationPoint(latLon, false, null);
}
}

View file

@ -1,9 +1,10 @@
package net.osmand.plus;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import java.io.File;
@ -16,26 +17,29 @@ public class Version {
private final String appName;
private final static String FREE_VERSION_NAME = "net.osmand";
private final static String FREE_DEV_VERSION_NAME = "net.osmand.dev";
private final static String FREE_CUSTOM_VERSION_NAME = "net.osmand.freecustom";
private final static String UTM_REF = "&referrer=utm_source%3Dosmand";
public static boolean isGpsStatusEnabled(OsmandApplication ctx) {
return isGooglePlayEnabled(ctx) && !isBlackberry(ctx);
}
public static boolean isBlackberry(OsmandApplication ctx) {
return ctx.getString(R.string.versionFeatures).contains("+blackberry");
}
public static boolean isHuawei(OsmandApplication ctx) {
return ctx.getPackageName().endsWith(".huawei");
}
public static boolean isMarketEnabled(OsmandApplication ctx) {
return isGooglePlayEnabled(ctx) || isAmazonEnabled(ctx);
public static boolean isHuawei() {
return getBuildFlavor().contains("huawei");
}
public static boolean isGooglePlayInstalled(OsmandApplication ctx) {
private static boolean isAmazon() {
return getBuildFlavor().contains("amazon");
}
private static String getBuildFlavor() {
return net.osmand.plus.BuildConfig.FLAVOR;
}
public static boolean isGooglePlayEnabled() {
return !isHuawei() && !isAmazon();
}
public static boolean isMarketEnabled() {
return isGooglePlayEnabled() || isAmazon();
}
public static boolean isGooglePlayInstalled(@NonNull OsmandApplication ctx) {
try {
ctx.getPackageManager().getPackageInfo("com.android.vending", 0);
} catch (PackageManager.NameNotFoundException e) {
@ -44,10 +48,10 @@ public class Version {
return true;
}
public static String marketPrefix(OsmandApplication ctx) {
if (isAmazonEnabled(ctx)) {
public static String marketPrefix(@NonNull OsmandApplication ctx) {
if (isAmazon()) {
return "amzn://apps/android?p=";
} else if (isGooglePlayEnabled(ctx) && isGooglePlayInstalled(ctx)) {
} else if (isGooglePlayEnabled() && isGooglePlayInstalled(ctx)) {
return "market://details?id=";
}
return "https://osmand.net/apps?id=";
@ -57,22 +61,11 @@ public class Version {
return marketPrefix(ctx) + appName + UTM_REF;
}
private static boolean isAmazonEnabled(OsmandApplication ctx) {
return ctx.getString(R.string.versionFeatures).contains("+amazon");
}
public static boolean isGooglePlayEnabled(OsmandApplication ctx) {
return ctx.getString(R.string.versionFeatures).contains("+play_market");
}
private Version(OsmandApplication ctx) {
String appVersion = "";
int versionCode = -1;
try {
PackageInfo packageInfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
appVersion = packageInfo.versionName; //Version suffix ctx.getString(R.string.app_version_suffix) already appended in build.gradle
versionCode = packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
@ -123,8 +116,7 @@ public class Version {
public static boolean isFreeVersion(OsmandApplication ctx){
return ctx.getPackageName().equals(FREE_VERSION_NAME) ||
ctx.getPackageName().equals(FREE_DEV_VERSION_NAME) ||
ctx.getPackageName().equals(FREE_CUSTOM_VERSION_NAME) ||
isHuawei(ctx);
isHuawei();
}
public static boolean isPaidVersion(OsmandApplication ctx) {

View file

@ -70,6 +70,8 @@ import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.OnDismissDialogFragmentListener;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmAndLocationSimulation;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
@ -118,6 +120,7 @@ import net.osmand.plus.measurementtool.LoginBottomSheetFragment;
import net.osmand.plus.measurementtool.MeasurementEditingContext;
import net.osmand.plus.measurementtool.MeasurementToolFragment;
import net.osmand.plus.measurementtool.SnapTrackWarningFragment;
import net.osmand.plus.monitoring.TripRecordingBottomSheet;
import net.osmand.plus.render.RendererRegistry;
import net.osmand.plus.resources.ResourceManager;
import net.osmand.plus.routepreparationmenu.ChooseRouteFragment;
@ -346,11 +349,19 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
if (!settings.isLastKnownMapLocation()) {
// show first time when application ran
net.osmand.Location location = app.getLocationProvider().getFirstTimeRunDefaultLocation();
final WeakReference<MapActivity> activityRef = new WeakReference<>(this);
net.osmand.Location location = app.getLocationProvider().getFirstTimeRunDefaultLocation(new OsmAndLocationListener() {
@Override
public void updateLocation(Location location) {
MapActivity a = activityRef.get();
if (AndroidUtils.isActivityNotDestroyed(a) && app.getLocationProvider().getLastKnownLocation() == null) {
setMapInitialLatLon(a.mapView, location);
}
}
});
mapViewTrackingUtilities.setMapLinkedToLocation(true);
if (location != null) {
mapView.setLatLon(location.getLatitude(), location.getLongitude());
mapView.setIntZoom(14);
setMapInitialLatLon(mapView, location);
}
}
addDialogProvider(mapActions);
@ -375,6 +386,13 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
mIsDestroyed = false;
}
private void setMapInitialLatLon(@NonNull OsmandMapTileView mapView, @Nullable Location location) {
if (location != null) {
mapView.setLatLon(location.getLatitude(), location.getLongitude());
mapView.setIntZoom(14);
}
}
public void exitFromFullScreen(View view) {
AndroidUtils.exitFromFullScreen(this, view);
}
@ -1408,6 +1426,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
updateMapSettings();
app.getPoiFilters().loadSelectedPoiFilters();
mapViewTrackingUtilities.updateSettings();
mapViewTrackingUtilities.resetDrivingRegionUpdate();
//app.getRoutingHelper().setAppMode(settings.getApplicationMode());
if (mapLayers.getMapInfoLayer() != null) {
mapLayers.getMapInfoLayer().recreateControls();
@ -2204,6 +2223,10 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return getFragment(MeasurementToolFragment.TAG);
}
public TripRecordingBottomSheet getTripRecordingBottomSheet() {
return getFragment(TripRecordingBottomSheet.TAG);
}
public ChooseRouteFragment getChooseRouteFragment() {
return getFragment(ChooseRouteFragment.TAG);
}
@ -2220,7 +2243,6 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
return getFragment(SnapTrackWarningFragment.TAG);
}
@NonNull
public TrackMenuFragment getTrackMenuFragment() {
return getFragment(TrackMenuFragment.TAG);
}

View file

@ -903,7 +903,7 @@ public class MapActivityActions implements DialogProvider {
}
}).createItem());
if (Version.isGooglePlayEnabled(app) || Version.isHuawei(app) || Version.isDeveloperVersion(app)) {
if (Version.isGooglePlayEnabled() || Version.isHuawei() || Version.isDeveloperVersion(app)) {
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.osm_live, mapActivity)
.setId(DRAWER_OSMAND_LIVE_ID)
.setIcon(R.drawable.ic_action_osm_live)

View file

@ -5,7 +5,6 @@ import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -16,16 +15,12 @@ import androidx.fragment.app.FragmentManager;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.Version;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseInitCallback;
import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseListener;
import net.osmand.plus.inapp.InAppPurchaseHelper.InAppPurchaseTaskType;
import net.osmand.plus.liveupdates.OsmLiveRestartBottomSheetDialogFragment;
import net.osmand.plus.srtmplugin.SRTMPlugin;
import org.apache.commons.logging.Log;
@ -59,7 +54,7 @@ public class OsmandInAppPurchaseActivity extends AppCompatActivity implements In
InAppPurchaseHelper purchaseHelper = app.getInAppPurchaseHelper();
if (app.getSettings().isInternetConnectionAvailable()
&& isInAppPurchaseAllowed()
&& isInAppPurchaseSupported(purchaseHelper)) {
&& isInAppPurchaseSupported()) {
this.purchaseHelper = purchaseHelper;
}
}
@ -160,9 +155,8 @@ public class OsmandInAppPurchaseActivity extends AppCompatActivity implements In
return false;
}
public boolean isInAppPurchaseSupported(InAppPurchaseHelper purchaseHelper) {
OsmandApplication app = getMyApplication();
return Version.isGooglePlayEnabled(app) || Version.isHuawei(app);
public boolean isInAppPurchaseSupported() {
return Version.isGooglePlayEnabled() || Version.isHuawei();
}
@Override
@ -210,7 +204,7 @@ public class OsmandInAppPurchaseActivity extends AppCompatActivity implements In
}
onInAppPurchaseItemPurchased(sku);
fireInAppPurchaseItemPurchasedOnFragments(fragmentManager, sku, active);
if (purchaseHelper != null && purchaseHelper.getContourLines().getSku().equals(sku)) {
if (purchaseHelper != null && purchaseHelper.getFullVersion().getSku().equals(sku)) {
if (!(this instanceof MapActivity)) {
finish();
}

View file

@ -193,7 +193,7 @@ public class ShareDialog {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
activity.startActivity(intent);
} else {
if (Version.isMarketEnabled((OsmandApplication) activity.getApplication())) {
if (Version.isMarketEnabled()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(activity.getString(R.string.zxing_barcode_scanner_not_found));
builder.setPositiveButton(activity.getString(R.string.shared_string_yes), new DialogInterface.OnClickListener() {

View file

@ -180,7 +180,7 @@ public class StartGPSStatus extends OsmAndAction {
intent.addCategory(Intent.CATEGORY_LAUNCHER);
mapActivity.startActivity(intent);
} else {
if (Version.isMarketEnabled(getMyApplication())) {
if (Version.isMarketEnabled()) {
AlertDialog.Builder builder = new AlertDialog.Builder(mapActivity);
builder.setMessage(mapActivity. getString(R.string.gps_status_app_not_found));
builder.setPositiveButton(mapActivity.getString(R.string.shared_string_yes), new DialogInterface.OnClickListener() {

View file

@ -13,8 +13,6 @@ import net.osmand.data.LatLon;
import net.osmand.data.RotatedTileBox;
import net.osmand.map.IMapLocationListener;
import net.osmand.map.WorldRegion;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.OsmAndConstants;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
@ -22,10 +20,14 @@ import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.dashboard.DashboardOnMap;
import net.osmand.plus.helpers.enums.DrivingRegion;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
import net.osmand.plus.mapmarkers.MapMarker;
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.OsmandMapTileView;
@ -176,7 +178,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
locationProvider = location.getProvider();
if (settings.DRIVING_REGION_AUTOMATIC.get() && !drivingRegionUpdated && !app.isApplicationInitializing()) {
drivingRegionUpdated = true;
RoutingHelperUtils.checkAndUpdateStartLocation(app, location);
RoutingHelperUtils.checkAndUpdateStartLocation(app, location, true);
}
}
if (mapView != null) {
@ -489,7 +491,15 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
@Override
protected void onPostExecute(WorldRegion worldRegion) {
if (worldRegion != null) {
DrivingRegion oldRegion = app.getSettings().DRIVING_REGION.get();
app.setupDrivingRegion(worldRegion);
DrivingRegion currentRegion = app.getSettings().DRIVING_REGION.get();
if (oldRegion.leftHandDriving != currentRegion.leftHandDriving) {
ApplicationMode mode = app.getRoutingHelper().getAppMode();
app.getRoutingHelper().onSettingsChanged(mode, true);
}
}
}
}

View file

@ -5,8 +5,6 @@ import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
@ -120,7 +118,7 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
case SEA_DEPTH_MAPS:
return InAppPurchaseHelper.isDepthContoursPurchased(ctx);
case CONTOUR_LINES_HILLSHADE_MAPS:
return OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null;
return OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null || InAppPurchaseHelper.isContourLinesPurchased(ctx);
}
return false;
}
@ -216,7 +214,7 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
infoDescription.setText(getInfoDescription());
}
TextViewEx planInfoDescription = (TextViewEx) view.findViewById(R.id.plan_info_description);
planInfoDescription.setText(Version.isHuawei(app)
planInfoDescription.setText(Version.isHuawei()
? R.string.osm_live_payment_subscription_management_hw : R.string.osm_live_payment_subscription_management);
ViewGroup osmLiveCard = buildOsmLiveCard(ctx, cardsContainer);
if (osmLiveCard != null) {

View file

@ -30,7 +30,8 @@ public class ChoosePlanFreeBannerDialogFragment extends ChoosePlanDialogFragment
private final OsmAndFeature[] planTypeFeatures = {
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.WIKIVOYAGE_OFFLINE,
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.UNLIMITED_DOWNLOADS,
OsmAndFeature.MONTHLY_MAP_UPDATES,
};

View file

@ -1,16 +1,6 @@
package net.osmand.plus.chooseplan;
import android.app.Activity;
import android.view.View;
import androidx.annotation.Nullable;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandInAppPurchaseActivity;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.inapp.InAppPurchases.InAppPurchase;
public class ChoosePlanHillshadeSrtmDialogFragment extends ChoosePlanDialogFragment {
public class ChoosePlanHillshadeSrtmDialogFragment extends ChoosePlanFreeBannerDialogFragment {
public static final String TAG = ChoosePlanHillshadeSrtmDialogFragment.class.getSimpleName();
private final OsmAndFeature[] osmLiveFeatures = {
@ -29,6 +19,10 @@ public class ChoosePlanHillshadeSrtmDialogFragment extends ChoosePlanDialogFragm
private final OsmAndFeature[] planTypeFeatures = {
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.UNLIMITED_DOWNLOADS,
OsmAndFeature.MONTHLY_MAP_UPDATES,
};
private final OsmAndFeature[] selectedPlanTypeFeatures = {};
@ -51,48 +45,4 @@ public class ChoosePlanHillshadeSrtmDialogFragment extends ChoosePlanDialogFragm
public OsmAndFeature[] getSelectedPlanTypeFeatures() {
return selectedPlanTypeFeatures;
}
@Override
public int getPlanTypeHeaderImageId() {
return R.drawable.img_logo_38dp_contour_lines;
}
@Override
public String getPlanTypeHeaderTitle() {
return getString(R.string.srtm_plugin_name);
}
@Override
public String getPlanTypeHeaderDescription() {
return getString(R.string.paid_plugin);
}
@Override
public String getPlanTypeButtonDescription() {
return getString(R.string.in_app_purchase_desc);
}
@Override
public void setPlanTypeButtonClickListener(View button) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = getActivity();
if (activity != null) {
OsmandInAppPurchaseActivity.purchaseContourLines(activity);
dismiss();
}
}
});
}
@Nullable
@Override
public InAppPurchase getPlanTypePurchase() {
InAppPurchaseHelper purchaseHelper = getOsmandApplication().getInAppPurchaseHelper();
if (purchaseHelper != null) {
return purchaseHelper.getContourLines();
}
return null;
}
}

View file

@ -1,21 +1,11 @@
package net.osmand.plus.chooseplan;
import android.app.Activity;
import android.view.View;
import androidx.annotation.Nullable;
import net.osmand.plus.R;
import net.osmand.plus.activities.OsmandInAppPurchaseActivity;
import net.osmand.plus.inapp.InAppPurchaseHelper;
import net.osmand.plus.inapp.InAppPurchases.InAppPurchase;
public class ChoosePlanSeaDepthMapsDialogFragment extends ChoosePlanDialogFragment {
public class ChoosePlanSeaDepthMapsDialogFragment extends ChoosePlanFreeBannerDialogFragment {
public static final String TAG = ChoosePlanSeaDepthMapsDialogFragment.class.getSimpleName();
private final OsmAndFeature[] osmLiveFeatures = {
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.WIKIVOYAGE_OFFLINE,
OsmAndFeature.DAILY_MAP_UPDATES,
@ -23,12 +13,16 @@ public class ChoosePlanSeaDepthMapsDialogFragment extends ChoosePlanDialogFragme
OsmAndFeature.UNLOCK_ALL_FEATURES,
};
private final OsmAndFeature[] selectedOsmLiveFeatures = {
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
};
private final OsmAndFeature[] planTypeFeatures = {
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.UNLIMITED_DOWNLOADS,
OsmAndFeature.MONTHLY_MAP_UPDATES,
};
private final OsmAndFeature[] selectedPlanTypeFeatures = {};
@ -51,47 +45,4 @@ public class ChoosePlanSeaDepthMapsDialogFragment extends ChoosePlanDialogFragme
public OsmAndFeature[] getSelectedPlanTypeFeatures() {
return selectedPlanTypeFeatures;
}
@Override
public int getPlanTypeHeaderImageId() {
return R.drawable.img_logo_38dp_sea_depth;
}
@Override
public String getPlanTypeHeaderTitle() {
return getString(R.string.index_item_depth_contours_osmand_ext);
}
@Override
public String getPlanTypeHeaderDescription() {
return getString(R.string.in_app_purchase);
}
@Override
public String getPlanTypeButtonDescription() {
return getString(R.string.in_app_purchase_desc);
}
@Override
public void setPlanTypeButtonClickListener(View button) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = getActivity();
if (activity != null) {
OsmandInAppPurchaseActivity.purchaseDepthContours(activity);
}
}
});
}
@Nullable
@Override
public InAppPurchase getPlanTypePurchase() {
InAppPurchaseHelper purchaseHelper = getOsmandApplication().getInAppPurchaseHelper();
if (purchaseHelper != null) {
return purchaseHelper.getDepthContours();
}
return null;
}
}

View file

@ -19,7 +19,6 @@ public class ChoosePlanWikipediaDialogFragment extends ChoosePlanFreeBannerDialo
private final OsmAndFeature[] planTypeFeatures = {
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.WIKIVOYAGE_OFFLINE,
OsmAndFeature.UNLIMITED_DOWNLOADS,
OsmAndFeature.MONTHLY_MAP_UPDATES,
};

View file

@ -1,6 +1,30 @@
package net.osmand.plus.chooseplan;
public class ChoosePlanWikivoyageDialogFragment extends ChoosePlanWikipediaDialogFragment {
public class ChoosePlanWikivoyageDialogFragment extends ChoosePlanOsmLiveBannerDialogFragment {
public static final String TAG = ChoosePlanWikivoyageDialogFragment.class.getSimpleName();
private final OsmAndFeature[] osmLiveFeatures = {
OsmAndFeature.WIKIVOYAGE_OFFLINE,
OsmAndFeature.WIKIPEDIA_OFFLINE,
OsmAndFeature.DAILY_MAP_UPDATES,
OsmAndFeature.UNLIMITED_DOWNLOADS,
OsmAndFeature.CONTOUR_LINES_HILLSHADE_MAPS,
OsmAndFeature.SEA_DEPTH_MAPS,
OsmAndFeature.UNLOCK_ALL_FEATURES,
};
private final OsmAndFeature[] selectedOsmLiveFeatures = {
OsmAndFeature.WIKIVOYAGE_OFFLINE,
OsmAndFeature.WIKIPEDIA_OFFLINE,
};
@Override
public OsmAndFeature[] getOsmLiveFeatures() {
return osmLiveFeatures;
}
@Override
public OsmAndFeature[] getSelectedOsmLiveFeatures() {
return selectedOsmLiveFeatures;
}
}

View file

@ -71,16 +71,12 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
private void setupSafeModePref() {
SwitchPreferenceEx safeMode = findPreference(settings.SAFE_MODE.getId());
if (!Version.isBlackberry(app)) {
safeMode.setDescription(getString(R.string.safe_mode_description));
safeMode.setIconSpaceReserved(false);
// disable the switch if the library cannot be used
if ((NativeOsmandLibrary.isLoaded() && !NativeOsmandLibrary.isSupported()) || settings.NATIVE_RENDERING_FAILED.get()) {
safeMode.setEnabled(false);
safeMode.setChecked(true);
}
} else {
safeMode.setVisible(false);
safeMode.setDescription(getString(R.string.safe_mode_description));
safeMode.setIconSpaceReserved(false);
// disable the switch if the library cannot be used
if ((NativeOsmandLibrary.isLoaded() && !NativeOsmandLibrary.isSupported()) || settings.NATIVE_RENDERING_FAILED.get()) {
safeMode.setEnabled(false);
safeMode.setChecked(true);
}
}

View file

@ -251,7 +251,7 @@ public class ConfigureMapMenu {
OsmandPlugin.registerLayerContextMenu(activity.getMapView(), adapter, activity);
boolean srtmDisabled = OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) == null
&& !InAppPurchaseHelper.isSubscribedToLiveUpdates(app);
&& !InAppPurchaseHelper.isContourLinesPurchased(app);
if (srtmDisabled) {
SRTMPlugin srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
if (srtmPlugin != null) {

View file

@ -108,7 +108,7 @@ public class RateUsBottomSheetDialogFragment extends MenuBottomSheetDialogFragme
public static boolean shouldShow(OsmandApplication app) {
long firstInstalledDays = app.getAppInitializer().getFirstInstalledDays();
//Do not show dialog if not google play version or more than 350 days left from the first start
if (!Version.isGooglePlayEnabled(app) || firstInstalledDays > 350) {
if (!Version.isGooglePlayEnabled() || firstInstalledDays > 350) {
return false;
}
OsmandSettings settings = app.getSettings();

View file

@ -684,11 +684,12 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
}
public void initAppStatusVariables() {
OsmandApplication app = getMyApplication();
srtmDisabled = OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) == null
&& !InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication());
&& !InAppPurchaseHelper.isContourLinesPurchased(app);
nauticalPluginDisabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) == null;
freeVersion = Version.isFreeVersion(getMyApplication());
OsmandPlugin srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
freeVersion = Version.isFreeVersion(app);
SRTMPlugin srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
srtmNeedsInstallation = srtmPlugin == null || srtmPlugin.needsInstallation();
}

View file

@ -352,9 +352,7 @@ public class DownloadResources extends DownloadResourceGroup {
continue;
}
if (ii.getType() == DownloadActivityType.DEPTH_CONTOUR_FILE) {
if (InAppPurchaseHelper.isDepthContoursPurchased(app)
|| InAppPurchaseHelper.isSubscribedToLiveUpdates(app)
|| nauticalMaps.size() == 0) {
if (InAppPurchaseHelper.isDepthContoursPurchased(app) || nauticalMaps.size() == 0) {
nauticalMaps.addItem(ii);
}
continue;

View file

@ -217,7 +217,7 @@ public class DownloadValidationManager {
AlertDialog.Builder msg = new AlertDialog.Builder(getActivity());
msg.setTitle(R.string.free_version_title);
msg.setMessage(msgTx);
if (Version.isMarketEnabled(getMyApplication())) {
if (Version.isMarketEnabled()) {
msg.setPositiveButton(R.string.install_paid, new DialogInterface.OnClickListener() {
@Override

View file

@ -134,8 +134,7 @@ public class ItemViewHolder {
srtmDisabled = context.isSrtmDisabled();
nauticalPluginDisabled = context.isNauticalPluginDisabled();
srtmNeedsInstallation = context.isSrtmNeedsInstallation();
depthContoursPurchased = InAppPurchaseHelper.isDepthContoursPurchased(context.getMyApplication())
|| InAppPurchaseHelper.isSubscribedToLiveUpdates(context.getMyApplication());
depthContoursPurchased = InAppPurchaseHelper.isDepthContoursPurchased(context.getMyApplication());
}
public void bindIndexItem(final IndexItem indexItem) {

View file

@ -43,10 +43,10 @@ public class DayNightHelper implements SensorEventListener {
private static final Log log = PlatformUtil.getLog(DayNightHelper.class);
private final OsmandApplication osmandApplication;
private final OsmandApplication app;
public DayNightHelper(OsmandApplication osmandApplication) {
this.osmandApplication = osmandApplication;
public DayNightHelper(OsmandApplication app) {
this.app = app;
}
private DayNightHelper listener;
@ -56,11 +56,11 @@ public class DayNightHelper implements SensorEventListener {
private StateChangedListener<Boolean> sensorStateListener;
public boolean isNightModeForMapControls() {
return isNightModeForMapControlsForProfile(osmandApplication.getSettings().APPLICATION_MODE.get());
return isNightModeForMapControlsForProfile(app.getSettings().APPLICATION_MODE.get());
}
public boolean isNightModeForMapControlsForProfile(ApplicationMode mode) {
if (osmandApplication.getSettings().isLightContentForMode(mode)) {
if (app.getSettings().isLightContentForMode(mode)) {
return isNightModeForProfile(mode);
} else {
return true;
@ -72,11 +72,11 @@ public class DayNightHelper implements SensorEventListener {
* @return true if day is supposed to be
*/
public boolean isNightMode() {
return isNightModeForProfile(osmandApplication.getSettings().APPLICATION_MODE.get());
return isNightModeForProfile(app.getSettings().APPLICATION_MODE.get());
}
public boolean isNightModeForProfile(ApplicationMode mode) {
DayNightMode dayNightMode = osmandApplication.getSettings().DAYNIGHT_MODE.getModeValue(mode);
DayNightMode dayNightMode = app.getSettings().DAYNIGHT_MODE.getModeValue(mode);
if (dayNightMode.isDay()) {
return false;
} else if (dayNightMode.isNight()) {
@ -108,24 +108,23 @@ public class DayNightHelper implements SensorEventListener {
}
public SunriseSunset getSunriseSunset() {
Location lastKnownLocation = osmandApplication.getLocationProvider().getLastKnownLocation();
if(lastKnownLocation == null) {
lastKnownLocation = osmandApplication.getLocationProvider().getFirstTimeRunDefaultLocation();
Location lastKnownLocation = app.getLocationProvider().getLastKnownLocation();
if (lastKnownLocation == null) {
lastKnownLocation = app.getLocationProvider().getFirstTimeRunDefaultLocation(null);
}
if (lastKnownLocation == null) {
return null;
}
double longitude = lastKnownLocation.getLongitude();
Date actualTime = new Date();
SunriseSunset daynightSwitch = new SunriseSunset(lastKnownLocation.getLatitude(),
return new SunriseSunset(lastKnownLocation.getLatitude(),
longitude < 0 ? 360 + longitude : longitude,
actualTime, TimeZone.getDefault());
return daynightSwitch;
}
public void stopSensorIfNeeded() {
if (listener != null) {
SensorManager mSensorManager = (SensorManager) osmandApplication
SensorManager mSensorManager = (SensorManager) app
.getSystemService(Context.SENSOR_SERVICE);
Sensor mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
mSensorManager.unregisterListener(listener, mLight);
@ -135,9 +134,9 @@ public class DayNightHelper implements SensorEventListener {
public void startSensorIfNeeded(StateChangedListener<Boolean> sensorStateListener) {
this.sensorStateListener = sensorStateListener;
DayNightMode dayNightMode = osmandApplication.getSettings().DAYNIGHT_MODE.get();
DayNightMode dayNightMode = app.getSettings().DAYNIGHT_MODE.get();
if (listener == null && dayNightMode.isSensor()) {
SensorManager mSensorManager = (SensorManager) osmandApplication.getSystemService(Context.SENSOR_SERVICE);
SensorManager mSensorManager = (SensorManager) app.getSystemService(Context.SENSOR_SERVICE);
Sensor mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
List<Sensor> list = mSensorManager.getSensorList(Sensor.TYPE_LIGHT);
log.info("Light sensors:" + list.size()); //$NON-NLS-1$

View file

@ -0,0 +1,30 @@
package net.osmand.plus.helpers;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.osmand.Location;
import java.util.List;
public abstract class LocationServiceHelper {
public static abstract class LocationCallback {
public void onLocationResult(@NonNull List<Location> locations) {
}
public void onLocationAvailability(boolean locationAvailable) {
}
}
public abstract void requestLocationUpdates(@NonNull LocationCallback locationCallback);
public abstract boolean isNetworkLocationUpdatesSupported();
public abstract void requestNetworkLocationUpdates(@NonNull LocationCallback locationCallback);
public abstract void removeLocationUpdates();
public abstract Location getFirstTimeRunDefaultLocation(@Nullable LocationCallback locationCallback);
}

View file

@ -153,11 +153,15 @@ public abstract class InAppPurchaseHelper {
}
public static boolean isDepthContoursPurchased(@NonNull OsmandApplication ctx) {
return Version.isDeveloperBuild(ctx) || ctx.getSettings().DEPTH_CONTOURS_PURCHASED.get();
return Version.isDeveloperBuild(ctx)
|| Version.isPaidVersion(ctx)
|| ctx.getSettings().DEPTH_CONTOURS_PURCHASED.get();
}
public static boolean isContourLinesPurchased(@NonNull OsmandApplication ctx) {
return Version.isDeveloperBuild(ctx) || ctx.getSettings().CONTOUR_LINES_PURCHASED.get();
return Version.isDeveloperBuild(ctx)
|| Version.isPaidVersion(ctx)
|| ctx.getSettings().CONTOUR_LINES_PURCHASED.get();
}
public InAppPurchases getInAppPurchases() {
@ -212,7 +216,7 @@ public abstract class InAppPurchaseHelper {
}
protected void exec(final @NonNull InAppPurchaseTaskType taskType, final @NonNull InAppCommand command) {
if (isDeveloperVersion || (!Version.isGooglePlayEnabled(ctx) && !Version.isHuawei(ctx))) {
if (isDeveloperVersion || (!Version.isGooglePlayEnabled() && !Version.isHuawei())) {
notifyDismissProgress(taskType);
stop(true);
return;

View file

@ -85,7 +85,7 @@ public class MapDataMenuController extends MenuController {
}
srtmDisabled = OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) == null
&& !InAppPurchaseHelper.isSubscribedToLiveUpdates(app);
&& !InAppPurchaseHelper.isContourLinesPurchased(app);
OsmandPlugin srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
srtmNeedsInstallation = srtmPlugin == null || srtmPlugin.needsInstallation();

View file

@ -100,12 +100,12 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
public void updateLocation(Location location) {
liveMonitoringHelper.updateLocation(location);
}
@Override
public int getLogoResourceId() {
return R.drawable.ic_action_gps_info;
}
@Override
public Drawable getAssetResourceImage() {
return app.getUIUtilities().getIcon(R.drawable.trip_recording);
@ -140,7 +140,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
private void registerWidget(MapActivity activity) {
MapInfoLayer layer = activity.getMapLayers().getMapInfoLayer();
monitoringControl = createMonitoringControl(activity);
layer.registerSideWidget(monitoringControl,
R.drawable.ic_action_play_dark, R.string.map_widget_monitoring, "monitoring", false, 30);
layer.recreateControls();
@ -161,7 +161,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
}
}
}
public static final int[] SECONDS = new int[] {0, 1, 2, 3, 5, 10, 15, 20, 30, 60, 90};
public static final int[] MINUTES = new int[] {2, 3, 5};
public static final int[] MAX_INTERVAL_TO_SEND_MINUTES = new int[] {1, 2, 5, 10, 15, 20, 30, 60, 90, 2 * 60, 3 * 60, 4 * 60, 6 * 60, 12 * 60, 24 * 60};
@ -287,7 +287,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
controlDialog(map, true);
}
});
return monitoringControl;
}
@ -422,7 +422,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
public void saveCurrentTrack() {
saveCurrentTrack(null, null);
}
public void saveCurrentTrack(@Nullable final Runnable onComplete) {
saveCurrentTrack(onComplete, null);
}
@ -464,7 +464,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
SaveGPXBottomSheetFragment.showInstance(((FragmentActivity) a).getSupportFragmentManager(), result.getFilenames());
}
}
if (onComplete != null) {
onComplete.run();
}
@ -505,15 +505,9 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
};
if (choice.value || map == null) {
runnable.run();
} else {
showIntervalChooseDialog(map, app.getString(R.string.save_track_interval_globally) + " : %s",
app.getString(R.string.save_track_to_gpx_globally), SECONDS, MINUTES, choice, vs, showTrackSelection,
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runnable.run();
}
});
} else if (map instanceof FragmentActivity) {
FragmentActivity activity = (FragmentActivity) map;
TripRecordingBottomSheet.showInstance(activity.getSupportFragmentManager());
}
}
@ -588,7 +582,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
tv.setText(String.format(patternMsg, s));
}
});
for (int i = 0; i < secondsLength + minutesLength - 1; i++) {
if (i < secondsLength) {
if (v.value <= seconds[i] * 1000) {

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