Merge branch 'master' into Combine-use-elevation-data
This commit is contained in:
commit
111e5cb366
79 changed files with 1481 additions and 499 deletions
|
@ -1,5 +1,6 @@
|
||||||
apply plugin: 'java'
|
apply plugin: 'java'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
apply plugin: 'ivy-publish'
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
android
|
android
|
||||||
|
@ -85,12 +86,22 @@ artifacts {
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
repositories {
|
||||||
|
ivy {
|
||||||
|
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
|
||||||
|
}
|
||||||
|
}
|
||||||
publications {
|
publications {
|
||||||
maven(MavenPublication) {
|
maven(MavenPublication) {
|
||||||
artifactId "osmand-base"
|
artifactId "osmand-base"
|
||||||
from components.java
|
from components.java
|
||||||
}
|
}
|
||||||
}
|
ivyJava(IvyPublication) {
|
||||||
|
artifact androidJar {
|
||||||
|
classifier 'android'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
|
@ -39,6 +39,11 @@ public class Amenity extends MapObject {
|
||||||
public static final String REF = "ref";
|
public static final String REF = "ref";
|
||||||
public static final String OSM_DELETE_VALUE = "delete";
|
public static final String OSM_DELETE_VALUE = "delete";
|
||||||
public static final String OSM_DELETE_TAG = "osmand_change";
|
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_AGGR_PART = "is_aggr_part";
|
||||||
|
public static final String CONTENT_JSON = "content_json";
|
||||||
|
|
||||||
|
|
||||||
private String subType;
|
private String subType;
|
||||||
private PoiCategory type;
|
private PoiCategory type;
|
||||||
|
|
2
OsmAnd/.gitignore
vendored
2
OsmAnd/.gitignore
vendored
|
@ -2,7 +2,7 @@ gradle
|
||||||
gradlew
|
gradlew
|
||||||
gradlew.bat
|
gradlew.bat
|
||||||
|
|
||||||
|
/net.osmand
|
||||||
aarDependencies
|
aarDependencies
|
||||||
libs/android*.jar
|
libs/android*.jar
|
||||||
libs/com.*.jar
|
libs/com.*.jar
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
apply plugin: 'ivy-publish'
|
||||||
|
|
||||||
task printc {
|
task printc {
|
||||||
configurations.each { if(it.isCanBeResolved()) println it.name }
|
configurations.each { if(it.isCanBeResolved()) println it.name }
|
||||||
|
@ -17,6 +18,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
|
tasks.lint.enabled = false
|
||||||
abortOnError false
|
abortOnError false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,8 +44,6 @@ android {
|
||||||
res.srcDirs = ["res"]
|
res.srcDirs = ["res"]
|
||||||
assets.srcDirs = ["assets"]
|
assets.srcDirs = ["assets"]
|
||||||
}
|
}
|
||||||
debug {
|
|
||||||
}
|
|
||||||
|
|
||||||
legacy {
|
legacy {
|
||||||
jniLibs.srcDirs = ["libc++"]
|
jniLibs.srcDirs = ["libc++"]
|
||||||
|
@ -339,24 +339,47 @@ task appStart(type: Exec) {
|
||||||
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
|
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uploading artifacts to local path
|
project.afterEvaluate {
|
||||||
group = "net.osmand"
|
publishing {
|
||||||
uploadArchives {
|
repositories {
|
||||||
repositories.ivy {
|
ivy {
|
||||||
// credentials {
|
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
|
||||||
// username ""
|
}
|
||||||
// password ""
|
}
|
||||||
// }
|
publications {
|
||||||
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
|
aar(IvyPublication) {
|
||||||
layout "pattern" , {
|
artifact bundleLegacyX86DebugAar {
|
||||||
artifact "[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
classifier 'legacyX86Debug'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyX86ReleaseAar {
|
||||||
|
classifier 'legacyX86Release'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArm64DebugAar {
|
||||||
|
classifier 'legacyArm64Debug'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArm64ReleaseAar {
|
||||||
|
classifier 'legacyArm64Release'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArmonlyDebugAar {
|
||||||
|
classifier 'legacyArmonlyDebug'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArmonlyReleaseAar {
|
||||||
|
classifier 'legacyArmonlyRelease'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArmv7DebugAar {
|
||||||
|
classifier 'legacyArmv7Debug'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyArmv7ReleaseAar {
|
||||||
|
classifier 'legacyArmv7Release'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyFatDebugAar {
|
||||||
|
classifier 'legacyFatDebug'
|
||||||
|
}
|
||||||
|
artifact bundleLegacyFatReleaseAar {
|
||||||
|
classifier 'legacyFatRelease'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// def gitInfo = "git describe --long".execute().text.trim()
|
|
||||||
// def parsedGitInfo = Pattern.compile("v(\\d+\\.\\d+)-([\\d.]+)-(\\w+)").matcher(gitInfo)
|
|
||||||
// assert parsedGitInfo.matches()
|
|
||||||
// version = parsedGitInfo.group(1) + "-SNAPSHOT"
|
|
||||||
version = "1.0-SNAPSHOT"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +393,7 @@ dependencies {
|
||||||
implementation 'com.google.android.material:material:1.2.1'
|
implementation 'com.google.android.material:material:1.2.1'
|
||||||
implementation 'androidx.browser:browser:1.0.0'
|
implementation 'androidx.browser:browser:1.0.0'
|
||||||
implementation 'androidx.preference:preference:1.1.0'
|
implementation 'androidx.preference:preference:1.1.0'
|
||||||
implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
|
compileOnly fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
|
||||||
|
|
||||||
implementation group: 'commons-logging', name: 'commons-logging', version: '1.2'
|
implementation group: 'commons-logging', name: 'commons-logging', version: '1.2'
|
||||||
implementation 'commons-codec:commons-codec:1.11'
|
implementation 'commons-codec:commons-codec:1.11'
|
||||||
|
|
10
OsmAnd/res/animator/appbar_always_elevated.xml
Normal file
10
OsmAnd/res/animator/appbar_always_elevated.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
<item>
|
||||||
|
<objectAnimator
|
||||||
|
android:propertyName="elevation"
|
||||||
|
android:valueTo="@dimen/design_appbar_elevation"
|
||||||
|
android:valueType="floatType" />
|
||||||
|
</item>
|
||||||
|
</selector>
|
|
@ -33,7 +33,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="1"
|
android:maxLines="2"
|
||||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
tools:text="Some title"/>
|
tools:text="Some title"/>
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom"
|
||||||
android:text="@string/export_not_enough_space"
|
android:text="@string/export_not_enough_space"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
|
|
@ -75,7 +75,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/route_info_bg"
|
android:background="?attr/route_info_bg"
|
||||||
android:foreground="@drawable/bg_contextmenu_shadow"
|
|
||||||
android:foregroundGravity="top|fill_horizontal">
|
android:foregroundGravity="top|fill_horizontal">
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
|
|
|
@ -23,16 +23,22 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:background="?attr/bg_color"
|
|
||||||
android:gravity="center"
|
|
||||||
android:minHeight="@dimen/bottom_sheet_title_height"
|
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/buttons_shadow"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/bottom_sheet_top_shadow_height"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:src="@drawable/shadow" />
|
||||||
|
|
||||||
<include layout="@layout/divider" />
|
<include layout="@layout/divider" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/bg_color"
|
||||||
|
android:minHeight="@dimen/measurement_tool_controls_height"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -82,6 +88,7 @@
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/continue_button_container"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="@dimen/content_padding_half"
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
@ -104,7 +111,8 @@
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@android:color/transparent">
|
android:background="@android:color/transparent"
|
||||||
|
android:stateListAnimator="@animator/appbar_always_elevated">
|
||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||||
android:id="@+id/toolbar_layout"
|
android:id="@+id/toolbar_layout"
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
android:background="?attr/bg_color">
|
android:background="?attr/bg_color">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/item_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
|
@ -30,9 +31,7 @@
|
||||||
android:layout_width="@dimen/standard_icon_size"
|
android:layout_width="@dimen/standard_icon_size"
|
||||||
android:layout_height="@dimen/standard_icon_size"
|
android:layout_height="@dimen/standard_icon_size"
|
||||||
android:layout_marginLeft="@dimen/content_padding"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:layout_marginTop="@dimen/bottom_sheet_icon_margin"
|
|
||||||
android:layout_marginRight="@dimen/content_padding"
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
android:layout_marginBottom="@dimen/bottom_sheet_icon_margin"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_arrow_down" />
|
osmand:srcCompat="@drawable/ic_action_arrow_down" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -48,6 +47,7 @@
|
||||||
android:id="@+id/title_tv"
|
android:id="@+id/title_tv"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="@dimen/subHeaderPadding"
|
||||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
@ -69,9 +69,7 @@
|
||||||
<View
|
<View
|
||||||
android:id="@+id/vertical_divider"
|
android:id="@+id/vertical_divider"
|
||||||
android:layout_width="1dp"
|
android:layout_width="1dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="@dimen/dialog_button_height"
|
||||||
android:layout_marginTop="@dimen/setting_profile_item_switch_margin"
|
|
||||||
android:layout_marginBottom="@dimen/setting_profile_item_switch_margin"
|
|
||||||
android:background="?attr/list_divider" />
|
android:background="?attr/list_divider" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
@ -79,6 +77,8 @@
|
||||||
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
||||||
android:layout_width="@dimen/acceptable_touch_radius"
|
android:layout_width="@dimen/acceptable_touch_radius"
|
||||||
android:layout_height="@dimen/acceptable_touch_radius"
|
android:layout_height="@dimen/acceptable_touch_radius"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
android:layout_marginEnd="@dimen/text_margin_small"
|
android:layout_marginEnd="@dimen/text_margin_small"
|
||||||
android:layout_marginRight="@dimen/text_margin_small">
|
android:layout_marginRight="@dimen/text_margin_small">
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
<string name="poi_police">شرطة</string>
|
<string name="poi_police">شرطة</string>
|
||||||
<string name="poi_artwork_type_fountain">نوع العمل الفني : نافورة</string>
|
<string name="poi_artwork_type_fountain">نوع العمل الفني : نافورة</string>
|
||||||
<string name="poi_craft_carpenter">نجار</string>
|
<string name="poi_craft_carpenter">نجار</string>
|
||||||
<string name="poi_craft_plumber">سباك</string>
|
<string name="poi_craft_plumber">سباكة</string>
|
||||||
<string name="poi_car">معرض سيارات</string>
|
<string name="poi_car">معرض سيارات</string>
|
||||||
<string name="poi_car_repair">ورشة تصليح السيارات</string>
|
<string name="poi_car_repair">ورشة تصليح السيارات</string>
|
||||||
<string name="poi_recycling_printer_cartridges">خراطيش الطابعة</string>
|
<string name="poi_recycling_printer_cartridges">خراطيش الطابعة</string>
|
||||||
|
@ -702,7 +702,7 @@
|
||||||
<string name="poi_beauty_salon_nails">تجميل الاظافر</string>
|
<string name="poi_beauty_salon_nails">تجميل الاظافر</string>
|
||||||
<string name="poi_massage">صالون تدليك</string>
|
<string name="poi_massage">صالون تدليك</string>
|
||||||
<string name="poi_tattoo">صالون وشم</string>
|
<string name="poi_tattoo">صالون وشم</string>
|
||||||
<string name="poi_dry_cleaning">التنظيف الجاف</string>
|
<string name="poi_dry_cleaning">مغسلة ملابس</string>
|
||||||
<string name="poi_laundry">غسيل الملابس</string>
|
<string name="poi_laundry">غسيل الملابس</string>
|
||||||
<string name="poi_car_rental">تأجير سيارات</string>
|
<string name="poi_car_rental">تأجير سيارات</string>
|
||||||
<string name="poi_car_sharing">مشاركة السيارات</string>
|
<string name="poi_car_sharing">مشاركة السيارات</string>
|
||||||
|
@ -1369,7 +1369,7 @@
|
||||||
<string name="poi_health_specialty_social_paediatrics_yes">طب الأطفال الاجتماعي</string>
|
<string name="poi_health_specialty_social_paediatrics_yes">طب الأطفال الاجتماعي</string>
|
||||||
<string name="poi_health_specialty_obstetrics_caesarean_section_yes">طب التوليد (القيصرية)</string>
|
<string name="poi_health_specialty_obstetrics_caesarean_section_yes">طب التوليد (القيصرية)</string>
|
||||||
<string name="poi_health_specialty_addiction_medicine_yes">طب الإدمان</string>
|
<string name="poi_health_specialty_addiction_medicine_yes">طب الإدمان</string>
|
||||||
<string name="poi_health_specialty_optometry_yes">بصريات</string>
|
<string name="poi_health_specialty_optometry_yes">نظارات/بصريات</string>
|
||||||
<string name="poi_health_specialty_speech_therapy_yes">علاج النطق</string>
|
<string name="poi_health_specialty_speech_therapy_yes">علاج النطق</string>
|
||||||
<string name="poi_health_specialty_sports_medicine_yes">الطب الرياضي</string>
|
<string name="poi_health_specialty_sports_medicine_yes">الطب الرياضي</string>
|
||||||
<string name="poi_health_specialty_acupuncture_yes">الوخز بالإبر</string>
|
<string name="poi_health_specialty_acupuncture_yes">الوخز بالإبر</string>
|
||||||
|
@ -1739,7 +1739,7 @@
|
||||||
<string name="poi_craft_plasterer">جصاص</string>
|
<string name="poi_craft_plasterer">جصاص</string>
|
||||||
<string name="poi_craft_parquet_layer">طبقة الباركيه</string>
|
<string name="poi_craft_parquet_layer">طبقة الباركيه</string>
|
||||||
<string name="poi_craft_painter">دهان</string>
|
<string name="poi_craft_painter">دهان</string>
|
||||||
<string name="poi_craft_optician">أخصائي بصريات</string>
|
<string name="poi_craft_optician">محل نظارات/بصريات</string>
|
||||||
<string name="poi_craft_metal_construction">حرفة الصناعات المعدنية</string>
|
<string name="poi_craft_metal_construction">حرفة الصناعات المعدنية</string>
|
||||||
<string name="poi_craft_key_cutter">ناسخ مفاتيح</string>
|
<string name="poi_craft_key_cutter">ناسخ مفاتيح</string>
|
||||||
<string name="poi_craft_locksmith">صانع ومصلح المفاتيح</string>
|
<string name="poi_craft_locksmith">صانع ومصلح المفاتيح</string>
|
||||||
|
@ -2116,7 +2116,7 @@
|
||||||
<string name="poi_piste_difficulty_easy">سهل</string>
|
<string name="poi_piste_difficulty_easy">سهل</string>
|
||||||
<string name="poi_rtsa_scale">مقياس RTSA</string>
|
<string name="poi_rtsa_scale">مقياس RTSA</string>
|
||||||
<string name="poi_windfall">متضرره من الرياح</string>
|
<string name="poi_windfall">متضرره من الرياح</string>
|
||||||
<string name="poi_scrub">فيضة/شجيرات ربيعية</string>
|
<string name="poi_scrub">فيضة/روضة</string>
|
||||||
<string name="poi_heath">براح</string>
|
<string name="poi_heath">براح</string>
|
||||||
<string name="poi_railway_level_crossing">مستوى العبور</string>
|
<string name="poi_railway_level_crossing">مستوى العبور</string>
|
||||||
<string name="poi_railway_crossing">معبر خط القطار</string>
|
<string name="poi_railway_crossing">معبر خط القطار</string>
|
||||||
|
|
|
@ -3986,4 +3986,5 @@
|
||||||
<string name="use_dev_url">استخدم dev.openstreetmap.org</string>
|
<string name="use_dev_url">استخدم dev.openstreetmap.org</string>
|
||||||
<string name="cannot_upload_image">لا يمكن تحميل الصورة، من فضلك، حاول مرة أخرى في وقت لاحق</string>
|
<string name="cannot_upload_image">لا يمكن تحميل الصورة، من فضلك، حاول مرة أخرى في وقت لاحق</string>
|
||||||
<string name="select_picture">تحديد صورة</string>
|
<string name="select_picture">تحديد صورة</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -233,7 +233,7 @@
|
||||||
<string name="select_animate_speedup">Velocitat de simulació de la ruta:</string>
|
<string name="select_animate_speedup">Velocitat de simulació de la ruta:</string>
|
||||||
<string name="select_navigation_mode">Mitjà de transport:</string>
|
<string name="select_navigation_mode">Mitjà de transport:</string>
|
||||||
<string name="offline_edition">Edició fora de línia</string>
|
<string name="offline_edition">Edició fora de línia</string>
|
||||||
<string name="offline_edition_descr">Utilitza sempre l\'edició fora de línia.</string>
|
<string name="offline_edition_descr">"En desconnexió la edició està activada però llavors els canvis es desen d\'entrada localment i es pujaran quan es demani; altrament els canvis s\'actualitzen immediatament."</string>
|
||||||
<string name="local_openstreetmap_descr_title">Edició asincrònica de l\'OSM:</string>
|
<string name="local_openstreetmap_descr_title">Edició asincrònica de l\'OSM:</string>
|
||||||
<string name="accessibility_mode_descr">Activa les funcions per a usuaris amb discapacitats.</string>
|
<string name="accessibility_mode_descr">Activa les funcions per a usuaris amb discapacitats.</string>
|
||||||
<string name="update_poi_does_not_change_indexes">Els canvis realitzats en els PDI a l\'aplicació no afecten els fitxers de mapa baixats, els canvis es desen en un fitxer local.</string>
|
<string name="update_poi_does_not_change_indexes">Els canvis realitzats en els PDI a l\'aplicació no afecten els fitxers de mapa baixats, els canvis es desen en un fitxer local.</string>
|
||||||
|
@ -393,7 +393,7 @@
|
||||||
\n- Indicacions de carril, velocitat màxima permesa, veus enregistrades i sintetitzades
|
\n- Indicacions de carril, velocitat màxima permesa, veus enregistrades i sintetitzades
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="rendering_attr_contourLines_description">Seleccioneu el nivell mínim de zoom per mostrar el mapa si està disponible. Caldrà el fitxer SRTM separat:</string>
|
<string name="rendering_attr_contourLines_description">Seleccioneu el nivell mínim de zoom per mostrar el mapa si està disponible. Caldrà el fitxer SRTM separat:</string>
|
||||||
<string name="osmand_development_plugin_description">Aquest connector mostra la configuració de característiques per al desenvolupament i depuració com la verificació o simulació de rutes, el rendiment del renderitzat o les indicacions de veu. Aquestes configuracions s\'adrecen a desenvolupadors i no són d\'utilitat per a un usuari normal.</string>
|
<string name="osmand_development_plugin_description">Configuració de característiques per al desenvolupament i depuració, com simulació de navegació, rendiment de renderitzat o les indicacions de veu. Adreçat a desenvolupadorsimés que a usuaris normals de l\'aplicació.</string>
|
||||||
<string name="accessibility_default">En consonància amb la configuració del sistema Android</string>
|
<string name="accessibility_default">En consonància amb la configuració del sistema Android</string>
|
||||||
<string name="zoomIs">El nivell de zoom és</string>
|
<string name="zoomIs">El nivell de zoom és</string>
|
||||||
<string name="settings_direction_style_descr">Trieu l\'estil per indicar direccions relatives mentre s\'està en moviment</string>
|
<string name="settings_direction_style_descr">Trieu l\'estil per indicar direccions relatives mentre s\'està en moviment</string>
|
||||||
|
@ -1872,8 +1872,8 @@
|
||||||
<string name="download_files_error_not_enough_space">No hi ha prou espai!
|
<string name="download_files_error_not_enough_space">No hi ha prou espai!
|
||||||
\nCalen {3} MB temporalment i {1} MB de permanents.
|
\nCalen {3} MB temporalment i {1} MB de permanents.
|
||||||
\n(Només es disposa de {2} MB).</string>
|
\n(Només es disposa de {2} MB).</string>
|
||||||
<string name="download_files_question_space_with_temp">Voleu baixar {0} fitxer(s)\?
|
<string name="download_files_question_space_with_temp">Voleu baixar {0} fitxer(s)\?
|
||||||
\nS\'utilitzen {3} MB temporalment i {1} MB permanentment. (De {2} MB).</string>
|
\nS\'utilitzaran {3} MB temporalment i {1} MB permanentment. (De {2} MB).</string>
|
||||||
<string name="shared_string_move_up">Puja ↑</string>
|
<string name="shared_string_move_up">Puja ↑</string>
|
||||||
<string name="shared_string_move_down">Baixa ↓</string>
|
<string name="shared_string_move_down">Baixa ↓</string>
|
||||||
<string name="avoid_road">Evita la via</string>
|
<string name="avoid_road">Evita la via</string>
|
||||||
|
@ -2151,7 +2151,7 @@
|
||||||
<string name="quick_action_map_source">Canvia l\'origen del mapa</string>
|
<string name="quick_action_map_source">Canvia l\'origen del mapa</string>
|
||||||
<string name="quick_action_map_source_title">Orígens de mapa</string>
|
<string name="quick_action_map_source_title">Orígens de mapa</string>
|
||||||
<string name="quick_action_map_source_action">Afegeix origen del mapa</string>
|
<string name="quick_action_map_source_action">Afegeix origen del mapa</string>
|
||||||
<string name="quick_action_map_source_switch">L\'origen del mapa s\'ha canviat al de \"%s\".</string>
|
<string name="quick_action_map_source_switch">L\'origen del mapa s\'ha canviat a \"%s\".</string>
|
||||||
<string name="quick_action_btn_tutorial_title">Modifica la posició del botó</string>
|
<string name="quick_action_btn_tutorial_title">Modifica la posició del botó</string>
|
||||||
<string name="quick_action_btn_tutorial_descr">Si premeu i arrossegueu alhora, el botó canvia la seva posició a la pantalla.</string>
|
<string name="quick_action_btn_tutorial_descr">Si premeu i arrossegueu alhora, el botó canvia la seva posició a la pantalla.</string>
|
||||||
<string name="quick_action_interim_dialog">Mostra un diàleg provisional</string>
|
<string name="quick_action_interim_dialog">Mostra un diàleg provisional</string>
|
||||||
|
@ -2364,7 +2364,8 @@
|
||||||
\n• Representació i navegació a mida per ciclistes i vianants
|
\n• Representació i navegació a mida per ciclistes i vianants
|
||||||
\n• Indicació opcional de les parades del transport públic (autobús, tramvia, tren), incloent-hi noms de línia
|
\n• Indicació opcional de les parades del transport públic (autobús, tramvia, tren), incloent-hi noms de línia
|
||||||
\n• Enregistrament opcional del trajecte en un fitxer GPX local o a un servei a la xarxa
|
\n• Enregistrament opcional del trajecte en un fitxer GPX local o a un servei a la xarxa
|
||||||
\n• Indicació opcional de la velocitat i l\'altitud • Visualització de corbes de nivell i ombrejat de relleu (requereix connector)</string>
|
\n• Indicació opcional de la velocitat i l\'altitud
|
||||||
|
\n• Visualització de corbes de nivell i ombrejat de relleu (requereix connector addicional)</string>
|
||||||
<string name="osmand_plus_extended_description_part7">Col·laboreu directament a OSM
|
<string name="osmand_plus_extended_description_part7">Col·laboreu directament a OSM
|
||||||
\n• Notifiqueu errors en les dades
|
\n• Notifiqueu errors en les dades
|
||||||
\n• Pugeu traces GPX directament a OSM des de l\'aplicació
|
\n• Pugeu traces GPX directament a OSM des de l\'aplicació
|
||||||
|
@ -3163,7 +3164,7 @@
|
||||||
<string name="rendering_attr_highway_class_track_grade4_name">Grau 4</string>
|
<string name="rendering_attr_highway_class_track_grade4_name">Grau 4</string>
|
||||||
<string name="rendering_attr_highway_class_track_grade5_name">Grau 5</string>
|
<string name="rendering_attr_highway_class_track_grade5_name">Grau 5</string>
|
||||||
<string name="external_input_device">Dispositius d\'entrada externs</string>
|
<string name="external_input_device">Dispositius d\'entrada externs</string>
|
||||||
<string name="external_input_device_descr">Seleccioneu un aparell com a teclat genèric o WunderLINQ per a controls externs.</string>
|
<string name="external_input_device_descr">Seleccioneu un aparell de control extern, com un teclat o un WunderLINQ.</string>
|
||||||
<string name="sett_no_ext_input">Cap</string>
|
<string name="sett_no_ext_input">Cap</string>
|
||||||
<string name="sett_generic_ext_input">Teclat</string>
|
<string name="sett_generic_ext_input">Teclat</string>
|
||||||
<string name="sett_wunderlinq_ext_input">WunderLINQ</string>
|
<string name="sett_wunderlinq_ext_input">WunderLINQ</string>
|
||||||
|
@ -3869,4 +3870,37 @@
|
||||||
<string name="lenght_limit_description">Proporcioneu la llargada del vostre vehicle, pot haver-hi rutes restringides als vehicles llargs.</string>
|
<string name="lenght_limit_description">Proporcioneu la llargada del vostre vehicle, pot haver-hi rutes restringides als vehicles llargs.</string>
|
||||||
<string name="gpx_parse_error">No s\'ha generat correctament l\'arxiu GPX. Indiqueu-ho a l\'equip de suport per continuar investigant.</string>
|
<string name="gpx_parse_error">No s\'ha generat correctament l\'arxiu GPX. Indiqueu-ho a l\'equip de suport per continuar investigant.</string>
|
||||||
<string name="save_track_to_gpx">Enregistra automàticament la traça durant la navegació</string>
|
<string name="save_track_to_gpx">Enregistra automàticament la traça durant la navegació</string>
|
||||||
|
<string name="message_you_need_add_two_points_to_show_graphs">Cal afegir almenys dos punts</string>
|
||||||
|
<string name="use_dev_url_descr">Canvieu per utilitzar dev.openstreetmap.org en lloc d\'openstreetmap.org en provar la pujada de nota OSM / PDI / GPX.</string>
|
||||||
|
<string name="osm_edit_close_note">Tanca la nota d\'OSM</string>
|
||||||
|
<string name="osm_edit_comment_note">Comentari de la nota d\'OSM</string>
|
||||||
|
<string name="osm_login_descr">Podeu iniciar la sessió mitjançant el mètode segur OAuth o fer servir el vostre usuari i contrasenya.</string>
|
||||||
|
<string name="shared_string_add_photo">Afegeix foto</string>
|
||||||
|
<string name="register_on_openplacereviews">Registreu-vos a
|
||||||
|
\nOpenPlaceReviews.org</string>
|
||||||
|
<string name="register_on_openplacereviews_desc">Les fotos les proporciona el projecte OpenPlaceReviews.org de dades obertes. Per poder pujar les vostres fotos, cal que us registreu al lloc web.</string>
|
||||||
|
<string name="register_opr_create_new_account">Crea un compte nou</string>
|
||||||
|
<string name="register_opr_have_account">ja tinc un compte</string>
|
||||||
|
<string name="shared_string_search_history">Historial de cerques</string>
|
||||||
|
<string name="app_mode_kayak">Caiac</string>
|
||||||
|
<string name="app_mode_motorboat">Llanxa motora</string>
|
||||||
|
<string name="cannot_upload_image">No es pot carregar la imatge, torneu-ho a provar més tard</string>
|
||||||
|
<string name="select_picture">Seleccioneu la imatge</string>
|
||||||
|
<string name="shared_string_resources">Recursos</string>
|
||||||
|
<string name="approximate_file_size">Mida aproximada del fitxer</string>
|
||||||
|
<string name="select_data_to_export">Seleccioneu les dades a exportar cap el fitxer.</string>
|
||||||
|
<string name="file_size_needed_for_import">Necessari per a la importació</string>
|
||||||
|
<string name="export_not_enough_space_descr">El vostre dispositiu només té %1$s lliures. Allibereu espai o desseleccioneu alguns articles per exportar.</string>
|
||||||
|
<string name="export_not_enough_space">No hi ha prou espai</string>
|
||||||
|
<string name="select_groups_for_import">Seleccioneu els grups que s\'importaran.</string>
|
||||||
|
<string name="select_items_for_import">Seleccioneu els elements que s\'importaran.</string>
|
||||||
|
<string name="add_to_mapillary">Afegeix a Mapillary</string>
|
||||||
|
<string name="add_to_opr">Afegeix-ho a OpenPlaceReviews</string>
|
||||||
|
<string name="use_dev_url">Utilitza dev.openstreetmap.org</string>
|
||||||
|
<string name="add_photos_descr">OsmAnd mostra fotos de diverses fonts:
|
||||||
|
\nOpenPlaceReviews - fotos de PDIs;
|
||||||
|
\nMapillary: imatges a nivell de carrer;
|
||||||
|
\nWeb / Wikimedia: fotos dels PDIs especificats a les dades d\'OpenStreetMap.</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
|
<string name="icon_group_amenity">Equipament</string>
|
||||||
</resources>
|
</resources>
|
|
@ -117,9 +117,8 @@
|
||||||
<string name="osmand_service">Služba na pozadí</string>
|
<string name="osmand_service">Služba na pozadí</string>
|
||||||
<string name="osmand_service_descr">OsmAnd běží na pozadí i při vypnuté obrazovce.</string>
|
<string name="osmand_service_descr">OsmAnd běží na pozadí i při vypnuté obrazovce.</string>
|
||||||
<string name="download_files_not_enough_space">Nedostatek místa pro stažení %1$s MB dat (volné: %2$s).</string>
|
<string name="download_files_not_enough_space">Nedostatek místa pro stažení %1$s MB dat (volné: %2$s).</string>
|
||||||
<string name="download_files_question_space">Stáhnout {0} soubor(ů)?
|
<string name="download_files_question_space">Stáhnout {0} soubor(ů)\?
|
||||||
V úložišti je zapotřebí {1} MB.
|
\nBude použito {1} MB (z {2} MB).</string>
|
||||||
(Aktuálně je k dispozici {2} MB.)</string>
|
|
||||||
<string name="use_transparent_map_theme">Transparentní téma</string>
|
<string name="use_transparent_map_theme">Transparentní téma</string>
|
||||||
<string name="native_library_not_supported">Android native library není podporovaná na tomto zařízení.</string>
|
<string name="native_library_not_supported">Android native library není podporovaná na tomto zařízení.</string>
|
||||||
<string name="init_native_library">Probíhá inicializace Android native library…</string>
|
<string name="init_native_library">Probíhá inicializace Android native library…</string>
|
||||||
|
@ -535,14 +534,14 @@
|
||||||
<string name="osm_settings_descr">Určete nastavení OpenStreetMap.org (OSM) potřebné pro přispívání.</string>
|
<string name="osm_settings_descr">Určete nastavení OpenStreetMap.org (OSM) potřebné pro přispívání.</string>
|
||||||
<string name="data_settings_descr">Volba jazyka, stažení a aktualizace dat.</string>
|
<string name="data_settings_descr">Volba jazyka, stažení a aktualizace dat.</string>
|
||||||
<string name="data_settings">Data</string>
|
<string name="data_settings">Data</string>
|
||||||
<string name="osm_settings">Editace OSM</string>
|
<string name="osm_settings">Editace OpenStreetMap</string>
|
||||||
<string name="auto_zoom_map_descr">Zvětšení podle rychlosti pohybu (když je mapa synchronizována s aktuální pozicí).</string>
|
<string name="auto_zoom_map_descr">Zvětšení podle rychlosti pohybu (když je mapa synchronizována s aktuální pozicí).</string>
|
||||||
<string name="auto_zoom_map">Automatické zvětšení mapy</string>
|
<string name="auto_zoom_map">Automatické zvětšení mapy</string>
|
||||||
<string name="additional_settings">Další nastavení</string>
|
<string name="additional_settings">Další nastavení</string>
|
||||||
<string name="shared_string_settings">Nastavení</string>
|
<string name="shared_string_settings">Nastavení</string>
|
||||||
<string name="save_current_track_descr">Uložit aktuální trasu jako soubor GPX.</string>
|
<string name="save_current_track_descr">Uložit aktuální trasu jako soubor GPX.</string>
|
||||||
<string name="save_current_track">Uložit aktuální trasu</string>
|
<string name="save_current_track">Uložit aktuální trasu</string>
|
||||||
<string name="save_track_interval_descr">Vyberte interval pro ukládání trasy během navigace.</string>
|
<string name="save_track_interval_descr">Zadejte interval pro ukládání trasy během navigace</string>
|
||||||
<string name="save_track_interval">Interval ukládání trasy během navigace</string>
|
<string name="save_track_interval">Interval ukládání trasy během navigace</string>
|
||||||
<string name="save_track_to_gpx_descrp">Během navigace budou GPX trasy automaticky ukládány do adresáře s trasami.</string>
|
<string name="save_track_to_gpx_descrp">Během navigace budou GPX trasy automaticky ukládány do adresáře s trasami.</string>
|
||||||
<string name="update_tile">Aktualizovat mapu</string>
|
<string name="update_tile">Aktualizovat mapu</string>
|
||||||
|
@ -615,7 +614,7 @@
|
||||||
<string name="osb_comment_dialog_message">Hlášení</string>
|
<string name="osb_comment_dialog_message">Hlášení</string>
|
||||||
<string name="osb_comment_dialog_author">Jméno autora</string>
|
<string name="osb_comment_dialog_author">Jméno autora</string>
|
||||||
<string name="osb_comment_dialog_success">Komentář přidán</string>
|
<string name="osb_comment_dialog_success">Komentář přidán</string>
|
||||||
<string name="osb_comment_dialog_error">Nepodařilo se přidat komentář</string>
|
<string name="osb_comment_dialog_error">Nepodařilo se přidat komentář.</string>
|
||||||
<string name="poi_edit_title">Upravit POI</string>
|
<string name="poi_edit_title">Upravit POI</string>
|
||||||
<string name="poi_create_title">Vytvořit POI</string>
|
<string name="poi_create_title">Vytvořit POI</string>
|
||||||
<string name="poi_error_poi_not_found">Uzel nelze nalézt nebo vybavení sestává z několika uzlů, které ještě nejsou podporovány.</string>
|
<string name="poi_error_poi_not_found">Uzel nelze nalézt nebo vybavení sestává z několika uzlů, které ještě nejsou podporovány.</string>
|
||||||
|
@ -651,18 +650,18 @@
|
||||||
<string name="map_online_data_descr">Používat on-line mapy (ukládat dlaždice do mezipaměti na paměťové kartě).</string>
|
<string name="map_online_data_descr">Používat on-line mapy (ukládat dlaždice do mezipaměti na paměťové kartě).</string>
|
||||||
<string name="shared_string_online_maps">On-line mapy</string>
|
<string name="shared_string_online_maps">On-line mapy</string>
|
||||||
<string name="online_map_settings_descr">Nastavení rastrových překryvných nebo podkresových map.</string>
|
<string name="online_map_settings_descr">Nastavení rastrových překryvných nebo podkresových map.</string>
|
||||||
<string name="osmand_rastermaps_plugin_description">S tímto modulem můžete použít mnoho druhů on-line map (tzv. dlaždicové nebo rastrové mapy), od předdefinovaných OpenStreetMap dlaždic (jako Mapnik) až po satelitní snímky a speciální vrstvy jako mapy počasí, klimatické mapy, geologické mapy, stínované vrstvy, atd.
|
<string name="osmand_rastermaps_plugin_description">Získejte přístup k mnoha druhům on-line map (tzv. dlaždicové nebo rastrové mapy), od předdefinovaných OpenStreetMap dlaždic (jako Mapnik) až po satelitní snímky a speciální vrstvy jako mapy počasí, klimatické mapy, geologické mapy, stínované svahy, atd.
|
||||||
\n
|
\n
|
||||||
\nVšechny tyto mapy mohou být použity jako hlavní (základní) mapa na obrazovce OsmAnd nebo jako překryvná popř. podkladová mapa k jiné základní mapě (např. standardní OsmAnd off-line mapě). Pro zlepšení viditelnosti podkladových map je možné vypnout některé objekty z vektorových map OsmAnd, přes menu \'Nastavení mapy\'.
|
\n Všechny tyto mapy mohou být použity jako hlavní (základní) mapa na obrazovce OsmAnd nebo jako překryvná popř. podkladová mapa k jiné základní mapě (např. standardní OsmAnd off-line mapě). Pro zlepšení viditelnosti podkladových map je možné vypnout některé objekty z vektorových map OsmAnd, přes menu \'Nastavení mapy\'.
|
||||||
\n
|
\n
|
||||||
\nDlaždicové mapy můžete získat přímo z on-line zdrojů nebo si je můžete připravit pro off-line použití (zkopírovat ručně do datového adresáře OsmAnd) jako SQLite databázi, která může být vytvořena mnoha programy pro přípravu map.</string>
|
\n Dlaždicové mapy můžete získat přímo z on-line zdrojů nebo si je můžete připravit pro off-line použití (zkopírovat ručně do datového adresáře OsmAnd) jako SQLite databázi, která může být vytvořena mnoha programy pro přípravu map.</string>
|
||||||
<string name="osmand_background_plugin_description">Zobrazí nastavení pro zapnutí záznamu trasy a navigace na pozadí s pravidelným probouzením GPS zařízení (s vypnutou obrazovkou).</string>
|
<string name="osmand_background_plugin_description">Zobrazí nastavení pro zapnutí záznamu trasy a navigace na pozadí s pravidelným probouzením GPS zařízení (s vypnutou obrazovkou).</string>
|
||||||
<string name="osmand_accessibility_description">Tento modul zobrazí nastavení pro speciální funkce ulehčení přístupu přímo v OsmAnd. Například je možné měnit rychlost TTS hlasu, použít trackball na přibližování nebo například použít hlasové předčítání pro oznamování polohy.</string>
|
<string name="osmand_accessibility_description">Zobrazí funkce usnadnění přístupu přímo v OsmAnd. Například je možné měnit rychlost TTS hlasu, nastavit navigování pomocí D-padu, použít trackball na přibližování nebo použít hlasové předčítání pro oznamování polohy.</string>
|
||||||
<string name="osmand_development_plugin_description">Tento modul zobrazí nastavení vývojových a ladících funkcí, jako jsou simulace navigace, informace o rychlosti vykreslování nebo hlasová oznámení. Tato nastavení jsou určené pro vývojáře a nejsou potřebné pro běžné použití.</string>
|
<string name="osmand_development_plugin_description">Nastavení funkcí pro vývoj a ladění, jako jsou simulace navigace, informace o rychlosti vykreslování nebo hlasová oznámení. Tato nastavení jsou určená pro vývojáře a nejsou potřebná pro běžné použití.</string>
|
||||||
<string name="plugins_screen">Správce modulů</string>
|
<string name="plugins_screen">Správce modulů</string>
|
||||||
<string name="prefs_plugins_descr">Moduly umožňují zapnout pokročilé nastavení a přídavné funkce.</string>
|
<string name="prefs_plugins_descr">Moduly umožňují zapnout pokročilé nastavení a přídavné funkce.</string>
|
||||||
<string name="prefs_plugins">Moduly</string>
|
<string name="prefs_plugins">Moduly</string>
|
||||||
<string name="osm_editing_plugin_description">Pomocí tohoto modulu může být OsmAnd použit na přispívání do OSM, například vytvářením nebo úpravami POI, vytvářením nebo komentováním OSM poznámek a přispíváním zaznamenanými GPX soubory. OSM je celosvětový komunitní projekt mapování. Pro více detailů se podívejte na https://openstreetmap.org. Aktivní účast je vítaná a příspěvky mohou být vytvářené přímo v OsmAnd, jestliže zadáte své osobní přihlašovací údaje do OSM.</string>
|
<string name="osm_editing_plugin_description">Po zadání svých přihlašovacích údajů můžete přispívat do OSM - například vytvářením nebo úpravami bodů zájmu, otevíráním nebo komentováním OSM poznámek a přidáváním zaznamenanými GPX soubory. OSM je celosvětový komunitní projekt mapování.</string>
|
||||||
<string name="vector_maps_may_display_faster_on_some_devices">Akcelerace vykreslování pomocí \'Android native\' knihovny. Vektorové mapy se zpravidla vykreslují rychleji, pokud je tato možnost zaškrtnuta. Avšak na některých zařízeních tato funkce nemusí fungovat.</string>
|
<string name="vector_maps_may_display_faster_on_some_devices">Akcelerace vykreslování pomocí \'Android native\' knihovny. Vektorové mapy se zpravidla vykreslují rychleji, pokud je tato možnost zaškrtnuta. Avšak na některých zařízeních tato funkce nemusí fungovat.</string>
|
||||||
<string name="play_commands_of_currently_selected_voice">Přehrát hlasové pokyny zvoleným hlasem</string>
|
<string name="play_commands_of_currently_selected_voice">Přehrát hlasové pokyny zvoleným hlasem</string>
|
||||||
<string name="debugging_and_development">Vývoj a ladění OsmAnd</string>
|
<string name="debugging_and_development">Vývoj a ladění OsmAnd</string>
|
||||||
|
@ -715,7 +714,8 @@
|
||||||
<string name="osmand_parking_pm">odpoledne</string>
|
<string name="osmand_parking_pm">odpoledne</string>
|
||||||
<string name="osmand_parking_am">dopoledne</string>
|
<string name="osmand_parking_am">dopoledne</string>
|
||||||
<string name="osmand_parking_position_name">Místo parkování</string>
|
<string name="osmand_parking_position_name">Místo parkování</string>
|
||||||
<string name="osmand_parking_plugin_description">Modul Parkovací místo umožňuje zaznamenání, kde jste zaparkovali své auto, a v případě časově omezeného parkování také kolik času zbývá. Parkovací místo a čas parkování můžete najít na panelu aktuální mapy. Je také možné přidat upomínku do kalendáře, pokud chcete být upozorněni.</string>
|
<string name="osmand_parking_plugin_description">Umožňuje zaznamenat, kde jste zaparkovali své auto, včetně zbývajícího času parkování.
|
||||||
|
\n Místo i čas jsou zobrazené na hlavním panelu i na mapovém widgetu. Je také možné přidat upomínku do kalendáře Android.</string>
|
||||||
<string name="osmand_parking_plugin_name">Parkovací místo</string>
|
<string name="osmand_parking_plugin_name">Parkovací místo</string>
|
||||||
<string name="context_menu_item_add_parking_point">Označit jako místo parkování</string>
|
<string name="context_menu_item_add_parking_point">Označit jako místo parkování</string>
|
||||||
<string name="context_menu_item_delete_parking_point">Smazat místo parkování</string>
|
<string name="context_menu_item_delete_parking_point">Smazat místo parkování</string>
|
||||||
|
@ -880,7 +880,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="recording_context_menu_play">Přehrát</string>
|
<string name="recording_context_menu_play">Přehrát</string>
|
||||||
<string name="map_widget_av_notes">Zvukové/video poznámky</string>
|
<string name="map_widget_av_notes">Zvukové/video poznámky</string>
|
||||||
<string name="map_widget_distancemeasurement">Měření vzdálenosti</string>
|
<string name="map_widget_distancemeasurement">Měření vzdálenosti</string>
|
||||||
<string name="audionotes_plugin_description">Modul Audio/video poznámek poskytuje funkce k vytváření záznamů zvukových/fotografických/video poznámek během cesty, buď tlačítkem na mapové obrazovce nebo přímo v kontextovém menu bodu na mapě.</string>
|
<string name="audionotes_plugin_description">Vytvářejte zvukové/fotografické/video poznámky během cesty, buď tlačítkem na mapové obrazovce nebo v kontextovém menu bodu na mapě.</string>
|
||||||
<string name="index_srtm_parts">části</string>
|
<string name="index_srtm_parts">části</string>
|
||||||
<string name="av_def_action_video">Nahrát video</string>
|
<string name="av_def_action_video">Nahrát video</string>
|
||||||
<string name="av_def_action_audio">Nahrát zvuk</string>
|
<string name="av_def_action_audio">Nahrát zvuk</string>
|
||||||
|
@ -908,9 +908,9 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="srtm_paid_version_title">Modul Vrstevnice</string>
|
<string name="srtm_paid_version_title">Modul Vrstevnice</string>
|
||||||
<string name="shared_string_control_stop">Zastavit</string>
|
<string name="shared_string_control_stop">Zastavit</string>
|
||||||
<string name="dropbox_plugin_description">Modul Dropbox vám umožňuje synchronizovat trasy, audio a video poznámky s vaším účtem Dropbox.</string>
|
<string name="dropbox_plugin_description">Modul Dropbox vám umožňuje synchronizovat trasy, audio a video poznámky s vaším účtem Dropbox.</string>
|
||||||
<string name="osmand_srtm_long_description_1000_chars">Tento modul poskytuje zobrazení vrstevnic a vrstvy stínování kopců, které mohou být zobrazené na standardních OsmAnd mapách. Tato funkce je vhodná především pro sportovce, turisty, chodce a vůbec všechny, které zajímá profil terénu.
|
<string name="osmand_srtm_long_description_1000_chars">Tento modul poskytuje zobrazení vrstevnic a vrstvy stínování kopců, které mohou být zobrazené na standardních OsmAnd mapách. Tato funkce je vhodná především pro sportovce, turisty, chodce a vůbec všechny, které zajímá profil terénu.
|
||||||
\n
|
\n
|
||||||
\nCelosvětová výšková data (mezi 70° severní šířky a 70° jižní šířky) se zakládají na měřeních SRTM (Shuttle Radar Topography Mission) a ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), snímkovací přístroj na palubě satelitu Terra, vlajkového satelitu Systému pozorování Země NASA. ASTER je společným projektem NASA, japonského ministerstva hospodářství, obchodu a průmyslu (METI) a Japan Space Systems (J-spacesystems).</string>
|
\nCelosvětová výšková data (mezi 70° severní šířky a 70° jižní šířky) se zakládají na měřeních SRTM (Shuttle Radar Topography Mission) a ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), snímkovacího přístroje na palubě satelitu Terra, vlajkového satelitu Systému pozorování Země NASA. ASTER je společným projektem NASA, japonského ministerstva hospodářství, obchodu a průmyslu (METI) a Japan Space Systems (J-spacesystems).</string>
|
||||||
<string name="stop_routing_confirm">Opravdu chcete zastavit navigaci?</string>
|
<string name="stop_routing_confirm">Opravdu chcete zastavit navigaci?</string>
|
||||||
<string name="clear_dest_confirm">Opravdu chcete smazat svůj cíl (a mezicíle)?</string>
|
<string name="clear_dest_confirm">Opravdu chcete smazat svůj cíl (a mezicíle)?</string>
|
||||||
<string name="recording_context_menu_show">Zobrazit</string>
|
<string name="recording_context_menu_show">Zobrazit</string>
|
||||||
|
@ -951,7 +951,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="favourites_list_activity">Vybrat Oblíbené</string>
|
<string name="favourites_list_activity">Vybrat Oblíbené</string>
|
||||||
<string name="local_openstreetmap_act_title">Editace OSM</string>
|
<string name="local_openstreetmap_act_title">Editace OSM</string>
|
||||||
<string name="shared_string_more_actions">Další akce</string>
|
<string name="shared_string_more_actions">Další akce</string>
|
||||||
<string name="monitoring_settings_descr">Konfigurace záznamů vašich cest.</string>
|
<string name="monitoring_settings_descr">Nastavte, jak se budou zaznamenávat vaše cesty.</string>
|
||||||
<string name="install_paid">Instalovat plnou verzi</string>
|
<string name="install_paid">Instalovat plnou verzi</string>
|
||||||
<string name="cancel_navigation">Ukončit navigaci</string>
|
<string name="cancel_navigation">Ukončit navigaci</string>
|
||||||
<string name="use_kalman_filter_compass_descr">Sníží šum v hodnotách z kompasu, ale zpomalí změny směru.</string>
|
<string name="use_kalman_filter_compass_descr">Sníží šum v hodnotách z kompasu, ale zpomalí změny směru.</string>
|
||||||
|
@ -962,7 +962,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="cancel_route">Zrušit trasu</string>
|
<string name="cancel_route">Zrušit trasu</string>
|
||||||
<string name="clear_destination">Smazat cíl</string>
|
<string name="clear_destination">Smazat cíl</string>
|
||||||
<string name="local_indexes_cat_srtm">Vrstevnice</string>
|
<string name="local_indexes_cat_srtm">Vrstevnice</string>
|
||||||
<string name="shared_string_downloading">Stahování</string>
|
<string name="shared_string_downloading">Stahování…</string>
|
||||||
<string name="other_location">Ostatní</string>
|
<string name="other_location">Ostatní</string>
|
||||||
<string name="local_osm_changes_backup_successful">Soubor se změnami mapy OSM vytvořen %1$s</string>
|
<string name="local_osm_changes_backup_successful">Soubor se změnami mapy OSM vytvořen %1$s</string>
|
||||||
<string name="local_osm_changes_backup_failed">Nezdařilo se zálohovat změny mapy OSM</string>
|
<string name="local_osm_changes_backup_failed">Nezdařilo se zálohovat změny mapy OSM</string>
|
||||||
|
@ -986,7 +986,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="distance_measurement_finish_subtrack">Začít novou podtrasu</string>
|
<string name="distance_measurement_finish_subtrack">Začít novou podtrasu</string>
|
||||||
<string name="distance_measurement_clear_route">Vymazat všechny body</string>
|
<string name="distance_measurement_clear_route">Vymazat všechny body</string>
|
||||||
<string name="distance_measurement_load_gpx">Otevřít soubor GPX</string>
|
<string name="distance_measurement_load_gpx">Otevřít soubor GPX</string>
|
||||||
<string name="osmand_distance_planning_plugin_description">Tento modul poskytuje nástroj na vytvoření trasy klikáním na mapu nebo úpravu stávajících GPX souborů pro plánování výletů a měření vzdálenosti mezi body. Výsledek je možné uložit jako GPX a použito později jako pomůcku.</string>
|
<string name="osmand_distance_planning_plugin_description">Vytvářejte cesty klikáním na mapu nebo úpravou stávajících GPX souborů pro plánování výletů a měření vzdálenosti mezi body. Výsledek je možné uložit jako GPX a později použít pro navádění.</string>
|
||||||
<string name="destination_point">Cíl %1$s</string>
|
<string name="destination_point">Cíl %1$s</string>
|
||||||
<string name="context_menu_item_destination_point">Nastavit jako cíl</string>
|
<string name="context_menu_item_destination_point">Nastavit jako cíl</string>
|
||||||
<string name="please_select_address">Zvolte nejprve město nebo ulici</string>
|
<string name="please_select_address">Zvolte nejprve město nebo ulici</string>
|
||||||
|
@ -1036,21 +1036,21 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="edit_tilesource_choose_existing">Vybrat existující…</string>
|
<string name="edit_tilesource_choose_existing">Vybrat existující…</string>
|
||||||
<string name="local_index_tile_data_downloadable">Ke stažení: %1$s</string>
|
<string name="local_index_tile_data_downloadable">Ke stažení: %1$s</string>
|
||||||
<string name="maps_define_edit">Vytvořit/Upravit…</string>
|
<string name="maps_define_edit">Vytvořit/Upravit…</string>
|
||||||
<string name="edit_tilesource_expiration_time">Doba platnosti (min)</string>
|
<string name="edit_tilesource_expiration_time">Doba platnosti (v minutách)</string>
|
||||||
<string name="driving_region_descr">Vyberte dopravní oblast: USA, Evropa, Británie, Asie a další.</string>
|
<string name="driving_region_descr">Vyberte dopravní oblast: USA, Evropa, Británie, Asie a další.</string>
|
||||||
<string name="driving_region">Dopravní oblast</string>
|
<string name="driving_region">Dopravní oblast</string>
|
||||||
<string name="local_index_tile_data_expire">Doba platnosti (minut): %1$s</string>
|
<string name="local_index_tile_data_expire">Doba platnosti (v minutách): %1$s</string>
|
||||||
<string name="map_widget_fps_info">Snímků za sekundu (ladění)</string>
|
<string name="map_widget_fps_info">Snímků za sekundu (ladění)</string>
|
||||||
<string name="edit_tilesource_elliptic_tile">Eliptický mercator</string>
|
<string name="edit_tilesource_elliptic_tile">Elipsoidní Mercatorovo zobrazení</string>
|
||||||
<string name="base_world_map">Základní mapa světa</string>
|
<string name="base_world_map">Základní mapa světa</string>
|
||||||
<string name="map_magnifier">Lupa mapy</string>
|
<string name="map_magnifier">Lupa mapy</string>
|
||||||
<string name="auto_zoom_none">Bez automatického přibližování</string>
|
<string name="auto_zoom_none">Bez automatického přibližování</string>
|
||||||
<string name="auto_zoom_farthest">Malé přiblížení</string>
|
<string name="auto_zoom_farthest">Malé přiblížení</string>
|
||||||
<string name="auto_zoom_close">Velké přiblížení</string>
|
<string name="auto_zoom_close">Velké přiblížení</string>
|
||||||
<string name="auto_zoom_far">Střední přiblížení</string>
|
<string name="auto_zoom_far">Střední přiblížení</string>
|
||||||
<string name="local_index_tile_data_zooms">Stažené přiblížení: %1$s</string>
|
<string name="local_index_tile_data_zooms">Stažené úrovně přiblížení: %1$s</string>
|
||||||
<string name="local_index_tile_data_name">Data dlaždic: %1$s</string>
|
<string name="local_index_tile_data_name">Data dlaždic: %1$s</string>
|
||||||
<string name="edit_tilesource_successfully">Zdroj dlaždic %1$s byl uložen</string>
|
<string name="edit_tilesource_successfully">Zdroj dlaždic %1$s uložen</string>
|
||||||
<string name="shared_string_remember_my_choice">Zapamatovat si volbu</string>
|
<string name="shared_string_remember_my_choice">Zapamatovat si volbu</string>
|
||||||
<string name="shared_string_and">a</string>
|
<string name="shared_string_and">a</string>
|
||||||
<string name="shared_string_or">nebo</string>
|
<string name="shared_string_or">nebo</string>
|
||||||
|
@ -1058,37 +1058,37 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="animate_routing_route">Simulovat pomocí vypočítané trasy </string>
|
<string name="animate_routing_route">Simulovat pomocí vypočítané trasy </string>
|
||||||
<string name="animate_routing_gpx">Simulovat pomocí GPX trasy</string>
|
<string name="animate_routing_gpx">Simulovat pomocí GPX trasy</string>
|
||||||
<string name="shared_string_delete_all">Odstranit vše</string>
|
<string name="shared_string_delete_all">Odstranit vše</string>
|
||||||
<string name="local_osm_changes_delete_all_confirm">Chystáte se odstranit %1$d změn OSM. Jste si jisti?</string>
|
<string name="local_osm_changes_delete_all_confirm">Opravdu chcete odstranit %1$d OSM změn\?</string>
|
||||||
<string name="app_mode_hiking">Turistika</string>
|
<string name="app_mode_hiking">Turistika</string>
|
||||||
<string name="app_mode_motorcycle">Motocykl</string>
|
<string name="app_mode_motorcycle">Motocykl</string>
|
||||||
<string name="app_mode_boat">Loď</string>
|
<string name="app_mode_boat">Loď</string>
|
||||||
<string name="app_mode_aircraft">Letadlo</string>
|
<string name="app_mode_aircraft">Letadlo</string>
|
||||||
<string name="map_widget_map_rendering">Vykreslování mapy</string>
|
<string name="map_widget_map_rendering">Vykreslování mapy</string>
|
||||||
<string name="app_modes_choose_descr">Vyberte profily, které se zobrazí v aplikaci.</string>
|
<string name="app_modes_choose_descr">Vyberte profily, které budou viditelné.</string>
|
||||||
<string name="app_modes_choose">Profily aplikace</string>
|
<string name="app_modes_choose">Profily aplikace</string>
|
||||||
<string name="amenity_type_seamark">Mořská značka</string>
|
<string name="amenity_type_seamark">Mořská značka</string>
|
||||||
<string name="keep_and_add_destination_point">Přidat jako další cíl</string>
|
<string name="keep_and_add_destination_point">Přidat jako další cíl</string>
|
||||||
<string name="select_gpx">Vybrat GPX…</string>
|
<string name="select_gpx">Vybrat GPX…</string>
|
||||||
<string name="use_displayed_track_for_navigation">Použít zobrazenou trasu pro navigaci\?</string>
|
<string name="use_displayed_track_for_navigation">Použít zobrazenou trasu pro navigaci\?</string>
|
||||||
<string name="route_descr_select_destination">Vybrat cíl</string>
|
<string name="route_descr_select_destination">Zadat cíl</string>
|
||||||
<string name="shared_string_select_on_map">Vybrat na mapě</string>
|
<string name="shared_string_select_on_map">Vybrat na mapě</string>
|
||||||
<string name="shared_string_favorite">Oblíbené</string>
|
<string name="shared_string_favorite">Oblíbené</string>
|
||||||
<string name="route_preferences">Předvolby trasy</string>
|
<string name="route_preferences">Předvolby trasy</string>
|
||||||
<string name="route_info">Informace trasy</string>
|
<string name="route_info">Informace trasy</string>
|
||||||
<string name="routing_attr_prefer_motorway_name">Upřednostňovat dálnice</string>
|
<string name="routing_attr_prefer_motorway_name">Upřednostňovat dálnice</string>
|
||||||
<string name="routing_attr_prefer_motorway_description">Upřednostňovat dálnice</string>
|
<string name="routing_attr_prefer_motorway_description">Upřednostňovat dálnice</string>
|
||||||
<string name="routing_attr_avoid_toll_name">Vyhnout se placeným silnicím</string>
|
<string name="routing_attr_avoid_toll_name">Žádné placené silnice</string>
|
||||||
<string name="routing_attr_avoid_toll_description">Vyhnout se placeným silnicím</string>
|
<string name="routing_attr_avoid_toll_description">Vyhne se placeným silnicím</string>
|
||||||
<string name="routing_attr_avoid_unpaved_name">Vyhnout se nezpevněným cestám</string>
|
<string name="routing_attr_avoid_unpaved_name">Žádné nezpevněné cesty</string>
|
||||||
<string name="routing_attr_avoid_unpaved_description">Povede trasu mimo nezpevněné cesty.</string>
|
<string name="routing_attr_avoid_unpaved_description">Vyhne se nezpevněným cestám</string>
|
||||||
<string name="routing_attr_avoid_ferries_name">Vyhnout se trajektům</string>
|
<string name="routing_attr_avoid_ferries_name">Žádné trajekty</string>
|
||||||
<string name="routing_attr_avoid_ferries_description">Vyhnout se trajektům</string>
|
<string name="routing_attr_avoid_ferries_description">Vyhne se trajektům</string>
|
||||||
<string name="routing_attr_avoid_motorway_name">Vyhnout se dálnicím</string>
|
<string name="routing_attr_avoid_motorway_name">Žádné dálnice</string>
|
||||||
<string name="routing_attr_avoid_motorway_description">Vyhnout se dálnicím</string>
|
<string name="routing_attr_avoid_motorway_description">Vyhne se dálnicím</string>
|
||||||
<string name="routing_attr_weight_name">Hmotnostní omezení</string>
|
<string name="routing_attr_weight_name">Hmotnostní omezení</string>
|
||||||
<string name="routing_attr_weight_description">Zadejte povolenou hmotnost vozidla na trase.</string>
|
<string name="routing_attr_weight_description">Zadejte povolenou hmotnost vozidla na trase.</string>
|
||||||
<string name="android_19_location_disabled">Od verze Androidu 4.4 (KitKat) není možné stahovat a aktualizovat mapy ve starém adresáři (%s). Zkopírovat všechny soubory aplikace OsmAnd do nového umístění\?
|
<string name="android_19_location_disabled">Od verze Androidu 4.4 (KitKat) není starý adresář (%s) podporovaný. Zkopírovat všechny soubory aplikace OsmAnd do nového umístění\?
|
||||||
\n Poznámka 1: Původní soubory zůstanou nedotčeny (ale mohou být smazány ručně).
|
\n Poznámka 1: Původní soubory zůstanou nedotčeny (ale mohou být smazány ručně).
|
||||||
\n Poznámka 2: V novém úložišti nebude možné sdílet soubory mezi OsmAnd a OsmAnd+.</string>
|
\n Poznámka 2: V novém úložišti nebude možné sdílet soubory mezi OsmAnd a OsmAnd+.</string>
|
||||||
<string name="copying_osmand_one_file_descr">Kopírování souboru (%s) do nového umístění…</string>
|
<string name="copying_osmand_one_file_descr">Kopírování souboru (%s) do nového umístění…</string>
|
||||||
<string name="copying_osmand_files_descr">Kopírování datových souborů OsmAnd do nového umístění (%s)…</string>
|
<string name="copying_osmand_files_descr">Kopírování datových souborů OsmAnd do nového umístění (%s)…</string>
|
||||||
|
@ -1210,7 +1210,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
\n
|
\n
|
||||||
\nStiskněte a podržte pro zobrazení na mapě"</string>
|
\nStiskněte a podržte pro zobrazení na mapě"</string>
|
||||||
<string name="save_as_favorites_points">Uložit jako skupinu Oblíbených</string>
|
<string name="save_as_favorites_points">Uložit jako skupinu Oblíbených</string>
|
||||||
<string name="select_destination_and_intermediate_points">Vybrat cíle</string>
|
<string name="select_destination_and_intermediate_points">Určete cíle</string>
|
||||||
<string name="layer_amenity_label">Překryvné popisky bodů</string>
|
<string name="layer_amenity_label">Překryvné popisky bodů</string>
|
||||||
<string name="create_poi_link_to_osm_doc">
|
<string name="create_poi_link_to_osm_doc">
|
||||||
<u>On-line OSM</u> klasifikace map s obrázky.</string>
|
<u>On-line OSM</u> klasifikace map s obrázky.</string>
|
||||||
|
@ -1218,9 +1218,9 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="show_zoom_buttons_navigation">Zobrazit tlačítka lupy</string>
|
<string name="show_zoom_buttons_navigation">Zobrazit tlačítka lupy</string>
|
||||||
<string name="sort_by_distance">Třídit podle vzdálenosti</string>
|
<string name="sort_by_distance">Třídit podle vzdálenosti</string>
|
||||||
<string name="sort_by_name">Třídit podle jména</string>
|
<string name="sort_by_name">Třídit podle jména</string>
|
||||||
<string name="local_index_select_gpx_file">Vybrat k zobrazení</string>
|
<string name="local_index_select_gpx_file">Vyberte stopu</string>
|
||||||
<string name="no_index_file_to_download">Nic ke stažení nebylo nalezeno, prosím zkontrolujte své připojení k Internetu.</string>
|
<string name="no_index_file_to_download">Nic ke stažení nebylo nalezeno, prosím zkontrolujte své připojení k Internetu.</string>
|
||||||
<string name="none_selected_gpx">Nebyl vybrán soubor GPX. Vyberte podržením.</string>
|
<string name="none_selected_gpx">Dlouhým stisknutím vyberte GPX soubor.</string>
|
||||||
<string name="rendering_attr_hideBuildings_name">Budovy</string>
|
<string name="rendering_attr_hideBuildings_name">Budovy</string>
|
||||||
<string name="rendering_attr_hideText_name">Text</string>
|
<string name="rendering_attr_hideText_name">Text</string>
|
||||||
<string name="rendering_attr_hideWoodScrubs_name">Lesy a křoviny</string>
|
<string name="rendering_attr_hideWoodScrubs_name">Lesy a křoviny</string>
|
||||||
|
@ -1236,7 +1236,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="map_preferred_locale_descr">Preferovaný jazyk pro nápisy na mapě (pokud není dostupný, budou použity anglické nebo lokální názvy).</string>
|
<string name="map_preferred_locale_descr">Preferovaný jazyk pro nápisy na mapě (pokud není dostupný, budou použity anglické nebo lokální názvy).</string>
|
||||||
<string name="map_preferred_locale">Preferovaný jazyk mapy</string>
|
<string name="map_preferred_locale">Preferovaný jazyk mapy</string>
|
||||||
<string name="local_map_names">Lokální názvy</string>
|
<string name="local_map_names">Lokální názvy</string>
|
||||||
<string name="live_monitoring_m_descr">Pokud je zapnutý záznam GPX trasy, odesílat data trasování určené webové službě.</string>
|
<string name="live_monitoring_m_descr">Odesílat trasovací data určené webové službě, pokud je zapnutý záznam GPX.</string>
|
||||||
<string name="live_monitoring_m">On-line sledování (vyžaduje GPX)</string>
|
<string name="live_monitoring_m">On-line sledování (vyžaduje GPX)</string>
|
||||||
<string name="live_monitoring_start">Spustit on-line sledování</string>
|
<string name="live_monitoring_start">Spustit on-line sledování</string>
|
||||||
<string name="live_monitoring_stop">Zastavit on-line sledování</string>
|
<string name="live_monitoring_stop">Zastavit on-line sledování</string>
|
||||||
|
@ -1279,9 +1279,9 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="download_additional_maps">Stáhnout chybějící mapy %1$s (%2$d MB)?</string>
|
<string name="download_additional_maps">Stáhnout chybějící mapy %1$s (%2$d MB)?</string>
|
||||||
<string name="save_track_interval_globally">Interval ukládání trasy</string>
|
<string name="save_track_interval_globally">Interval ukládání trasy</string>
|
||||||
<string name="rendering_attr_publicTransportMode_name">Autobusy, trolejbusy a kyvadlová doprava</string>
|
<string name="rendering_attr_publicTransportMode_name">Autobusy, trolejbusy a kyvadlová doprava</string>
|
||||||
<string name="record_plugin_description">Tento modul zapne funkci záznamu a uložení vašich tras stisknutím tlačítka GPX na panelu mapové obrazovky nebo také automatického ukládání všech vašich navigačních tras do GPX souboru.
|
<string name="record_plugin_description">Tento modul zapne funkci záznamu a uložení vašich stop stisknutím tlačítka GPX na panelu mapové obrazovky. Taktéž umožňuje nastavit automatické ukládání vašich navigačních tras do GPX souboru.
|
||||||
\n
|
\n
|
||||||
\nZaznamenávané trasy můžete sdílet se svými přáteli nebo mohou být použity jako příspěvek do OSM. Sportovci mohou použít zaznamenané trasy k sledování svých tréninků. Základní analýza může být provedena již přímo v OsmAnd, například čas okruhu, průměrná rychlost, apod. Trasy mohou být samozřejmě analyzovány později speciálními programy třetích stran.</string>
|
\n Zaznamenávané stopy můžete sdílet se svými přáteli nebo mohou být použity jako příspěvek do OSM. Sportovci mohou použít zaznamenané trasy k sledování svých tréninků. Základní analýza může být provedena přímo v OsmAnd, například čas okruhu, průměrná rychlost, apod. Trasy mohou být samozřejmě analyzovány později speciálními programy třetích stran.</string>
|
||||||
<string name="record_plugin_name">Záznam cesty</string>
|
<string name="record_plugin_name">Záznam cesty</string>
|
||||||
<string name="int_hour">h</string>
|
<string name="int_hour">h</string>
|
||||||
<string name="duration">Trvání</string>
|
<string name="duration">Trvání</string>
|
||||||
|
@ -1292,24 +1292,24 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="way_alarms">Dopravní varování</string>
|
<string name="way_alarms">Dopravní varování</string>
|
||||||
<string name="speak_favorites">Blízké Oblíbené body</string>
|
<string name="speak_favorites">Blízké Oblíbené body</string>
|
||||||
<string name="speak_poi">Blízké body zájmu POI</string>
|
<string name="speak_poi">Blízké body zájmu POI</string>
|
||||||
<string name="save_track_to_gpx_globally_descr">Záznam do GPX souboru může být zapnut nebo vypnut pomocí widgetu Záznam trasy na mapové obrazovce.</string>
|
<string name="save_track_to_gpx_globally_descr">Záznam do GPX souboru může být zapnut nebo vypnut pomocí widgetu Záznam trasy na mapě.</string>
|
||||||
<string name="confirm_every_run">Vždy se zeptat</string>
|
<string name="confirm_every_run">Vždy se zeptat</string>
|
||||||
<string name="save_global_track_interval">Globální interval záznamu</string>
|
<string name="save_global_track_interval">Globální interval záznamu</string>
|
||||||
<string name="traffic_warning_speed_limit">Rychlostní limit</string>
|
<string name="traffic_warning_speed_limit">Rychlostní limit</string>
|
||||||
<string name="traffic_warning_border_control">Hraniční kontrola</string>
|
<string name="traffic_warning_border_control">Hraniční kontrola</string>
|
||||||
<string name="traffic_warning_payment">Mýtná stanice</string>
|
<string name="traffic_warning_payment">Mýtná stanice</string>
|
||||||
<string name="traffic_warning_stop">Značka STOP</string>
|
<string name="traffic_warning_stop">Značka STOP</string>
|
||||||
<string name="traffic_warning_calming">Zpomalovací prvek</string>
|
<string name="traffic_warning_calming">Zklidňování dopravy</string>
|
||||||
<string name="traffic_warning_speed_camera">Rychlostní radar/kamera</string>
|
<string name="traffic_warning_speed_camera">Rychlostní radar/kamera</string>
|
||||||
<string name="traffic_warning">Dopravní varování</string>
|
<string name="traffic_warning">Dopravní varování</string>
|
||||||
<string name="route_descr_destination">Cíl</string>
|
<string name="route_descr_destination">Cíl</string>
|
||||||
<string name="local_index_description">Stiskněte existující položku k zobrazení více detailů, podržte pro vypnutí nebo smazání. V zařízení je %1$s volného místa:</string>
|
<string name="local_index_description">Stiskněte existující položku k zobrazení více detailů, podržte pro vypnutí nebo smazání. V zařízení je %1$s volného místa:</string>
|
||||||
<string name="text_size">Velikost písma</string>
|
<string name="text_size">Velikost písma</string>
|
||||||
<string name="text_size_descr">Nastavit velikost písma na mapě.</string>
|
<string name="text_size_descr">Nastavit velikost písma na mapě.</string>
|
||||||
<string name="fav_point_dublicate">Název oblíbeného bodu je již použit</string>
|
<string name="fav_point_dublicate">Duplicitní název oblíbeného bodu</string>
|
||||||
<string name="fav_point_dublicate_message">Název Oblíbeného bodu již existuje, byl změněn na %1$s, aby nevznikla duplicita.</string>
|
<string name="fav_point_dublicate_message">Oblíbený bod přejmenován na %1$s, aby nevznikla duplicita.</string>
|
||||||
<string name="print_route">Vytisknout trasu</string>
|
<string name="print_route">Vytisknout trasu</string>
|
||||||
<string name="fav_point_emoticons_message">Název oblíbeného bodu byl změněn na %1$s, protože není možné ukládat do souboru řetězce s emotikony.</string>
|
<string name="fav_point_emoticons_message">Oblíbený bod přejmenován na %1$s, protože není možné ukládat do souboru řetězce s emotikony.</string>
|
||||||
<string name="speed_limit_exceed">Tolerance překročení rychlosti</string>
|
<string name="speed_limit_exceed">Tolerance překročení rychlosti</string>
|
||||||
<string name="speed_limit_exceed_message">Zvolte toleranci překročení povolené rychlosti, po které uslyšíte hlasové varování.</string>
|
<string name="speed_limit_exceed_message">Zvolte toleranci překročení povolené rychlosti, po které uslyšíte hlasové varování.</string>
|
||||||
<string name="anonymous_user_hint">Anonymní uživatel nemůže:
|
<string name="anonymous_user_hint">Anonymní uživatel nemůže:
|
||||||
|
@ -1392,20 +1392,20 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="enable_proxy_title">Povolit HTTP proxy</string>
|
<string name="enable_proxy_title">Povolit HTTP proxy</string>
|
||||||
<string name="enable_proxy_descr">Nastavit HTTP proxy pro veškeré síťové požadavky.</string>
|
<string name="enable_proxy_descr">Nastavit HTTP proxy pro veškeré síťové požadavky.</string>
|
||||||
<string name="proxy_host_title">Host proxy</string>
|
<string name="proxy_host_title">Host proxy</string>
|
||||||
<string name="proxy_host_descr">Nastavit hostname proxy (např. 127.0.0.1).</string>
|
<string name="proxy_host_descr">Zadejte hostname proxy serveru (např. 127.0.0.1).</string>
|
||||||
<string name="proxy_port_title">Port proxy</string>
|
<string name="proxy_port_title">Port proxy</string>
|
||||||
<string name="proxy_port_descr">Nastavit číslo portu proxy (např. 8118).</string>
|
<string name="proxy_port_descr">Zadejte číslo portu proxy serveru (např. 8118).</string>
|
||||||
<string name="parking_place">Parkovací místo</string>
|
<string name="parking_place">Parkovací místo</string>
|
||||||
<string name="remove_the_tag">ODSTRANIT ZNAČKU</string>
|
<string name="remove_the_tag">ODSTRANIT ZNAČKU</string>
|
||||||
<string name="shared_string_disabled">Zakázán</string>
|
<string name="shared_string_disabled">Zakázán</string>
|
||||||
<string name="shared_string_enabled">Povolen</string>
|
<string name="shared_string_enabled">Povolen</string>
|
||||||
<string name="edit_group">Upravit skupinu</string>
|
<string name="edit_group">Upravit skupinu</string>
|
||||||
<string name="nautical_maps_missing">Pro zobrazování plavebních map je třeba stáhnout speciální mapu</string>
|
<string name="nautical_maps_missing">Stáhněte si speciální offline mapu pro zobrazení námořních detailů.</string>
|
||||||
<string name="world_ski_missing">Pro zobrazování lyžařských map je třeba stáhnout speciální mapu</string>
|
<string name="world_ski_missing">Stáhněte si speciální offline mapu pro zobrazení lyžařských objektů.</string>
|
||||||
<string name="plugin_ski_name">Lyžařský mapový pohled</string>
|
<string name="plugin_ski_name">Lyžařský mapový pohled</string>
|
||||||
<string name="plugin_nautical_name">Plavební mapový pohled</string>
|
<string name="plugin_nautical_name">Plavební mapový pohled</string>
|
||||||
<string name="share_note">Sdílet poznámku</string>
|
<string name="share_note">Sdílet poznámku</string>
|
||||||
<string name="notes">Poznámky</string>
|
<string name="notes">A/V poznámky</string>
|
||||||
<string name="online_map">On-line mapa</string>
|
<string name="online_map">On-line mapa</string>
|
||||||
<string name="roads_only">Pouze cesty</string>
|
<string name="roads_only">Pouze cesty</string>
|
||||||
<string name="rendering_attr_pisteRoutes_name">Lyžařské svahy</string>
|
<string name="rendering_attr_pisteRoutes_name">Lyžařské svahy</string>
|
||||||
|
@ -1460,10 +1460,10 @@ Délka %2$s</string>
|
||||||
<string name="waypoint_visit_after">Navštívit po</string>
|
<string name="waypoint_visit_after">Navštívit po</string>
|
||||||
<string name="waypoint_visit_before">Navštívit před</string>
|
<string name="waypoint_visit_before">Navštívit před</string>
|
||||||
<string name="confirmation_to_clear_history">Vyčistit historii\?</string>
|
<string name="confirmation_to_clear_history">Vyčistit historii\?</string>
|
||||||
<string name="local_osm_changes_upload_all_confirm">Požadujete nahrát %1$d změn do OSM. Jste si jisti?</string>
|
<string name="local_osm_changes_upload_all_confirm">Opravdu chcete nahrát %1$d změn do OSM\?</string>
|
||||||
<string name="shared_string_collapse">Sbalit</string>
|
<string name="shared_string_collapse">Sbalit</string>
|
||||||
<string name="agps_info">Info o A-GPS</string>
|
<string name="agps_info">Info o A-GPS</string>
|
||||||
<string name="agps_data_last_downloaded">Datum posledního stažení A-GPS dat: %1$s</string>
|
<string name="agps_data_last_downloaded">Datum stažení A-GPS dat: %1$s</string>
|
||||||
<string name="shared_string_message">Zpráva</string>
|
<string name="shared_string_message">Zpráva</string>
|
||||||
<string name="welmode_download_maps">Stáhnout mapy</string>
|
<string name="welmode_download_maps">Stáhnout mapy</string>
|
||||||
<string name="welcome_header">Vítejte</string>
|
<string name="welcome_header">Vítejte</string>
|
||||||
|
@ -1517,7 +1517,7 @@ Délka %2$s</string>
|
||||||
<string name="storage_directory">Úložiště map</string>
|
<string name="storage_directory">Úložiště map</string>
|
||||||
<string name="shared_string_copy">Kopírovat</string>
|
<string name="shared_string_copy">Kopírovat</string>
|
||||||
<string name="rendering_attr_hideHouseNumbers_name">Popisná čísla domů</string>
|
<string name="rendering_attr_hideHouseNumbers_name">Popisná čísla domů</string>
|
||||||
<string name="routing_attr_avoid_borders_description">Nepřekračovat hranice země</string>
|
<string name="routing_attr_avoid_borders_description">Vyhne se překročení hranic státu</string>
|
||||||
<string name="routing_attr_height_name">Výškové omezení</string>
|
<string name="routing_attr_height_name">Výškové omezení</string>
|
||||||
<string name="routing_attr_height_description">Zadejte výšku vozidla, která musí být povolena na cestách.</string>
|
<string name="routing_attr_height_description">Zadejte výšku vozidla, která musí být povolena na cestách.</string>
|
||||||
<string name="use_fast_recalculation">Inteligentní přepočítávání trasy</string>
|
<string name="use_fast_recalculation">Inteligentní přepočítávání trasy</string>
|
||||||
|
@ -1532,7 +1532,7 @@ Délka %2$s</string>
|
||||||
<string name="rendering_value_disabled_name">Vypnuto</string>
|
<string name="rendering_value_disabled_name">Vypnuto</string>
|
||||||
<string name="rendering_value_walkingRoutesScopeOSMC_name">Zbarvení podle příslušnosti k síti</string>
|
<string name="rendering_value_walkingRoutesScopeOSMC_name">Zbarvení podle příslušnosti k síti</string>
|
||||||
<string name="rendering_value_walkingRoutesOSMC_name">Zbarvení podle turistické značky OSMC</string>
|
<string name="rendering_value_walkingRoutesOSMC_name">Zbarvení podle turistické značky OSMC</string>
|
||||||
<string name="local_recordings_delete_all_confirm">Chystáte se smazat %1$d poznámek. Jste si jisti?</string>
|
<string name="local_recordings_delete_all_confirm">Opravdu chcete smazat %1$d poznámek\?</string>
|
||||||
<string name="download_wikipedia_maps">Wikipedie</string>
|
<string name="download_wikipedia_maps">Wikipedie</string>
|
||||||
<string name="rendering_value_red_name">Červená</string>
|
<string name="rendering_value_red_name">Červená</string>
|
||||||
<string name="rendering_value_default13_name">Výchozí (13)</string>
|
<string name="rendering_value_default13_name">Výchozí (13)</string>
|
||||||
|
@ -1544,7 +1544,7 @@ Délka %2$s</string>
|
||||||
<string name="rendering_value_lightblue_name">Světlemodrá</string>
|
<string name="rendering_value_lightblue_name">Světlemodrá</string>
|
||||||
<string name="rendering_value_blue_name">Modrá</string>
|
<string name="rendering_value_blue_name">Modrá</string>
|
||||||
<string name="rendering_value_purple_name">Fialová</string>
|
<string name="rendering_value_purple_name">Fialová</string>
|
||||||
<string name="restart_is_required">Restartujte aplikaci pro aplikování všech změn.</string>
|
<string name="restart_is_required">Pro aplikování všech změn je potřeba restartovat aplikaci.</string>
|
||||||
<string name="light_theme">Světlý</string>
|
<string name="light_theme">Světlý</string>
|
||||||
<string name="dark_theme">Tmavý</string>
|
<string name="dark_theme">Tmavý</string>
|
||||||
<string name="rendering_value_defaultTranslucentCyan_name">Výchozí (průsvitná modrozelená)</string>
|
<string name="rendering_value_defaultTranslucentCyan_name">Výchozí (průsvitná modrozelená)</string>
|
||||||
|
@ -1558,8 +1558,8 @@ Délka %2$s</string>
|
||||||
<string name="rendering_value_translucent_purple_name">Průsvitná fialová</string>
|
<string name="rendering_value_translucent_purple_name">Průsvitná fialová</string>
|
||||||
<string name="lang_pms">Piemontština</string>
|
<string name="lang_pms">Piemontština</string>
|
||||||
<string name="archive_wikipedia_data">Máte zastaralá nekompatibilní data Wikipedie. Archivovat je\?</string>
|
<string name="archive_wikipedia_data">Máte zastaralá nekompatibilní data Wikipedie. Archivovat je\?</string>
|
||||||
<string name="download_wikipedia_files">Stáhnout dodatečná Wikipedia data (%1$s MB) \?</string>
|
<string name="download_wikipedia_files">Stáhnout dodatečná data Wikipedie (%1$s MB)\?</string>
|
||||||
<string name="gps_network_not_enabled">Služba zjištění polohy není zapnuta. Aktivovat\?</string>
|
<string name="gps_network_not_enabled">Služba zjištění polohy je vypnuta. Aktivovat\?</string>
|
||||||
<string name="disable_recording_once_app_killed">Zabránit samostatnému logování</string>
|
<string name="disable_recording_once_app_killed">Zabránit samostatnému logování</string>
|
||||||
<string name="download_live_updates">Okamžité aktualizace</string>
|
<string name="download_live_updates">Okamžité aktualizace</string>
|
||||||
<string name="no_updates_available">Nejsou dostupné žádné aktualizace</string>
|
<string name="no_updates_available">Nejsou dostupné žádné aktualizace</string>
|
||||||
|
@ -1582,8 +1582,8 @@ Délka %2$s</string>
|
||||||
<string name="plugin_settings">Moduly</string>
|
<string name="plugin_settings">Moduly</string>
|
||||||
<string name="av_locations_descr">GPX soubor s umístěními.</string>
|
<string name="av_locations_descr">GPX soubor s umístěními.</string>
|
||||||
<string name="av_locations">Umístění</string>
|
<string name="av_locations">Umístění</string>
|
||||||
<string name="routing_attr_avoid_shuttle_train_name">Vyhnout se autovlaku</string>
|
<string name="routing_attr_avoid_shuttle_train_name">Žádný autovlak</string>
|
||||||
<string name="routing_attr_avoid_shuttle_train_description">Vyhnout se použití autovlaků</string>
|
<string name="routing_attr_avoid_shuttle_train_description">Vyhne se použití autovlaků</string>
|
||||||
<string name="lang_la">Latina</string>
|
<string name="lang_la">Latina</string>
|
||||||
<string name="poi_action_delete">smazat</string>
|
<string name="poi_action_delete">smazat</string>
|
||||||
<string name="failed_to_upload">Nepodařilo se odeslat</string>
|
<string name="failed_to_upload">Nepodařilo se odeslat</string>
|
||||||
|
@ -1691,7 +1691,7 @@ Délka %2$s</string>
|
||||||
<string name="simulate_initial_startup_descr">Nastavit příznak označující první spuštění aplikace, ostatní nastavení ponechat nezměněná.</string>
|
<string name="simulate_initial_startup_descr">Nastavit příznak označující první spuštění aplikace, ostatní nastavení ponechat nezměněná.</string>
|
||||||
<string name="confirm_download_roadmaps">Silniční mapa není nutná, protože máte standardní (plnou) mapu. I přesto stáhnout?</string>
|
<string name="confirm_download_roadmaps">Silniční mapa není nutná, protože máte standardní (plnou) mapu. I přesto stáhnout?</string>
|
||||||
<string name="application_dir_description">Zvolte, kam chcete uložit mapové a ostatní datové soubory.</string>
|
<string name="application_dir_description">Zvolte, kam chcete uložit mapové a ostatní datové soubory.</string>
|
||||||
<string name="show_on_start_description">„Vypnout“ spouští přímo obrazovku s mapou.</string>
|
<string name="show_on_start_description">\'Vypnuto\' spouští přímo obrazovku s mapou.</string>
|
||||||
<string name="world_map_download_descr">Základní mapa světa (pokrývající celý svět při malých úrovních detailů) chybí nebo je zastaralá. Prosím zvažte její stažení pro celkový přehled.</string>
|
<string name="world_map_download_descr">Základní mapa světa (pokrývající celý svět při malých úrovních detailů) chybí nebo je zastaralá. Prosím zvažte její stažení pro celkový přehled.</string>
|
||||||
<string name="shared_string_qr_code">QR kód</string>
|
<string name="shared_string_qr_code">QR kód</string>
|
||||||
<string name="map_downloaded">Mapa stažena</string>
|
<string name="map_downloaded">Mapa stažena</string>
|
||||||
|
@ -1749,9 +1749,9 @@ Délka %2$s</string>
|
||||||
<string name="osn_reopen_dialog_title">Znovuotevřít poznámku</string>
|
<string name="osn_reopen_dialog_title">Znovuotevřít poznámku</string>
|
||||||
<string name="osn_close_dialog_title">Uzavřít poznámku</string>
|
<string name="osn_close_dialog_title">Uzavřít poznámku</string>
|
||||||
<string name="osn_add_dialog_success">Poznámka vytvořena</string>
|
<string name="osn_add_dialog_success">Poznámka vytvořena</string>
|
||||||
<string name="osn_add_dialog_error">Nepodařilo se vytvořit poznámku</string>
|
<string name="osn_add_dialog_error">Nepodařilo se vytvořit poznámku.</string>
|
||||||
<string name="osn_close_dialog_success">Poznámka uzavřena</string>
|
<string name="osn_close_dialog_success">Poznámka uzavřena</string>
|
||||||
<string name="osn_close_dialog_error">Nepodařilo se uzavřít poznámku</string>
|
<string name="osn_close_dialog_error">Nepodařilo se uzavřít poznámku.</string>
|
||||||
<string name="shared_string_commit">Odeslat</string>
|
<string name="shared_string_commit">Odeslat</string>
|
||||||
<string name="context_menu_item_delete_waypoint">Odstranit bod GPX?</string>
|
<string name="context_menu_item_delete_waypoint">Odstranit bod GPX?</string>
|
||||||
<string name="context_menu_item_edit_waypoint">Upravit bod GPX</string>
|
<string name="context_menu_item_edit_waypoint">Upravit bod GPX</string>
|
||||||
|
@ -1765,9 +1765,9 @@ Délka %2$s</string>
|
||||||
<string name="use_drawer_btn">Použít menu</string>
|
<string name="use_drawer_btn">Použít menu</string>
|
||||||
<string name="dashboard_or_drawer_title">Domovská obrazovka nebo menu</string>
|
<string name="dashboard_or_drawer_title">Domovská obrazovka nebo menu</string>
|
||||||
<string name="dashboard_or_drawer_description">Na výběr je možnost ovládání aplikace přes flexibilní domovskou obrazovku nebo statické menu. Svůj výběr můžete kdykoliv změnit v nastavení domovské obrazovky.</string>
|
<string name="dashboard_or_drawer_description">Na výběr je možnost ovládání aplikace přes flexibilní domovskou obrazovku nebo statické menu. Svůj výběr můžete kdykoliv změnit v nastavení domovské obrazovky.</string>
|
||||||
<string name="routing_attr_avoid_stairs_name">Vyhnout se schodům</string>
|
<string name="routing_attr_avoid_stairs_name">Žádné schody</string>
|
||||||
<string name="routing_attr_avoid_stairs_description">Vyhnout se schodům</string>
|
<string name="routing_attr_avoid_stairs_description">Vyhne se schodům</string>
|
||||||
<string name="routing_attr_avoid_borders_name">Vyhnout se hraničním přechodům</string>
|
<string name="routing_attr_avoid_borders_name">Žádné hraniční přechody</string>
|
||||||
<string name="shared_string_near">Nedaleko</string>
|
<string name="shared_string_near">Nedaleko</string>
|
||||||
<string name="shared_string_hide">Skrýt</string>
|
<string name="shared_string_hide">Skrýt</string>
|
||||||
<string name="av_video_quality_low">Nejnižší kvalita</string>
|
<string name="av_video_quality_low">Nejnižší kvalita</string>
|
||||||
|
@ -1784,9 +1784,9 @@ Délka %2$s</string>
|
||||||
<string name="route_duration">Čas:</string>
|
<string name="route_duration">Čas:</string>
|
||||||
<string name="rendering_attr_horseRoutes_name">Stezka pro koně</string>
|
<string name="rendering_attr_horseRoutes_name">Stezka pro koně</string>
|
||||||
<string name="only_download_over_wifi">Stahovat jen přes WiFi</string>
|
<string name="only_download_over_wifi">Stahovat jen přes WiFi</string>
|
||||||
<string name="no_location_permission">Aplikace nemá povolen přístup k poloze.</string>
|
<string name="no_location_permission">Udělit oprávnění pro přístup k poloze.</string>
|
||||||
<string name="no_camera_permission">Aplikace nemá povolen přístup k fotoaparátu.</string>
|
<string name="no_camera_permission">Udělit oprávnění pro přístup k fotoaparátu.</string>
|
||||||
<string name="no_microphone_permission">Aplikace nemá povolen přístup k mikrofonu.</string>
|
<string name="no_microphone_permission">Udělit oprávnění pro přístup k mikrofonu.</string>
|
||||||
<string name="update">Aktualizovat každých</string>
|
<string name="update">Aktualizovat každých</string>
|
||||||
<string name="live_update">Okamžité aktualizace</string>
|
<string name="live_update">Okamžité aktualizace</string>
|
||||||
<string name="update_now">Aktualizovat nyní</string>
|
<string name="update_now">Aktualizovat nyní</string>
|
||||||
|
@ -1843,32 +1843,32 @@ Délka %2$s</string>
|
||||||
<string name="upload_anonymously">Nahrát anonymně</string>
|
<string name="upload_anonymously">Nahrát anonymně</string>
|
||||||
<string name="show_transparency_seekbar">Zobrazit posuvník průhlednosti</string>
|
<string name="show_transparency_seekbar">Zobrazit posuvník průhlednosti</string>
|
||||||
<string name="download_files_error_not_enough_space">Nedostatek místa!
|
<string name="download_files_error_not_enough_space">Nedostatek místa!
|
||||||
V úložišti je zapotřebí dočasně {3} MB a trvale {1} MB.
|
\nV úložišti je zapotřebí dočasně {3} MB a trvale {1} MB.
|
||||||
Aktuálně je k dispozici pouze {2} MB.</string>
|
\n(Aktuálně je k dispozici pouze {2} MB.)</string>
|
||||||
<string name="upload_osm_note">Nahrát OSM poznámku</string>
|
<string name="upload_osm_note">Nahrát OSM poznámku</string>
|
||||||
<string name="upload_osm_note_description">Nahrajte OSM poznámku anonymně, nebo prostřednictvím svého účtu OpenStreetMap.org.</string>
|
<string name="upload_osm_note_description">Nahrajte OSM poznámku anonymně, nebo prostřednictvím svého účtu OpenStreetMap.org.</string>
|
||||||
<string name="shared_string_move_up">Posunout ↑</string>
|
<string name="shared_string_move_up">Posunout ↑</string>
|
||||||
<string name="shared_string_move_down">Posunout ↓</string>
|
<string name="shared_string_move_down">Posunout ↓</string>
|
||||||
<string name="finish_navigation">Dokončit navigaci</string>
|
<string name="finish_navigation">Dokončit navigaci</string>
|
||||||
<string name="avoid_road">Vyhnout se cestě</string>
|
<string name="avoid_road">Vyhnout se cestě</string>
|
||||||
<string name="storage_directory_readonly_desc">Přepnuto do interní paměti, protože aktuálně vybraná složka je pouze pro čtení. Prosím zvolte složku v zapisovatelné paměti.</string>
|
<string name="storage_directory_readonly_desc">Přepnuto do interní paměti, protože aktuálně vybraná složka je chráněna proti zápisu. Prosím zvolte složku v zapisovatelné paměti.</string>
|
||||||
<string name="storage_directory_shared">Sdílená paměť</string>
|
<string name="storage_directory_shared">Sdílená paměť</string>
|
||||||
<string name="shared_string_topbar">Horní panel</string>
|
<string name="shared_string_topbar">Horní panel</string>
|
||||||
<string name="full_report">Celý výpis</string>
|
<string name="full_report">Celý výpis</string>
|
||||||
<string name="report">Výpis</string>
|
<string name="report">Výpis</string>
|
||||||
<string name="recalculate_route">Přepočítat trasu</string>
|
<string name="recalculate_route">Přepočítat trasu</string>
|
||||||
<string name="open_street_map_login_and_pass">OpenStreetMap uživatelské jméno a heslo</string>
|
<string name="open_street_map_login_and_pass">Uživatelské jméno a heslo pro OSM</string>
|
||||||
<string name="donations">Příspěvky</string>
|
<string name="donations">Příspěvky</string>
|
||||||
<string name="number_of_recipients">Počet příjemců</string>
|
<string name="number_of_recipients">Počet příjemců</string>
|
||||||
<string name="osm_user_stat">Počet úprav %1$s, pořadí %2$s, celkový počet úprav %3$s</string>
|
<string name="osm_user_stat">Počet úprav %1$s, pořadí %2$s, celkový počet úprav %3$s</string>
|
||||||
<string name="osm_editors_ranking">Pořadí OSM editorů</string>
|
<string name="osm_editors_ranking">Pořadí mezi editory OSM</string>
|
||||||
<string name="osm_live_subscription">Předplatné OsmAnd Live</string>
|
<string name="osm_live_subscription">Předplatné OsmAnd Live</string>
|
||||||
<string name="osm_live_subscribe_btn">Předplatit</string>
|
<string name="osm_live_subscribe_btn">Předplatit</string>
|
||||||
<string name="osm_live_email_desc">Nutné, abychom vás mohli informovat o příspěvcích.</string>
|
<string name="osm_live_email_desc">Nutné, abychom vás mohli informovat o vašich příspěvcích.</string>
|
||||||
<string name="osm_live_user_public_name">Veřejné jméno</string>
|
<string name="osm_live_user_public_name">Veřejné jméno</string>
|
||||||
<string name="osm_live_hide_user_name">Nezobrazovat mé jméno v hlášeních</string>
|
<string name="osm_live_hide_user_name">Nezobrazovat mé jméno v hlášeních</string>
|
||||||
<string name="osm_live_support_region">Oblast podpory</string>
|
<string name="osm_live_support_region">Oblast podpory</string>
|
||||||
<string name="osm_live_month_cost">Měsíční cena</string>
|
<string name="osm_live_month_cost">Cena za měsíc</string>
|
||||||
<string name="osm_live_month_cost_desc">Měsíční poplatek</string>
|
<string name="osm_live_month_cost_desc">Měsíční poplatek</string>
|
||||||
<string name="osm_live_active">Aktivní</string>
|
<string name="osm_live_active">Aktivní</string>
|
||||||
<string name="osm_live_not_active">Neaktivní</string>
|
<string name="osm_live_not_active">Neaktivní</string>
|
||||||
|
@ -1879,10 +1879,11 @@ Délka %2$s</string>
|
||||||
<string name="osm_live_region_desc">Část vašeho příspěvku bude zaslána uživatelům OSM, kteří upravují mapu ve zvolené oblasti.</string>
|
<string name="osm_live_region_desc">Část vašeho příspěvku bude zaslána uživatelům OSM, kteří upravují mapu ve zvolené oblasti.</string>
|
||||||
<string name="osm_live_subscription_settings">Nastavení předplatného</string>
|
<string name="osm_live_subscription_settings">Nastavení předplatného</string>
|
||||||
<string name="osm_live_ask_for_purchase">Nejprve prosím zakupte předplatné OsmAnd Live</string>
|
<string name="osm_live_ask_for_purchase">Nejprve prosím zakupte předplatné OsmAnd Live</string>
|
||||||
<string name="osm_live_header">Předplatné umožní hodinové aktualizace pro všechny mapy světa. Část příjmu jde zpět do OSM komunity a za každý příspěvek do OSM je vyplacena odměna. Pokud máte rádi OsmAnd a OSM, chcete je podpořit a být podporováni, toto je výborný způsob, jak to udělat.</string>
|
<string name="osm_live_header">Předplatné umožní hodinové aktualizace pro všechny mapy světa.
|
||||||
<string name="download_files_question_space_with_temp">Stáhnout {0} soubor(ů)?
|
\n Část příjmu jde zpět do OSM komunity a za každý příspěvek do OSM je vyplacena odměna.
|
||||||
V úložišti je zapotřebí dočasně {3} MB a trvale {1} MB.
|
\n Pokud máte rádi OsmAnd a OSM, chcete je podpořit a být podporováni, toto je výborný způsob, jak to udělat.</string>
|
||||||
(Aktuálně je k dispozici {2} MB.)</string>
|
<string name="download_files_question_space_with_temp">Stáhnout {0} soubor(ů)\?
|
||||||
|
\nV úložišti je zapotřebí dočasně {3} MB a trvale {1} MB. (Z {2} MB.)</string>
|
||||||
<string name="map_marker_1st">První mapová značka</string>
|
<string name="map_marker_1st">První mapová značka</string>
|
||||||
<string name="map_marker_2nd">Druhá mapová značka</string>
|
<string name="map_marker_2nd">Druhá mapová značka</string>
|
||||||
<string name="shared_string_toolbar">Panel nástrojů</string>
|
<string name="shared_string_toolbar">Panel nástrojů</string>
|
||||||
|
@ -1971,7 +1972,7 @@ Délka %2$s</string>
|
||||||
<string name="advanced_coords_search">Rozšířené hledání souřadnic</string>
|
<string name="advanced_coords_search">Rozšířené hledání souřadnic</string>
|
||||||
<string name="route_stops_before">%1$s zastávek před</string>
|
<string name="route_stops_before">%1$s zastávek před</string>
|
||||||
<string name="skip_map_downloading">Přeskočit stahování map</string>
|
<string name="skip_map_downloading">Přeskočit stahování map</string>
|
||||||
<string name="skip_map_downloading_desc">Nemáte nainstalovanou žádnou mapu. Můžete si vybrat mapu ze seznamu, nebo stáhnout mapy později přes \'Menu - %1$s\'.</string>
|
<string name="skip_map_downloading_desc">Nemáte nainstalovanou žádnou offline mapu. Můžete si vybrat mapu ze seznamu, nebo stáhnout mapy později přes \'Menu - %1$s\'.</string>
|
||||||
<string name="search_another_country">Vybrat jinou oblast</string>
|
<string name="search_another_country">Vybrat jinou oblast</string>
|
||||||
<string name="search_map">Hledání map…</string>
|
<string name="search_map">Hledání map…</string>
|
||||||
<string name="first_usage_wizard_desc">Povolit OsmAndu určit vaši polohu a navrhnout mapy pro tuto oblast.</string>
|
<string name="first_usage_wizard_desc">Povolit OsmAndu určit vaši polohu a navrhnout mapy pro tuto oblast.</string>
|
||||||
|
@ -1980,7 +1981,7 @@ Délka %2$s</string>
|
||||||
<string name="no_inet_connection_desc_map">Vyžadováno pro stažení map.</string>
|
<string name="no_inet_connection_desc_map">Vyžadováno pro stažení map.</string>
|
||||||
<string name="search_location">Hledání polohy…</string>
|
<string name="search_location">Hledání polohy…</string>
|
||||||
<string name="storage_free_space">Volné místo</string>
|
<string name="storage_free_space">Volné místo</string>
|
||||||
<string name="storage_place_description">Úložiště dat OsmAnd (pro mapy, GPX atd.): %1$s.</string>
|
<string name="storage_place_description">Úložiště dat OsmAnd (pro mapy, soubory stop atd.): %1$s.</string>
|
||||||
<string name="give_permission">Udělit oprávnění</string>
|
<string name="give_permission">Udělit oprávnění</string>
|
||||||
<string name="allow_access_location">Povolit přístup k poloze</string>
|
<string name="allow_access_location">Povolit přístup k poloze</string>
|
||||||
<string name="first_usage_greeting">Nechejte se navigovat a objevte nová místa bez nutnosti připojení k Internetu</string>
|
<string name="first_usage_greeting">Nechejte se navigovat a objevte nová místa bez nutnosti připojení k Internetu</string>
|
||||||
|
@ -1995,21 +1996,21 @@ Délka %2$s</string>
|
||||||
<string name="rendering_attr_hideOverground_name">Nadzemní objekty</string>
|
<string name="rendering_attr_hideOverground_name">Nadzemní objekty</string>
|
||||||
<string name="shared_string_change">Změnit</string>
|
<string name="shared_string_change">Změnit</string>
|
||||||
<string name="get_started">Začít</string>
|
<string name="get_started">Začít</string>
|
||||||
<string name="osm_live_payment_desc">Předplatné je strháváno měsíčně. Můžete jej kdykoliv zrušit přes Google Play.</string>
|
<string name="osm_live_payment_desc">Předplatné je strháváno za zvolené období. Můžete jej kdykoliv zrušit přes Google Play.</string>
|
||||||
<string name="donation_to_osm">Příspěvek komunitě OpenStreetMap</string>
|
<string name="donation_to_osm">Příspěvek komunitě OSM</string>
|
||||||
<string name="donation_to_osm_desc">Část peněz z Vašeho příspěvku je zaslána přímo uživatelům, kteří provádějí změny v databázi OpenStreetMap. Cena předplatného pro Vás však zůstává stejná.</string>
|
<string name="donation_to_osm_desc">Část peněz z vašeho příspěvku je zaslána přispěvatelům do OSM. Cena předplatného zůstává stejná.</string>
|
||||||
<string name="osm_live_subscription_desc">Předplatné umožňuje hodinové, denní, týdenní aktualizace a neomezené stahování map celého světa.</string>
|
<string name="osm_live_subscription_desc">Předplatné umožňuje hodinové, denní, týdenní aktualizace a neomezené stahování map celého světa.</string>
|
||||||
<string name="get_it">Získat</string>
|
<string name="get_it">Získat</string>
|
||||||
<string name="get_for">Získat za %1$s</string>
|
<string name="get_for">Získat za %1$s</string>
|
||||||
<string name="osm_live_banner_desc">Získejte neomezené stahování map a aktualizace více než jednou za měsíc: týdenní, denní nebo každou hodinu.</string>
|
<string name="osm_live_banner_desc">Získejte neomezené stahování map a aktualizace každý týden, den nebo dokonce hodinu.</string>
|
||||||
<string name="osmand_plus_banner_desc">Neomezené stahování map, aktualizací a modul Wikipedie.</string>
|
<string name="osmand_plus_banner_desc">Neomezené stahování map, aktualizací a modul Wikipedie.</string>
|
||||||
<string name="si_mi_meters">Míle/metry</string>
|
<string name="si_mi_meters">Míle/metry</string>
|
||||||
<string name="lang_hsb">Hornolužická srbština</string>
|
<string name="lang_hsb">Hornolužická srbština</string>
|
||||||
<string name="gpx_no_tracks_title">Nemáte zatím žádné soubory stop</string>
|
<string name="gpx_no_tracks_title">Nemáte zatím žádné soubory stop</string>
|
||||||
<string name="gpx_no_tracks_title_folder">Do složky můžete také přidat GPX soubory</string>
|
<string name="gpx_no_tracks_title_folder">Do složky můžete přidat také soubory stop</string>
|
||||||
<string name="gpx_add_track">Přidat další…</string>
|
<string name="gpx_add_track">Přidat další…</string>
|
||||||
<string name="shared_string_appearance">Vzhled</string>
|
<string name="shared_string_appearance">Vzhled</string>
|
||||||
<string name="trip_rec_notification_settings">Povolit rychlé spuštění záznamu</string>
|
<string name="trip_rec_notification_settings">Zapnout rychlý záznam</string>
|
||||||
<string name="trip_rec_notification_settings_desc">Zobrazit systémové oznámení, které umožňuje spustit nahrávání.</string>
|
<string name="trip_rec_notification_settings_desc">Zobrazit systémové oznámení, které umožňuje spustit nahrávání.</string>
|
||||||
<string name="shared_string_notifications">Oznámení</string>
|
<string name="shared_string_notifications">Oznámení</string>
|
||||||
<string name="shared_string_resume">Pokračovat</string>
|
<string name="shared_string_resume">Pokračovat</string>
|
||||||
|
@ -2027,8 +2028,8 @@ Délka %2$s</string>
|
||||||
<string name="save_track_precision">Minimální přesnost záznamu</string>
|
<string name="save_track_precision">Minimální přesnost záznamu</string>
|
||||||
<string name="save_track_precision_descr">Filtr: Nezaznamenávat, dokud není dosažena tato přesnost.</string>
|
<string name="save_track_precision_descr">Filtr: Nezaznamenávat, dokud není dosažena tato přesnost.</string>
|
||||||
<string name="christmas_poi">Vánoční POI</string>
|
<string name="christmas_poi">Vánoční POI</string>
|
||||||
<string name="christmas_desc">Před Vánoci a Novým rokem můžete zobrazit POI spojené s Vánoci: vánoční stromky, trhy atd.</string>
|
<string name="christmas_desc">Jako přípravu na Vánoce a Nový rok si můžete zapnout zobrazení tematických bodů zájmu, jako vánočních stromků, trhů atd.</string>
|
||||||
<string name="christmas_desc_q">Zobrazit vánoční POI?</string>
|
<string name="christmas_desc_q">Zobrazit vánoční body zájmu\?</string>
|
||||||
<string name="rendering_value_light_brown_name">Světle hnědá</string>
|
<string name="rendering_value_light_brown_name">Světle hnědá</string>
|
||||||
<string name="rendering_value_dark_brown_name">Tmavě hnědá</string>
|
<string name="rendering_value_dark_brown_name">Tmavě hnědá</string>
|
||||||
<string name="rendering_attr_contourColorScheme_name">Barevné schéma vrstevnic</string>
|
<string name="rendering_attr_contourColorScheme_name">Barevné schéma vrstevnic</string>
|
||||||
|
@ -3893,12 +3894,12 @@ Zobrazená oblast: %1$s x %2$s</string>
|
||||||
<string name="plugin_global_prefs_info">Tato nastavení jsou globální a platí pro všechny profily</string>
|
<string name="plugin_global_prefs_info">Tato nastavení jsou globální a platí pro všechny profily</string>
|
||||||
<string name="login_open_street_map">Přihlásit se do OpenStreetMap</string>
|
<string name="login_open_street_map">Přihlásit se do OpenStreetMap</string>
|
||||||
<string name="login_open_street_map_org">Přihlásit se do OpenStreetMap.org</string>
|
<string name="login_open_street_map_org">Přihlásit se do OpenStreetMap.org</string>
|
||||||
<string name="sign_in_with_open_street_map">Přihlásit se do OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Zaregistrovat se do OpenStreetMap</string>
|
||||||
<string name="osm_edits_view_descr">Můžete zobrazit své dosud neodeslané změny či chyby v OSM v %1$s. Odeslané body se již v OsmAnd nezobrazují.</string>
|
<string name="osm_edits_view_descr">Můžete zobrazit své dosud neodeslané změny či chyby v OSM v %1$s. Odeslané body se již v OsmAnd nezobrazují.</string>
|
||||||
<string name="open_street_map_login_mode">Přihlaste se, abyste mohli odesílat nová nebo změněná data,
|
<string name="open_street_map_login_mode">Abyste mohli odesílat nová nebo změněná data, musíte se přihlásit.
|
||||||
\n
|
\n
|
||||||
\nbuď pomocí bezpečné metody OAuth, nebo pomocí jména a hesla.</string>
|
\nPřihlásit se můžete pomocí bezpečné metody OAuth nebo jménem a heslem.</string>
|
||||||
<string name="use_login_password">Přihlásit se pomocí jména a hesla</string>
|
<string name="use_login_password">Použít jméno a heslo</string>
|
||||||
<string name="login_account">Účet</string>
|
<string name="login_account">Účet</string>
|
||||||
<string name="user_login">Uživatelské jméno</string>
|
<string name="user_login">Uživatelské jméno</string>
|
||||||
<string name="markers_history">Historie značek</string>
|
<string name="markers_history">Historie značek</string>
|
||||||
|
@ -3910,11 +3911,11 @@ Zobrazená oblast: %1$s x %2$s</string>
|
||||||
<string name="gpx_upload_identifiable_visibility_descr">\"Identifikovatelná\" znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Veřejná data bodů trasy s časovými razítky poskytnutá prostřednictvím GPS API se budou odkazovat na vaši původní stránku s trasou.</string>
|
<string name="gpx_upload_identifiable_visibility_descr">\"Identifikovatelná\" znamená, že trasa bude veřejně dostupná ve vašich GPS trasách a veřejných seznamech GPS tras, tzn. ostatní uživatelé si budou moci stáhnout nezpracovanou trasu a propojit ji s vaším uživatelským jménem. Veřejná data bodů trasy s časovými razítky poskytnutá prostřednictvím GPS API se budou odkazovat na vaši původní stránku s trasou.</string>
|
||||||
<string name="osm_edit_close_note">Zavřít OSM poznámku</string>
|
<string name="osm_edit_close_note">Zavřít OSM poznámku</string>
|
||||||
<string name="osm_edit_comment_note">Komentovat OSM poznámku</string>
|
<string name="osm_edit_comment_note">Komentovat OSM poznámku</string>
|
||||||
<string name="osm_login_descr">Přihlaste se bezpečnou metodou OAuth nebo použijte své přihlašovací jméno a heslo.</string>
|
<string name="osm_login_descr">Můžete se přihlásit bezpečnou metodou OAuth nebo použít své přihlašovací jméno a heslo.</string>
|
||||||
<string name="shared_string_add_photo">Přidat fotku</string>
|
<string name="shared_string_add_photo">Přidat fotku</string>
|
||||||
<string name="register_on_openplacereviews">Zaregistrovat na
|
<string name="register_on_openplacereviews">Zaregistrovat na
|
||||||
\nOpenPlaceReviews.org</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Přihlaste se na webových stránkách open source projektu OpenPlaceReviews.org a budete moci odesílat ještě více fotografií.</string>
|
<string name="register_on_openplacereviews_desc">Fotografie poskytuje open source projekt OpenPlaceReviews.org. Abyste mohli nahrát své fotografie, musíte se přihlásit na webové stránce.</string>
|
||||||
<string name="register_opr_create_new_account">Vytvořit nový účet</string>
|
<string name="register_opr_create_new_account">Vytvořit nový účet</string>
|
||||||
<string name="register_opr_have_account">Už mám účet</string>
|
<string name="register_opr_have_account">Už mám účet</string>
|
||||||
<string name="ltr_or_rtl_combine_via_colon">%1$s: %2$s</string>
|
<string name="ltr_or_rtl_combine_via_colon">%1$s: %2$s</string>
|
||||||
|
@ -3962,4 +3963,9 @@ Zobrazená oblast: %1$s x %2$s</string>
|
||||||
<string name="export_not_enough_space">Není zde dostatek místa</string>
|
<string name="export_not_enough_space">Není zde dostatek místa</string>
|
||||||
<string name="select_groups_for_import">Vyberte skupiny, které se mají importovat.</string>
|
<string name="select_groups_for_import">Vyberte skupiny, které se mají importovat.</string>
|
||||||
<string name="select_items_for_import">Vyberte položky, které se mají importovat.</string>
|
<string name="select_items_for_import">Vyberte položky, které se mají importovat.</string>
|
||||||
|
<string name="cannot_upload_image">Nepodařilo se odeslat obrázek, zkuste to prosím později</string>
|
||||||
|
<string name="select_picture">Vyberte obrázek</string>
|
||||||
|
<string name="use_dev_url_descr">Přepnout na dev.openstreetmap.org místo openstreetmap.org pro otestování odesílání OSM poznámek, bodů zájmu a GPX stop.</string>
|
||||||
|
<string name="use_dev_url">Použít dev.openstreetmap.org</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3957,13 +3957,13 @@
|
||||||
<string name="subscription_expired_title">OsmAnd Live Abonnement ist abgelaufen</string>
|
<string name="subscription_expired_title">OsmAnd Live Abonnement ist abgelaufen</string>
|
||||||
<string name="subscription_paused_title">OsmAnd Live Abonnement wurde ausgesetzt</string>
|
<string name="subscription_paused_title">OsmAnd Live Abonnement wurde ausgesetzt</string>
|
||||||
<string name="subscription_on_hold_title">OsmAnd Live Abonnement liegt auf Eis</string>
|
<string name="subscription_on_hold_title">OsmAnd Live Abonnement liegt auf Eis</string>
|
||||||
<string name="login_open_street_map">Anmeldung für OpenStreetMap</string>
|
<string name="login_open_street_map">Bei OpenStreetMap anmelden</string>
|
||||||
<string name="login_open_street_map_org">Anmeldung für OpenStreetMap.org</string>
|
<string name="login_open_street_map_org">Bei OpenStreetMap.org anmelden</string>
|
||||||
<string name="sign_in_with_open_street_map">Anmelden mit OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Anmelden mit OpenStreetMap</string>
|
||||||
<string name="open_street_map_login_mode">Melden Sie sich an, um Änderungen hochzuladen,
|
<string name="open_street_map_login_mode">Sie müssen sich anmelden, um Änderungen hochzuladen.
|
||||||
\n
|
\n
|
||||||
\nentweder mit OAuth oder mit Ihrem Benutzernamen und Passwort.</string>
|
\nSie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Ihr Passwort verwenden.</string>
|
||||||
<string name="use_login_password">Anmelden mit Benutzername und Passwort</string>
|
<string name="use_login_password">Benutzername und Passwort verwenden</string>
|
||||||
<string name="login_account">Konto</string>
|
<string name="login_account">Konto</string>
|
||||||
<string name="user_login">Benutzername</string>
|
<string name="user_login">Benutzername</string>
|
||||||
<string name="markers_history">Historie der Marker</string>
|
<string name="markers_history">Historie der Marker</string>
|
||||||
|
@ -3975,11 +3975,11 @@
|
||||||
<string name="gpx_upload_trackable_visibility_descr">\"Verfolgbar\" bedeutet, dass die Spur nicht in öffentlichen Auflistungen auftaucht, aber verarbeitete Trackpunkte mit Zeitstempeln davon (die nicht direkt mit Ihnen in Verbindung gebracht werden können) durch Downloads von der öffentlichen GPS API.</string>
|
<string name="gpx_upload_trackable_visibility_descr">\"Verfolgbar\" bedeutet, dass die Spur nicht in öffentlichen Auflistungen auftaucht, aber verarbeitete Trackpunkte mit Zeitstempeln davon (die nicht direkt mit Ihnen in Verbindung gebracht werden können) durch Downloads von der öffentlichen GPS API.</string>
|
||||||
<string name="osm_edit_close_note">OSM Notiz schließen</string>
|
<string name="osm_edit_close_note">OSM Notiz schließen</string>
|
||||||
<string name="osm_edit_comment_note">OSM Notiz kommentieren</string>
|
<string name="osm_edit_comment_note">OSM Notiz kommentieren</string>
|
||||||
<string name="osm_login_descr">Melden Sie sich mit der sicheren OAuth-Methode an oder verwenden Sie Ihren Benutzernamen und Ihr Passwort.</string>
|
<string name="osm_login_descr">Sie können sich mit der sicheren OAuth-Methode anmelden oder Ihren Benutzernamen und Ihr Passwort verwenden.</string>
|
||||||
<string name="shared_string_add_photo">Foto hinzufügen</string>
|
<string name="shared_string_add_photo">Foto hinzufügen</string>
|
||||||
<string name="register_on_openplacereviews">Registrieren bei
|
<string name="register_on_openplacereviews">Registrieren bei
|
||||||
\nOpenPlaceReviews.org</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Melden Sie sich auf der Open Data Website OpenPlaceReviews.org an, um noch mehr Fotos hochzuladen.</string>
|
<string name="register_on_openplacereviews_desc">Fotos werden vom offenen Datenprojekt OpenPlaceReviews.org zur Verfügung gestellt. Um Ihre Fotos hochladen zu können, müssen Sie sich auf der Website anmelden.</string>
|
||||||
<string name="register_opr_create_new_account">Neues Konto erstellen</string>
|
<string name="register_opr_create_new_account">Neues Konto erstellen</string>
|
||||||
<string name="register_opr_have_account">Ich habe bereits ein Konto</string>
|
<string name="register_opr_have_account">Ich habe bereits ein Konto</string>
|
||||||
<string name="shared_string_search_history">Suchverlauf</string>
|
<string name="shared_string_search_history">Suchverlauf</string>
|
||||||
|
@ -4001,4 +4001,7 @@
|
||||||
<string name="select_items_for_import">Wählen Sie Elemente aus, die importiert werden sollen.</string>
|
<string name="select_items_for_import">Wählen Sie Elemente aus, die importiert werden sollen.</string>
|
||||||
<string name="use_dev_url_descr">Wechseln Sie zu dev.openstreetmap.org anstelle von openstreetmap.org, um das Hochladen von OSM-Hinweisen / POI / GPX zu testen.</string>
|
<string name="use_dev_url_descr">Wechseln Sie zu dev.openstreetmap.org anstelle von openstreetmap.org, um das Hochladen von OSM-Hinweisen / POI / GPX zu testen.</string>
|
||||||
<string name="use_dev_url">dev.openstreetmap.org verwenden</string>
|
<string name="use_dev_url">dev.openstreetmap.org verwenden</string>
|
||||||
|
<string name="cannot_upload_image">Bild kann nicht hochgeladen werden, bitte versuchen Sie es später erneut</string>
|
||||||
|
<string name="select_picture">Bild auswählen</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3955,12 +3955,12 @@
|
||||||
<string name="login_open_street_map">Ensaluti al OpenStreetMap</string>
|
<string name="login_open_street_map">Ensaluti al OpenStreetMap</string>
|
||||||
<string name="login_open_street_map_org">Ensaluti al OpenStreetMap.org</string>
|
<string name="login_open_street_map_org">Ensaluti al OpenStreetMap.org</string>
|
||||||
<string name="sign_in_with_open_street_map">Ensaluti per OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Ensaluti per OpenStreetMap</string>
|
||||||
<string name="open_street_map_login_mode">Ensalutu por alŝuti novajn aŭ modifitajn ŝanĝojn
|
<string name="open_street_map_login_mode">Vi devas ensaluti por alŝuti novajn aŭ modifitajn ŝanĝojn.
|
||||||
\n
|
\n
|
||||||
\naŭ per la sekura metodo OAuth aŭ per enigi uzantnomon kaj pasvorton.</string>
|
\nVi povas ensaluti per la sekura metodo OAuth aŭ per enigi salutnomon kaj pasvorton.</string>
|
||||||
<string name="use_login_password">Ensaluti per uzantnomo kaj pasvorto</string>
|
<string name="use_login_password">Ensaluti per salutnomo kaj pasvorto</string>
|
||||||
<string name="login_account">Konto</string>
|
<string name="login_account">Konto</string>
|
||||||
<string name="user_login">Uzantnomo</string>
|
<string name="user_login">Salutnomo</string>
|
||||||
<string name="markers_history">Historio de markoj</string>
|
<string name="markers_history">Historio de markoj</string>
|
||||||
<string name="send_files_to_openstreetmap">Sendi GPX‑dosieron al OpenStreetMap</string>
|
<string name="send_files_to_openstreetmap">Sendi GPX‑dosieron al OpenStreetMap</string>
|
||||||
<string name="enter_text_separated">Enigu etikedojn disigitajn per komo (,).</string>
|
<string name="enter_text_separated">Enigu etikedojn disigitajn per komo (,).</string>
|
||||||
|
@ -3970,11 +3970,11 @@
|
||||||
<string name="gpx_upload_trackable_visibility_descr">“Spurebla” signifas, ke la GPX‑spuro ne montriĝos en publikaj listoj, sed pritraktitaj punktoj kun tempindikoj el ĝi (kiuj ne povos esti senpere ligitaj al vi) estos elŝuteblaj per la publika API GPS.</string>
|
<string name="gpx_upload_trackable_visibility_descr">“Spurebla” signifas, ke la GPX‑spuro ne montriĝos en publikaj listoj, sed pritraktitaj punktoj kun tempindikoj el ĝi (kiuj ne povos esti senpere ligitaj al vi) estos elŝuteblaj per la publika API GPS.</string>
|
||||||
<string name="osm_edit_close_note">Fermi OSM-rimarkon</string>
|
<string name="osm_edit_close_note">Fermi OSM-rimarkon</string>
|
||||||
<string name="osm_edit_comment_note">Komenti OSM-rimarkon</string>
|
<string name="osm_edit_comment_note">Komenti OSM-rimarkon</string>
|
||||||
<string name="osm_login_descr">Ensalutii per la sekura metodo OAuth aŭ per uzi uzantnomon kaj pasvorton.</string>
|
<string name="osm_login_descr">Vi povas ensalutii per la sekura metodo OAuth aŭ per uzi salutnomon kaj pasvorton.</string>
|
||||||
<string name="shared_string_add_photo">Aldoni foton</string>
|
<string name="shared_string_add_photo">Aldoni foton</string>
|
||||||
<string name="register_on_openplacereviews">Registri ĉe
|
<string name="register_on_openplacereviews">Registri ĉe
|
||||||
\nOpenPlaceReviews.org</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Ensaluti en la paĝon de la malferm‑datuma projekto OpenPlaceReviews.org por alŝuti fotojn.</string>
|
<string name="register_on_openplacereviews_desc">Fotoj estas liverataj de la malferm‑datuma projekto OpenPlaceReviews.org. Por alŝuti viajn fotojn, vi devas enlasaluti en la retejon.</string>
|
||||||
<string name="register_opr_create_new_account">Krei novan konton</string>
|
<string name="register_opr_create_new_account">Krei novan konton</string>
|
||||||
<string name="register_opr_have_account">Mi jam havas konton</string>
|
<string name="register_opr_have_account">Mi jam havas konton</string>
|
||||||
<string name="shared_string_search_history">Serĉi en historio</string>
|
<string name="shared_string_search_history">Serĉi en historio</string>
|
||||||
|
@ -3996,4 +3996,7 @@
|
||||||
<string name="select_items_for_import">Elektu elementojn por enporti.</string>
|
<string name="select_items_for_import">Elektu elementojn por enporti.</string>
|
||||||
<string name="use_dev_url_descr">Baskuli al dev.openstreetmap.org anstataŭ openstreetmap.org por testi alŝuti OSM‑rimarkojn, interesejojn, GPX‑spurojn.</string>
|
<string name="use_dev_url_descr">Baskuli al dev.openstreetmap.org anstataŭ openstreetmap.org por testi alŝuti OSM‑rimarkojn, interesejojn, GPX‑spurojn.</string>
|
||||||
<string name="use_dev_url">Uzi dev.openstreetmap.org</string>
|
<string name="use_dev_url">Uzi dev.openstreetmap.org</string>
|
||||||
|
<string name="cannot_upload_image">Ne povas alŝuti la bildon, reprovu poste</string>
|
||||||
|
<string name="select_picture">Elektu bildon</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -459,7 +459,7 @@
|
||||||
<string name="rendering_attr_hidePOILabels_name">POI sildid</string>
|
<string name="rendering_attr_hidePOILabels_name">POI sildid</string>
|
||||||
<string name="will_open_tomorrow_at">Avaneb homme kell</string>
|
<string name="will_open_tomorrow_at">Avaneb homme kell</string>
|
||||||
<string name="show_closed_notes">Kuva suletud teated</string>
|
<string name="show_closed_notes">Kuva suletud teated</string>
|
||||||
<string name="switch_osm_notes_visibility_desc">Kuva/peida OSM teated kaardil.</string>
|
<string name="switch_osm_notes_visibility_desc">Kuva või peida OSM teated kaardil.</string>
|
||||||
<string name="osc_file_desc">OSC - sobib andmete laadimiseks OpenStreetMap\'i andmebaasi.</string>
|
<string name="osc_file_desc">OSC - sobib andmete laadimiseks OpenStreetMap\'i andmebaasi.</string>
|
||||||
<string name="osc_file">OSC fail</string>
|
<string name="osc_file">OSC fail</string>
|
||||||
<string name="choose_file_type">Vali faililiik</string>
|
<string name="choose_file_type">Vali faililiik</string>
|
||||||
|
@ -1012,7 +1012,7 @@
|
||||||
<string name="swap_two_places">Vaheta %1$s ja %2$s</string>
|
<string name="swap_two_places">Vaheta %1$s ja %2$s</string>
|
||||||
<string name="route_start_point">Lähtepunkt</string>
|
<string name="route_start_point">Lähtepunkt</string>
|
||||||
<string name="track_saved">Rada salvestatud</string>
|
<string name="track_saved">Rada salvestatud</string>
|
||||||
<string name="empty_filename">Faili nimi on tühi</string>
|
<string name="empty_filename">Faili nimi on puudu</string>
|
||||||
<string name="shared_string_revert">Ennista</string>
|
<string name="shared_string_revert">Ennista</string>
|
||||||
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Kuva sõlmevõrgu rattateekonnad</string>
|
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Kuva sõlmevõrgu rattateekonnad</string>
|
||||||
<string name="clear_confirmation_msg">Tühjenda %1$s\?</string>
|
<string name="clear_confirmation_msg">Tühjenda %1$s\?</string>
|
||||||
|
@ -2653,9 +2653,9 @@
|
||||||
<string name="keep_passed_markers_descr">Lemmikute või GPX-teekonnapunktide grupina lisatud markerid, mis on märgitud läbituks, jäävad kaardile. Kui grupp pole aktiivne, kaovad markerid kaardilt.</string>
|
<string name="keep_passed_markers_descr">Lemmikute või GPX-teekonnapunktide grupina lisatud markerid, mis on märgitud läbituks, jäävad kaardile. Kui grupp pole aktiivne, kaovad markerid kaardilt.</string>
|
||||||
<string name="shared_string_launch">Käivita</string>
|
<string name="shared_string_launch">Käivita</string>
|
||||||
<string name="lang_gn_py">Guaraani</string>
|
<string name="lang_gn_py">Guaraani</string>
|
||||||
<string name="routing_attr_piste_type_downhill_name">Alpisuusatamine/laskumine</string>
|
<string name="routing_attr_piste_type_downhill_name">Alpisuusatamine ja mäesuusatamine</string>
|
||||||
<string name="routing_attr_piste_type_downhill_description">Nõlvad alpisuusatamisks või laskumiseks ja ligipääs suusatõstukitele.</string>
|
<string name="routing_attr_piste_type_downhill_description">Nõlvad alpisuusatamisks või laskumiseks ja ligipääs suusatõstukitele.</string>
|
||||||
<string name="routing_attr_piste_type_nordic_name">Murdmaa/põhjamaa suusatamine</string>
|
<string name="routing_attr_piste_type_nordic_name">Murdmaasuusatamine ja põhja suusaalad</string>
|
||||||
<string name="routing_attr_piste_type_nordic_description">Murdmaa või põhjamaa suusatamise rajad.</string>
|
<string name="routing_attr_piste_type_nordic_description">Murdmaa või põhjamaa suusatamise rajad.</string>
|
||||||
<string name="routing_attr_piste_type_skitour_name">Suusamatkad</string>
|
<string name="routing_attr_piste_type_skitour_name">Suusamatkad</string>
|
||||||
<string name="routing_attr_piste_type_skitour_description">Suusamatkarajad.</string>
|
<string name="routing_attr_piste_type_skitour_description">Suusamatkarajad.</string>
|
||||||
|
@ -3774,7 +3774,7 @@
|
||||||
\nTellimust saad hallata ja tühistada AppGallery seadistustest.</string>
|
\nTellimust saad hallata ja tühistada AppGallery seadistustest.</string>
|
||||||
<string name="osm_live_payment_desc_hw">Arveldame tellimuse eest valitud ajavahemiku alusel. Seda saad sa vabalt valitud ajal tühistada AppGallery\'s.</string>
|
<string name="osm_live_payment_desc_hw">Arveldame tellimuse eest valitud ajavahemiku alusel. Seda saad sa vabalt valitud ajal tühistada AppGallery\'s.</string>
|
||||||
<string name="use_complex_routing">Keeruka teekonna koostamine</string>
|
<string name="use_complex_routing">Keeruka teekonna koostamine</string>
|
||||||
<string name="osm_edit_logout_success">Väljalogimine õnnestus</string>
|
<string name="osm_edit_logout_success">Väljalogitud</string>
|
||||||
<string name="development">Arendus</string>
|
<string name="development">Arendus</string>
|
||||||
<string name="clear_osm_token">Kustuta OpenStreetMap\'i OAuth\'i pääsuluba</string>
|
<string name="clear_osm_token">Kustuta OpenStreetMap\'i OAuth\'i pääsuluba</string>
|
||||||
<string name="perform_oauth_authorization">Logi sisse OAuth abil</string>
|
<string name="perform_oauth_authorization">Logi sisse OAuth abil</string>
|
||||||
|
@ -3809,7 +3809,7 @@
|
||||||
<string name="use_login_password">Pruugi kasutajanime ja salasõna</string>
|
<string name="use_login_password">Pruugi kasutajanime ja salasõna</string>
|
||||||
<string name="open_street_map_login_mode">Täienduste või muudatuste üleslaadimiseks pead sisse logima.
|
<string name="open_street_map_login_mode">Täienduste või muudatuste üleslaadimiseks pead sisse logima.
|
||||||
\n
|
\n
|
||||||
\nSa võid selleks kasutada mõnd turvalust OAuth võimalust või oma kasutajanime ning salasõna.</string>
|
\nSa võid selleks kasutada mõnd turvalist OAuth võimalust või oma kasutajanime ning salasõna.</string>
|
||||||
<string name="login_account">Kasutajakonto</string>
|
<string name="login_account">Kasutajakonto</string>
|
||||||
<string name="send_files_to_openstreetmap">Saada GPX fail OpenStreetMappi</string>
|
<string name="send_files_to_openstreetmap">Saada GPX fail OpenStreetMappi</string>
|
||||||
<string name="osm_edit_close_note">Sulge OSM märkus</string>
|
<string name="osm_edit_close_note">Sulge OSM märkus</string>
|
||||||
|
@ -3821,4 +3821,25 @@
|
||||||
<string name="register_on_openplacereviews_desc">Fotode allikaks on OpenPlaceReviews.org veebisait. Oma fotode üleslaadimiseks peaksid liituma selle veebisaidi kasutajaks.</string>
|
<string name="register_on_openplacereviews_desc">Fotode allikaks on OpenPlaceReviews.org veebisait. Oma fotode üleslaadimiseks peaksid liituma selle veebisaidi kasutajaks.</string>
|
||||||
<string name="register_opr_create_new_account">Loo uus kasutajakonto</string>
|
<string name="register_opr_create_new_account">Loo uus kasutajakonto</string>
|
||||||
<string name="register_opr_have_account">Mul juba on kasutajakonto olemas</string>
|
<string name="register_opr_have_account">Mul juba on kasutajakonto olemas</string>
|
||||||
|
<string name="shared_string_search_history">Otsinguajalugu</string>
|
||||||
|
<string name="app_mode_kayak">Süst (merekajak)</string>
|
||||||
|
<string name="app_mode_motorboat">Mootorpaat</string>
|
||||||
|
<string name="cannot_upload_image">Pildi üleslaadimine ei õnnestunud, palun proovi hiljem uuesti</string>
|
||||||
|
<string name="select_picture">Vali pilt</string>
|
||||||
|
<string name="shared_string_resources">Ressursid</string>
|
||||||
|
<string name="approximate_file_size">Faili ligikaudne suurus</string>
|
||||||
|
<string name="select_data_to_export">Vali faili eksporditavad andmed.</string>
|
||||||
|
<string name="file_size_needed_for_import">Importimiseks vajalik</string>
|
||||||
|
<string name="export_not_enough_space_descr">Sinu nutiseadmes on vaba ruumi vaid %1$s. Palun tee ruumi juurde või jäta osa kirjetest eksportimata.</string>
|
||||||
|
<string name="export_not_enough_space">Pole piisavalt ruumi</string>
|
||||||
|
<string name="select_groups_for_import">Vali imporditavad grupid.</string>
|
||||||
|
<string name="select_items_for_import">Vali imporditavad kirjed.</string>
|
||||||
|
<string name="add_to_mapillary">Lisa Mapillary saiti</string>
|
||||||
|
<string name="add_to_opr">Lisa OpenPlaceReviews saiti</string>
|
||||||
|
<string name="use_dev_url_descr">Tavasaidi openstreetmap.org asemel kasuta OSM märkuste, huvipunktide või GPX-failide üleslaadimise katsetamiseks arendussaiti dev.openstreetmap.org.</string>
|
||||||
|
<string name="use_dev_url">Kasuta dev.openstreetmap.org saiti</string>
|
||||||
|
<string name="add_photos_descr">OsmAnd kuvam fotosid mitmetest allikatest:
|
||||||
|
\nOpenPlaceReviews - huvipunkti fotod;
|
||||||
|
\nMapillary - tänavavaated;
|
||||||
|
\nWikimedia või veeb - OpenStreetMap\'i andmetes kirjeldatud fotod.</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3952,7 +3952,7 @@
|
||||||
\n
|
\n
|
||||||
\nsoit avec OAuth soit avec votre identifiant et mot de passe.</string>
|
\nsoit avec OAuth soit avec votre identifiant et mot de passe.</string>
|
||||||
<string name="osm_login_descr">Vous pouvez vous connecter avec la méthode sécurisée OAuth ou avec votre identifiant et votre mot de passe.</string>
|
<string name="osm_login_descr">Vous pouvez vous connecter avec la méthode sécurisée OAuth ou avec votre identifiant et votre mot de passe.</string>
|
||||||
<string name="register_on_openplacereviews_desc">Connectez-vous au site web du projet OpenPlaceReviews.org pour ajouter des photos.</string>
|
<string name="register_on_openplacereviews_desc">Les photos sont fournies par le projet OpenPlaceReviews.org. Vous devez vous connecter au site web pour envoyer vos photos.</string>
|
||||||
<string name="shared_string_search_history">Historique de recherche</string>
|
<string name="shared_string_search_history">Historique de recherche</string>
|
||||||
<string name="app_mode_kayak">Kayak</string>
|
<string name="app_mode_kayak">Kayak</string>
|
||||||
<string name="export_not_enough_space_descr">Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments.</string>
|
<string name="export_not_enough_space_descr">Votre appareil n\'a que %1$s disponible. Veuillez libérer de l\'espace ou désélectionner l\'export pour certains éléments.</string>
|
||||||
|
@ -3975,4 +3975,5 @@
|
||||||
<string name="select_items_for_import">Sélectionnez les objets à importer.</string>
|
<string name="select_items_for_import">Sélectionnez les objets à importer.</string>
|
||||||
<string name="cannot_upload_image">Impossible d\'envoyer l\'image, veuillez réessayer plus tard</string>
|
<string name="cannot_upload_image">Impossible d\'envoyer l\'image, veuillez réessayer plus tard</string>
|
||||||
<string name="select_picture">Sélectionnez une image</string>
|
<string name="select_picture">Sélectionnez une image</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4023,4 +4023,5 @@ Lon %2$s</string>
|
||||||
\nOpenPlaceReviews - imaxes POI;
|
\nOpenPlaceReviews - imaxes POI;
|
||||||
\nMapillary - maxes a nivel de rúa;
|
\nMapillary - maxes a nivel de rúa;
|
||||||
\nWeb / Wikimedia - imaxes POI especificadas nos datos do OpenStreetMap.</string>
|
\nWeb / Wikimedia - imaxes POI especificadas nos datos do OpenStreetMap.</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3997,4 +3997,5 @@
|
||||||
<string name="use_dev_url">Utilizza dev.openstreetmap.org</string>
|
<string name="use_dev_url">Utilizza dev.openstreetmap.org</string>
|
||||||
<string name="cannot_upload_image">Impossibile caricare l\'immagine, riprovare in seguito</string>
|
<string name="cannot_upload_image">Impossibile caricare l\'immagine, riprovare in seguito</string>
|
||||||
<string name="select_picture">Scegli la foto</string>
|
<string name="select_picture">Scegli la foto</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3994,4 +3994,5 @@
|
||||||
<string name="use_dev_url">Usar dev.openstreetmap.org</string>
|
<string name="use_dev_url">Usar dev.openstreetmap.org</string>
|
||||||
<string name="cannot_upload_image">Não é possível carregar a imagem, por favor, tente novamente mais tarde</string>
|
<string name="cannot_upload_image">Não é possível carregar a imagem, por favor, tente novamente mais tarde</string>
|
||||||
<string name="select_picture">Selecione a foto</string>
|
<string name="select_picture">Selecione a foto</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1682,7 +1682,7 @@
|
||||||
<string name="osm_live_user_public_name">Nome público</string>
|
<string name="osm_live_user_public_name">Nome público</string>
|
||||||
<string name="osm_live_hide_user_name">Não mostrar o meu nome nos relatórios</string>
|
<string name="osm_live_hide_user_name">Não mostrar o meu nome nos relatórios</string>
|
||||||
<string name="osm_live_support_region">Região de suporte</string>
|
<string name="osm_live_support_region">Região de suporte</string>
|
||||||
<string name="file_name_containes_illegal_char">O nome do ficheiro contém um carácter inválido</string>
|
<string name="file_name_containes_illegal_char">Carácter inválido no nome do ficheiro</string>
|
||||||
<string name="reports_for">Relatório para</string>
|
<string name="reports_for">Relatório para</string>
|
||||||
<string name="number_of_contributors">Número de colaboradores</string>
|
<string name="number_of_contributors">Número de colaboradores</string>
|
||||||
<string name="number_of_edits">Número de edições</string>
|
<string name="number_of_edits">Número de edições</string>
|
||||||
|
@ -2301,7 +2301,7 @@
|
||||||
<string name="first_intermediate_dest_description">Adiciona paragem inicial</string>
|
<string name="first_intermediate_dest_description">Adiciona paragem inicial</string>
|
||||||
<string name="subsequent_dest_description">Mover o destino para cima e criá-lo</string>
|
<string name="subsequent_dest_description">Mover o destino para cima e criá-lo</string>
|
||||||
<string name="show_closed_notes">Mostrar anotações fechadas</string>
|
<string name="show_closed_notes">Mostrar anotações fechadas</string>
|
||||||
<string name="switch_osm_notes_visibility_desc">Mostrar/esconder anotações do OSM no mapa.</string>
|
<string name="switch_osm_notes_visibility_desc">Mostrar ou ocultar anotações do OSM no mapa.</string>
|
||||||
<string name="gpx_file_desc">GPX - adequado para exportar para o JOSM ou outros editores do OSM.</string>
|
<string name="gpx_file_desc">GPX - adequado para exportar para o JOSM ou outros editores do OSM.</string>
|
||||||
<string name="osc_file_desc">OSC - adequado para exportar para o OSM.</string>
|
<string name="osc_file_desc">OSC - adequado para exportar para o OSM.</string>
|
||||||
<string name="shared_string_gpx_file">Ficheiro GPX</string>
|
<string name="shared_string_gpx_file">Ficheiro GPX</string>
|
||||||
|
@ -3084,9 +3084,9 @@
|
||||||
<string name="zoom_by_wunderlinq_descr">Alterar o zoom do mapa deslocando a roda para cima e para baixo. Escapar devolve-o à aplicação WunderLINQ.</string>
|
<string name="zoom_by_wunderlinq_descr">Alterar o zoom do mapa deslocando a roda para cima e para baixo. Escapar devolve-o à aplicação WunderLINQ.</string>
|
||||||
<string name="zoom_by_wunderlinq">Usar WunderLINQ para controle</string>
|
<string name="zoom_by_wunderlinq">Usar WunderLINQ para controle</string>
|
||||||
<string name="quick_action_need_to_add_item_to_list">Adicione pelo menos um item à lista nas configurações de \'Ação rápida\'</string>
|
<string name="quick_action_need_to_add_item_to_list">Adicione pelo menos um item à lista nas configurações de \'Ação rápida\'</string>
|
||||||
<string name="routing_attr_piste_type_downhill_name">Esqui alpino/downhill</string>
|
<string name="routing_attr_piste_type_downhill_name">Esqui alpino e downhill</string>
|
||||||
<string name="routing_attr_piste_type_downhill_description">Pistas para esqui alpino ou downhill e acesso a teleféricos de esqui.</string>
|
<string name="routing_attr_piste_type_downhill_description">Pistas para esqui alpino ou downhill e acesso a teleféricos de esqui.</string>
|
||||||
<string name="routing_attr_piste_type_nordic_name">Cross Country/esqui nórdico</string>
|
<string name="routing_attr_piste_type_nordic_name">Cross Country e esqui nórdico</string>
|
||||||
<string name="routing_attr_piste_type_nordic_description">Trilhas para esqui nórdico ou cross-country.</string>
|
<string name="routing_attr_piste_type_nordic_description">Trilhas para esqui nórdico ou cross-country.</string>
|
||||||
<string name="routing_attr_piste_type_skitour_name">Passeios de esqui</string>
|
<string name="routing_attr_piste_type_skitour_name">Passeios de esqui</string>
|
||||||
<string name="routing_attr_piste_type_skitour_description">Rotas para excursões de esqui.</string>
|
<string name="routing_attr_piste_type_skitour_description">Rotas para excursões de esqui.</string>
|
||||||
|
@ -3425,7 +3425,7 @@
|
||||||
<string name="shared_string_hillshade">Sombras de relevo</string>
|
<string name="shared_string_hillshade">Sombras de relevo</string>
|
||||||
<string name="n_items_of_z">%1$s de %2$s</string>
|
<string name="n_items_of_z">%1$s de %2$s</string>
|
||||||
<string name="download_slope_maps">Pistas</string>
|
<string name="download_slope_maps">Pistas</string>
|
||||||
<string name="quick_action_show_hide_terrain">Mostrar / ocultar terreno</string>
|
<string name="quick_action_show_hide_terrain">Mostrar ou ocultar terrenos</string>
|
||||||
<string name="quick_action_terrain_hide">Ocultar terreno</string>
|
<string name="quick_action_terrain_hide">Ocultar terreno</string>
|
||||||
<string name="quick_action_terrain_show">Mostrar terreno</string>
|
<string name="quick_action_terrain_show">Mostrar terreno</string>
|
||||||
<string name="quick_action_terrain_descr">Um botão para mostrar ou esconder a camada do terreno no mapa.</string>
|
<string name="quick_action_terrain_descr">Um botão para mostrar ou esconder a camada do terreno no mapa.</string>
|
||||||
|
@ -3676,11 +3676,11 @@
|
||||||
<string name="search_poi_types_descr">Combinar categorias de POI de categorias diferentes. Toque em trocar para selecionar tudo, toque no lado esquerdo para seleção da categoria.</string>
|
<string name="search_poi_types_descr">Combinar categorias de POI de categorias diferentes. Toque em trocar para selecionar tudo, toque no lado esquerdo para seleção da categoria.</string>
|
||||||
<string name="quick_action_transport_hide">Ocultar o transporte público</string>
|
<string name="quick_action_transport_hide">Ocultar o transporte público</string>
|
||||||
<string name="quick_action_transport_show">Mostrar transporte público</string>
|
<string name="quick_action_transport_show">Mostrar transporte público</string>
|
||||||
<string name="quick_action_show_hide_transport">Mostrar/ocultar transporte público</string>
|
<string name="quick_action_show_hide_transport">Mostrar ou ocultar transportes públicos</string>
|
||||||
<string name="quick_action_transport_descr">Botão que mostra ou oculta o transporte público no mapa.</string>
|
<string name="quick_action_transport_descr">Botão que mostra ou oculta o transporte público no mapa.</string>
|
||||||
<string name="create_edit_poi">Criar / Editar POI</string>
|
<string name="create_edit_poi">Criar ou editar um POI</string>
|
||||||
<string name="parking_positions">Posições de estacionamento</string>
|
<string name="parking_positions">Posições de estacionamento</string>
|
||||||
<string name="add_edit_favorite">Adicionar / Editar Favorito</string>
|
<string name="add_edit_favorite">Adicionar ou editar um favorito</string>
|
||||||
<string name="reset_deafult_order">Restaurar ordem de itens padrão</string>
|
<string name="reset_deafult_order">Restaurar ordem de itens padrão</string>
|
||||||
<string name="back_to_editing">Voltar à edição</string>
|
<string name="back_to_editing">Voltar à edição</string>
|
||||||
<string name="quick_action_switch_profile_descr">O botão de ação alterna entre os perfis selecionados.</string>
|
<string name="quick_action_switch_profile_descr">O botão de ação alterna entre os perfis selecionados.</string>
|
||||||
|
@ -3869,7 +3869,7 @@
|
||||||
<string name="context_menu_item_add_waypoint">Adicionar ponto de passagem de trilha</string>
|
<string name="context_menu_item_add_waypoint">Adicionar ponto de passagem de trilha</string>
|
||||||
<string name="map_widget_monitoring">Gravação de viagem</string>
|
<string name="map_widget_monitoring">Gravação de viagem</string>
|
||||||
<string name="monitoring_control_start">REC</string>
|
<string name="monitoring_control_start">REC</string>
|
||||||
<string name="save_global_track_interval_descr">Especifique o intervalo de registo para a gravação geral da faixa (ativado através do widget de gravação Trip no mapa).</string>
|
<string name="save_global_track_interval_descr">Especifique o intervalo de registo para a gravação geral do trilho (ligado através do widget de \'gravação de viagem\' no mapa).</string>
|
||||||
<string name="gpx_monitoring_stop">Pausar a gravação da viagem</string>
|
<string name="gpx_monitoring_stop">Pausar a gravação da viagem</string>
|
||||||
<string name="gpx_monitoring_start">Retomar a gravação da viagem</string>
|
<string name="gpx_monitoring_start">Retomar a gravação da viagem</string>
|
||||||
<string name="system_default_theme">Predefinição do sistema</string>
|
<string name="system_default_theme">Predefinição do sistema</string>
|
||||||
|
@ -3890,7 +3890,7 @@
|
||||||
<string name="disable_recording_once_app_killed_descrp">Vai pausar o registo de faixas quando a app for morta (através de apps recentes). (indicação de fundo de OsmAnd desaparece da barra de notificação do Android.)</string>
|
<string name="disable_recording_once_app_killed_descrp">Vai pausar o registo de faixas quando a app for morta (através de apps recentes). (indicação de fundo de OsmAnd desaparece da barra de notificação do Android.)</string>
|
||||||
<string name="release_3_8">- Função atualizada de Planear uma rota: permite utilizar diferentes tipos de navegação por segmento e a inclusão de faixas
|
<string name="release_3_8">- Função atualizada de Planear uma rota: permite utilizar diferentes tipos de navegação por segmento e a inclusão de faixas
|
||||||
\n
|
\n
|
||||||
\n - Novo menu Aparência para trilhos: selecionar cor, espessura, setas de direção de visualização, ícones de início/fim
|
\n - Novo menu Aparência para trilhos: selecionar cor, espessura, setas de direção de visualização, ícones de início e fim
|
||||||
\n
|
\n
|
||||||
\n - Melhoria da visibilidade dos nós da bicicleta.
|
\n - Melhoria da visibilidade dos nós da bicicleta.
|
||||||
\n
|
\n
|
||||||
|
@ -3906,7 +3906,7 @@
|
||||||
<string name="sort_last_modified">Última modificação</string>
|
<string name="sort_last_modified">Última modificação</string>
|
||||||
<string name="sort_name_descending">Nome: Z – A</string>
|
<string name="sort_name_descending">Nome: Z – A</string>
|
||||||
<string name="sort_name_ascending">Nome: A – Z</string>
|
<string name="sort_name_ascending">Nome: A – Z</string>
|
||||||
<string name="start_finish_icons">Ícones de início/fim</string>
|
<string name="start_finish_icons">Ícones de início e fim</string>
|
||||||
<string name="contour_lines_thanks">Obrigado por comprar \'Curvas de nível\'</string>
|
<string name="contour_lines_thanks">Obrigado por comprar \'Curvas de nível\'</string>
|
||||||
<string name="osm_live_payment_desc_hw">Assinatura cobrada por período selecionado. Cancele-a na AppGallery a qualquer momento.</string>
|
<string name="osm_live_payment_desc_hw">Assinatura cobrada por período selecionado. Cancele-a na AppGallery a qualquer momento.</string>
|
||||||
<string name="osm_live_payment_subscription_management_hw">O pagamento será debitado na sua conta AppGallery no momento da confirmação da compra.
|
<string name="osm_live_payment_subscription_management_hw">O pagamento será debitado na sua conta AppGallery no momento da confirmação da compra.
|
||||||
|
@ -3924,10 +3924,10 @@
|
||||||
<string name="complex_routing_descr">Roteamento em duas fases para a navegação automotiva.</string>
|
<string name="complex_routing_descr">Roteamento em duas fases para a navegação automotiva.</string>
|
||||||
<string name="use_native_pt">Desenvolvimento nativos de transportes públicos</string>
|
<string name="use_native_pt">Desenvolvimento nativos de transportes públicos</string>
|
||||||
<string name="use_native_pt_desc">Mudar para Cálculo de rotas de transporte público Java (seguro)</string>
|
<string name="use_native_pt_desc">Mudar para Cálculo de rotas de transporte público Java (seguro)</string>
|
||||||
<string name="perform_oauth_authorization_description">Realize um login OAuth para usar as funcionalidades do osmedit</string>
|
<string name="perform_oauth_authorization_description">Entre com o OAuth para usar os recursos do osmedit</string>
|
||||||
<string name="perform_oauth_authorization">Fazer login via OAuth</string>
|
<string name="perform_oauth_authorization">Fazer login via OAuth</string>
|
||||||
<string name="clear_osm_token">Limpar token do OpenStreetMap OAuth</string>
|
<string name="clear_osm_token">Limpar token do OpenStreetMap OAuth</string>
|
||||||
<string name="osm_edit_logout_success">Logout bem sucedido</string>
|
<string name="osm_edit_logout_success">Saiu</string>
|
||||||
<string name="file_already_imported">O ficheiro já é importado em OsmAnd</string>
|
<string name="file_already_imported">O ficheiro já é importado em OsmAnd</string>
|
||||||
<string name="use_two_phase_routing">Usar algoritmo de roteamento de 2 fases A*</string>
|
<string name="use_two_phase_routing">Usar algoritmo de roteamento de 2 fases A*</string>
|
||||||
<string name="snowmobile_render_descr">Para a condução de motos de neve com estradas e pistas dedicadas.</string>
|
<string name="snowmobile_render_descr">Para a condução de motos de neve com estradas e pistas dedicadas.</string>
|
||||||
|
@ -3961,23 +3961,23 @@
|
||||||
<string name="login_open_street_map">Fazer login ao OpenStreetMap</string>
|
<string name="login_open_street_map">Fazer login ao OpenStreetMap</string>
|
||||||
<string name="login_open_street_map_org">Entrar com OpenStreetMap.org</string>
|
<string name="login_open_street_map_org">Entrar com OpenStreetMap.org</string>
|
||||||
<string name="sign_in_with_open_street_map">Entrar com OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Entrar com OpenStreetMap</string>
|
||||||
<string name="use_login_password">Usar nome do utilizador e palavra-passe</string>
|
<string name="use_login_password">Usar o nome do utilizador e palavra-passe</string>
|
||||||
<string name="login_account">Conta</string>
|
<string name="login_account">Conta</string>
|
||||||
<string name="user_login">Entrar</string>
|
<string name="user_login">Entrar</string>
|
||||||
<string name="markers_history">Histórico de marcadores</string>
|
<string name="markers_history">Histórico de marcadores</string>
|
||||||
<string name="send_files_to_openstreetmap">Enviar ficherio de GPX ao OpenStreetMap</string>
|
<string name="send_files_to_openstreetmap">Enviar ficherio de GPX ao OpenStreetMap</string>
|
||||||
<string name="enter_text_separated">Insira etiquetas separadas por vírgula.</string>
|
<string name="enter_text_separated">Insira etiquetas separadas por vírgula.</string>
|
||||||
<string name="gpx_upload_public_visibility_descr">Público significa que o rastreamento será mostrado publicamente nos Seus traços de GPS e em listas públicas de rastreamento de GPS. Os dados servidos através da API não fazem referência à sua página de rastreamento. As marcas temporais dos pontos de rastreamento não estão disponíveis através da API pública do GPS e os pontos não estão ordenados cronologicamente. No entanto, outros utilizadores ainda são capazes de descarregar o rastreamento bruto da lista pública de rastreamento e de quaisquer carimbos de tempo contidos nela.</string>
|
<string name="gpx_upload_public_visibility_descr">\"Público\" significa que o rastreamento é mostrado publicamente em Seus traços de GPS e em listas públicas de rastreamento de GPS, e na lista pública de rastreamento com carimbos de data e hora na forma bruta. Os dados servidos através da API não fazem referência à sua página de rastreamento. Os marcadores de ponto de rastreamento não estão disponíveis através da API de GPS pública, e os pontos de rastreamento não estão ordenados cronologicamente.</string>
|
||||||
<string name="gpx_upload_private_visibility_descr">Privado significa que o rastreamento não aparecerá em nenhuma listagem pública, mas os pontos de rastreamento dele ainda estarão disponíveis através da API pública do GPS sem carimbos de tempo, mas não serão ordenados cronologicamente.</string>
|
<string name="gpx_upload_private_visibility_descr">\"Privado\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de rastreamento dela em ordem não cronológica estão disponíveis através da API pública do GPS sem carimbos de tempo.</string>
|
||||||
<string name="gpx_upload_identifiable_visibility_descr">Identificável significa que o rastreamento será mostrado publicamente nos Seus traços de GPS e em listas públicas de rastreamento de GPS, ou seja, outros utilizadores serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados servidos através da API dos pontos de rastreamento referenciarão à sua página de rastreamento original. As marcas de tempo dos pontos de rastreamento estão disponíveis através da API pública do GPS.</string>
|
<string name="gpx_upload_identifiable_visibility_descr">\"Identificável\" significa que o rastreamento será mostrado publicamente em Seus traços de GPS e em listas públicas de rastreamento de GPS, ou seja, outros utilizadoes serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados públicos de pontos de rastreamento marcados com a hora da API do GPS servidos através da API de pontos de rastreamento farão referência à sua página de rastreamento original.</string>
|
||||||
<string name="gpx_upload_trackable_visibility_descr">Rastreável significa que o rastreamento não aparecerá em nenhuma lista pública, mas os pontos de rastreamento a partir dele ainda estarão disponíveis através da API pública do GPS com carimbos de tempo. Outros utilizadores só poderão descarregar pontos de rastreamento processados do seu rastreamento que não podem ser associados diretamente a si.</string>
|
<string name="gpx_upload_trackable_visibility_descr">\"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas pontos de rastreamento processados com carimbos de tempo a partir dele (que não podem ser associados diretamente a si) fazem através de descarregadas da API pública do GPS.</string>
|
||||||
<string name="osm_edit_close_note">Fechar nota do OSM</string>
|
<string name="osm_edit_close_note">Fechar nota do OSM</string>
|
||||||
<string name="osm_edit_comment_note">Comentário de nota do OSM</string>
|
<string name="osm_edit_comment_note">Comentário de nota do OSM</string>
|
||||||
<string name="osm_login_descr">Faça login a usar o método seguro OAuth ou use o seu nome de utilizador e a palavra-passe.</string>
|
<string name="osm_login_descr">Pode fazer login pelo método seguro OAuth ou use o seu nome de utilizador e a palavra-passe.</string>
|
||||||
<string name="shared_string_add_photo">Adicionar fotos</string>
|
<string name="shared_string_add_photo">Adicionar fotos</string>
|
||||||
<string name="register_on_openplacereviews">Cadastre-se em
|
<string name="register_on_openplacereviews">Cadastre-se em
|
||||||
\nOpenPlaceReviews.org</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Faça login no site do projeto de dados abertos OpenPlaceReviews.org para enviar ainda mais fotos.</string>
|
<string name="register_on_openplacereviews_desc">As fotos são fornecidas pelo projeto de dados abertos OpenPlaceReviews.org. Para enviar as suas fotos precisa cadastrar-se no site.</string>
|
||||||
<string name="register_opr_create_new_account">Criar uma conta</string>
|
<string name="register_opr_create_new_account">Criar uma conta</string>
|
||||||
<string name="register_opr_have_account">Já tenho uma conta</string>
|
<string name="register_opr_have_account">Já tenho uma conta</string>
|
||||||
<string name="shared_string_search_history">Histórico de pesquisa</string>
|
<string name="shared_string_search_history">Histórico de pesquisa</string>
|
||||||
|
@ -3998,4 +3998,8 @@
|
||||||
<string name="select_groups_for_import">Seleccionar os grupos que serão importados.</string>
|
<string name="select_groups_for_import">Seleccionar os grupos que serão importados.</string>
|
||||||
<string name="select_items_for_import">Seleccionar os objectos que serão importados.</string>
|
<string name="select_items_for_import">Seleccionar os objectos que serão importados.</string>
|
||||||
<string name="use_dev_url">Utilizar dev.openstreetmap.org</string>
|
<string name="use_dev_url">Utilizar dev.openstreetmap.org</string>
|
||||||
|
<string name="cannot_upload_image">Não é possível enviar a imagem, por favor, tente novamente mais tarde</string>
|
||||||
|
<string name="select_picture">Selecione a imagem</string>
|
||||||
|
<string name="use_dev_url_descr">Mude para usar dev.openstreetmap.org ao invés de openstreetmap.org para testar enviar uma OSM Nota / POI / GPX.</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3838,4 +3838,34 @@
|
||||||
<string name="poi_radar_tower">Радиолокационная вышка</string>
|
<string name="poi_radar_tower">Радиолокационная вышка</string>
|
||||||
<string name="poi_parking_layby">Придорожная стоянка</string>
|
<string name="poi_parking_layby">Придорожная стоянка</string>
|
||||||
<string name="poi_parking_rooftop">На крыше</string>
|
<string name="poi_parking_rooftop">На крыше</string>
|
||||||
|
<string name="poi_diplomatic_services_citizen_services_no">Нет</string>
|
||||||
|
<string name="poi_diplomatic_services_citizen_services_yes">Да</string>
|
||||||
|
<string name="poi_diplomatic_services_immigrant_visas_no">Нет</string>
|
||||||
|
<string name="poi_diplomatic_services_immigrant_visas_yes">Да</string>
|
||||||
|
<string name="poi_diplomatic_services_non_immigrant_visas_no">Нет</string>
|
||||||
|
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Да</string>
|
||||||
|
<string name="poi_liaison_representative_office">Представительство</string>
|
||||||
|
<string name="poi_liaison_liaison_office">Офис</string>
|
||||||
|
<string name="poi_consulate_honorary_consul">Почетный консул</string>
|
||||||
|
<string name="poi_consulate_consulate_general">Генеральное консульство</string>
|
||||||
|
<string name="poi_consulate_consular_office">Консульский офис</string>
|
||||||
|
<string name="poi_consulate_yes">Во главе с консулом</string>
|
||||||
|
<string name="poi_embassy_residence">Резиденция</string>
|
||||||
|
<string name="poi_embassy_nunciature">Нунциатура</string>
|
||||||
|
<string name="poi_embassy_mission">Миссия</string>
|
||||||
|
<string name="poi_embassy_high_commission">Верховный комиссариат</string>
|
||||||
|
<string name="poi_embassy_delegation">Делегация</string>
|
||||||
|
<string name="poi_embassy_branch_embassy">Филиал</string>
|
||||||
|
<string name="poi_embassy_yes">Во главе с послом</string>
|
||||||
|
<string name="poi_diplomatic_liaison">Связь</string>
|
||||||
|
<string name="poi_diplomatic_embassy">Посольство</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_embassy_filter">Посольство</string>
|
||||||
|
<string name="poi_liaison_subnational">Субнациональный</string>
|
||||||
|
<string name="poi_consulate_consular_agency">Консульское агентство</string>
|
||||||
|
<string name="poi_embassy_interests_section">Раздел интересов</string>
|
||||||
|
<string name="poi_consulate_filter">Консульство</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3480,7 +3480,7 @@
|
||||||
<string name="replace_all">Заменить все</string>
|
<string name="replace_all">Заменить все</string>
|
||||||
<string name="keep_both">Оставить оба</string>
|
<string name="keep_both">Оставить оба</string>
|
||||||
<string name="keep_both_desc">Импортированные элементы будут добавлены с префиксом</string>
|
<string name="keep_both_desc">Импортированные элементы будут добавлены с префиксом</string>
|
||||||
<string name="import_duplicates_description">В OsmAnd уже есть элементы с теми же именами, что и импортированные.
|
<string name="import_duplicates_description">В OsmAnd уже есть элементы с такими же именами, как у импортированных.
|
||||||
\n
|
\n
|
||||||
\nВыберите действие.</string>
|
\nВыберите действие.</string>
|
||||||
<string name="import_duplicates_title">Некоторые элементы уже существуют</string>
|
<string name="import_duplicates_title">Некоторые элементы уже существуют</string>
|
||||||
|
@ -3991,4 +3991,6 @@
|
||||||
<string name="register_on_openplacereviews_desc">Фотографии предоставлены проектом открытых данных OpenPlaceReviews.org. Чтобы отправить свои фотографии, необходимо зарегистрироваться на сайте.</string>
|
<string name="register_on_openplacereviews_desc">Фотографии предоставлены проектом открытых данных OpenPlaceReviews.org. Чтобы отправить свои фотографии, необходимо зарегистрироваться на сайте.</string>
|
||||||
<string name="cannot_upload_image">Невозможно отправить изображение, попробуйте позже</string>
|
<string name="cannot_upload_image">Невозможно отправить изображение, попробуйте позже</string>
|
||||||
<string name="select_picture">Выбор изображения</string>
|
<string name="select_picture">Выбор изображения</string>
|
||||||
|
<string name="app_mode_kayak">Каяк</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3996,4 +3996,5 @@
|
||||||
<string name="use_dev_url">Imprea dev.openstreetmap.org</string>
|
<string name="use_dev_url">Imprea dev.openstreetmap.org</string>
|
||||||
<string name="cannot_upload_image">Impossìbile carrigare s\'immàgine, torra a proare prus a tardu</string>
|
<string name="cannot_upload_image">Impossìbile carrigare s\'immàgine, torra a proare prus a tardu</string>
|
||||||
<string name="select_picture">Ischerta un\'immàgine</string>
|
<string name="select_picture">Ischerta un\'immàgine</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3993,4 +3993,6 @@
|
||||||
<string name="select_items_for_import">Zvoľte položky, ktoré budú importované.</string>
|
<string name="select_items_for_import">Zvoľte položky, ktoré budú importované.</string>
|
||||||
<string name="use_dev_url_descr">Prepnúť na dev.openstreetmap.org namiesto openstreetmap.org pre otestovanie odosielania OSM poznámok / bodov záujmu / GPX stôp.</string>
|
<string name="use_dev_url_descr">Prepnúť na dev.openstreetmap.org namiesto openstreetmap.org pre otestovanie odosielania OSM poznámok / bodov záujmu / GPX stôp.</string>
|
||||||
<string name="use_dev_url">Použiť dev.openstreetmap.org</string>
|
<string name="use_dev_url">Použiť dev.openstreetmap.org</string>
|
||||||
|
<string name="cannot_upload_image"></string>
|
||||||
|
<string name="select_picture"></string>
|
||||||
</resources>
|
</resources>
|
|
@ -257,7 +257,7 @@
|
||||||
<string name="tts_language_not_supported_title">Језик није подржан</string>
|
<string name="tts_language_not_supported_title">Језик није подржан</string>
|
||||||
<string name="tts_missing_language_data_title">Недостају подаци</string>
|
<string name="tts_missing_language_data_title">Недостају подаци</string>
|
||||||
<string name="tts_missing_language_data">Отићи до продавнице да скинете изабрани језик?</string>
|
<string name="tts_missing_language_data">Отићи до продавнице да скинете изабрани језик?</string>
|
||||||
<string name="gpx_option_reverse_route">Обрни GPX смер</string>
|
<string name="gpx_option_reverse_route">Обрни смер стазе</string>
|
||||||
<string name="choose_audio_stream">Излаз гласовног навођења</string>
|
<string name="choose_audio_stream">Излаз гласовног навођења</string>
|
||||||
<string name="voice_stream_voice_call">Звук долазног позива (прекида и блутут у колима)</string>
|
<string name="voice_stream_voice_call">Звук долазног позива (прекида и блутут у колима)</string>
|
||||||
<string name="voice_stream_notification">Звучно обавештење</string>
|
<string name="voice_stream_notification">Звучно обавештење</string>
|
||||||
|
@ -964,8 +964,8 @@
|
||||||
<string name="route_roundabout_short">Одреди %1$d излаз и иди</string>
|
<string name="route_roundabout_short">Одреди %1$d излаз и иди</string>
|
||||||
<string name="upload_poi">Отпреми тачку од интереса</string>
|
<string name="upload_poi">Отпреми тачку од интереса</string>
|
||||||
<string name="route_calculation">Прорачун путање</string>
|
<string name="route_calculation">Прорачун путање</string>
|
||||||
<string name="gpx_no_tracks_title">Још увек немате ниједан GPX фајл</string>
|
<string name="gpx_no_tracks_title">Још увек немате ниједну датотеку стаза</string>
|
||||||
<string name="gpx_no_tracks_title_folder">Такође, можете додати GPX фајлове у фасциклу</string>
|
<string name="gpx_no_tracks_title_folder">Такође, можете додати фајлове стаза у фасциклу</string>
|
||||||
<string name="gpx_add_track">Додај још…</string>
|
<string name="gpx_add_track">Додај још…</string>
|
||||||
<string name="shared_string_appearance">Изглед</string>
|
<string name="shared_string_appearance">Изглед</string>
|
||||||
<string name="trip_rec_notification_settings">Укључи брзо снимање</string>
|
<string name="trip_rec_notification_settings">Укључи брзо снимање</string>
|
||||||
|
@ -1024,7 +1024,7 @@
|
||||||
<string name="no_inet_connection_desc_map">Захтеване за преузимање.</string>
|
<string name="no_inet_connection_desc_map">Захтеване за преузимање.</string>
|
||||||
<string name="search_location">Претражујем положај…</string>
|
<string name="search_location">Претражујем положај…</string>
|
||||||
<string name="storage_free_space">Слободно место складишта</string>
|
<string name="storage_free_space">Слободно место складишта</string>
|
||||||
<string name="storage_place_description">OsmAnd складиште података (за карте, GPX фајлове итд.): %1$s.</string>
|
<string name="storage_place_description">OsmAnd складиште података (за карте, фајлове стаза итд.): %1$s.</string>
|
||||||
<string name="give_permission">Дајте дозволе</string>
|
<string name="give_permission">Дајте дозволе</string>
|
||||||
<string name="allow_access_location">Омогућите приступ одређивању положаја</string>
|
<string name="allow_access_location">Омогућите приступ одређивању положаја</string>
|
||||||
<string name="first_usage_greeting">Узми упутства и откриј нова места, и без интернета</string>
|
<string name="first_usage_greeting">Узми упутства и откриј нова места, и без интернета</string>
|
||||||
|
@ -1244,7 +1244,7 @@
|
||||||
<string name="mapillary_widget_descr">Омогућава брзи допринос Мапилару.</string>
|
<string name="mapillary_widget_descr">Омогућава брзи допринос Мапилару.</string>
|
||||||
<string name="open_mapillary">Отвори Мапилар</string>
|
<string name="open_mapillary">Отвори Мапилар</string>
|
||||||
<string name="mapillary_descr">Мрежне слике улица за све. Откријте места, сарађујте, освојите свет.</string>
|
<string name="mapillary_descr">Мрежне слике улица за све. Откријте места, сарађујте, освојите свет.</string>
|
||||||
<string name="mapillary">Слике на нивоу улице</string>
|
<string name="mapillary">Мапилари</string>
|
||||||
<string name="plugin_mapillary_descr">Мрежне слике улица за све. Откријте места, сарађујте, освојите свет.</string>
|
<string name="plugin_mapillary_descr">Мрежне слике улица за све. Откријте места, сарађујте, освојите свет.</string>
|
||||||
<string name="private_access_routing_req">Ваше одредиште се налази на приватном поседу. Дозволити коришћење приватних путева на овом путовању\?</string>
|
<string name="private_access_routing_req">Ваше одредиште се налази на приватном поседу. Дозволити коришћење приватних путева на овом путовању\?</string>
|
||||||
<string name="restart_search">Препокрени претрагу</string>
|
<string name="restart_search">Препокрени претрагу</string>
|
||||||
|
@ -1579,7 +1579,7 @@
|
||||||
<string name="shared_string_current">Тренутна</string>
|
<string name="shared_string_current">Тренутна</string>
|
||||||
<string name="last_intermediate_dest_description">Додаје пролазно стајање</string>
|
<string name="last_intermediate_dest_description">Додаје пролазно стајање</string>
|
||||||
<string name="first_intermediate_dest_description">Додаје прво стајање</string>
|
<string name="first_intermediate_dest_description">Додаје прво стајање</string>
|
||||||
<string name="switch_osm_notes_visibility_desc">Прикажи/сакриј ОСМ белешке на карти.</string>
|
<string name="switch_osm_notes_visibility_desc">Прикажи или сакриј ОСМ белешке на карти.</string>
|
||||||
<string name="shared_string_gpx_file">GPX фајл</string>
|
<string name="shared_string_gpx_file">GPX фајл</string>
|
||||||
<string name="release_3_0">• Ново: Подршка за глобалне туристичке водиче без потребе за интернет конекцијом. Референтни положаји су повезани на карти. Иницијални подаци са сајта Wikivoyage.
|
<string name="release_3_0">• Ново: Подршка за глобалне туристичке водиче без потребе за интернет конекцијом. Референтни положаји су повезани на карти. Иницијални подаци са сајта Wikivoyage.
|
||||||
\n
|
\n
|
||||||
|
@ -1781,7 +1781,7 @@
|
||||||
<string name="arrival_distance_factor_at_last">У последњих пар метара</string>
|
<string name="arrival_distance_factor_at_last">У последњих пар метара</string>
|
||||||
<string name="arrival_distance">Обавештење о доласку</string>
|
<string name="arrival_distance">Обавештење о доласку</string>
|
||||||
<string name="arrival_distance_descr">Колико брзо желите да добијете обавештење о пристизању?</string>
|
<string name="arrival_distance_descr">Колико брзо желите да добијете обавештење о пристизању?</string>
|
||||||
<string name="offline_edition_descr">Користи уређивање без мреже.</string>
|
<string name="offline_edition_descr">Ако је омогућено уређивање ван мреже, тада ће се промене прво сачувати локално и отпремити по захтеву, у супротном ће се промене одмах отпремити.</string>
|
||||||
<string name="local_openstreetmap_uploading">Отпремам…</string>
|
<string name="local_openstreetmap_uploading">Отпремам…</string>
|
||||||
<string name="local_openstreetmap_were_uploaded">{0} тачака од интереса/белешки отпремљено</string>
|
<string name="local_openstreetmap_were_uploaded">{0} тачака од интереса/белешки отпремљено</string>
|
||||||
<string name="local_openstreetmap_uploadall">Отпреми све</string>
|
<string name="local_openstreetmap_uploadall">Отпреми све</string>
|
||||||
|
@ -1812,7 +1812,7 @@
|
||||||
<string name="general_settings">Опште</string>
|
<string name="general_settings">Опште</string>
|
||||||
<string name="global_app_settings">Опште поставке апликације</string>
|
<string name="global_app_settings">Опште поставке апликације</string>
|
||||||
<string name="user_name">Ваше ОСМ корисничко име</string>
|
<string name="user_name">Ваше ОСМ корисничко име</string>
|
||||||
<string name="user_password">Ваша ОСМ лозинка</string>
|
<string name="user_password">Лозинка</string>
|
||||||
<string name="use_transparent_map_theme">Прозирна тема</string>
|
<string name="use_transparent_map_theme">Прозирна тема</string>
|
||||||
<string name="delete_confirmation_msg">Обриши %1$s?</string>
|
<string name="delete_confirmation_msg">Обриши %1$s?</string>
|
||||||
<string name="city_type_hamlet">Засеок</string>
|
<string name="city_type_hamlet">Засеок</string>
|
||||||
|
@ -2156,7 +2156,7 @@
|
||||||
<string name="plugin_install_needs_network">Морате имати интернет да бисте инсталирали овај додатак.</string>
|
<string name="plugin_install_needs_network">Морате имати интернет да бисте инсталирали овај додатак.</string>
|
||||||
<string name="get_plugin">Преузми</string>
|
<string name="get_plugin">Преузми</string>
|
||||||
<string name="use_fast_recalculation">Пмаетно прерачунавање пута</string>
|
<string name="use_fast_recalculation">Пмаетно прерачунавање пута</string>
|
||||||
<string name="use_fast_recalculation_desc">За дужа путовања, прерачунавај само први део пута.</string>
|
<string name="use_fast_recalculation_desc">Прерачунава само почетни део руте. Може се користити за дуга путовања.</string>
|
||||||
<string name="do_you_like_osmand">Да ли Вам се OsmAnd свиђа?</string>
|
<string name="do_you_like_osmand">Да ли Вам се OsmAnd свиђа?</string>
|
||||||
<string name="we_really_care_about_your_opinion">Важно нам је да чујемо Ваше мишљење.</string>
|
<string name="we_really_care_about_your_opinion">Важно нам је да чујемо Ваше мишљење.</string>
|
||||||
<string name="rate_this_app">Оцените ову апликацију</string>
|
<string name="rate_this_app">Оцените ову апликацију</string>
|
||||||
|
@ -2216,7 +2216,7 @@
|
||||||
<string name="morning">Ујутро</string>
|
<string name="morning">Ујутро</string>
|
||||||
<string name="number_of_contributors">Број сарадника</string>
|
<string name="number_of_contributors">Број сарадника</string>
|
||||||
<string name="number_of_edits">Број измена</string>
|
<string name="number_of_edits">Број измена</string>
|
||||||
<string name="file_name_containes_illegal_char">Име фајла садржи недозвољене карактере</string>
|
<string name="file_name_containes_illegal_char">Недозвољен знак у имену датотеке</string>
|
||||||
<string name="configure_screen_quick_action">Брзе радње</string>
|
<string name="configure_screen_quick_action">Брзе радње</string>
|
||||||
<string name="quick_action_item_action">Радња %d</string>
|
<string name="quick_action_item_action">Радња %d</string>
|
||||||
<string name="quick_action_item_screen">Екран %d</string>
|
<string name="quick_action_item_screen">Екран %d</string>
|
||||||
|
@ -2954,10 +2954,10 @@
|
||||||
<string name="show_more">Прикажи још</string>
|
<string name="show_more">Прикажи још</string>
|
||||||
<string name="tracks_on_map">Приказане путање</string>
|
<string name="tracks_on_map">Приказане путање</string>
|
||||||
<string name="sit_on_the_stop">Укрцавање на стајању</string>
|
<string name="sit_on_the_stop">Укрцавање на стајању</string>
|
||||||
<string name="quick_action_show_hide_gpx_tracks">Прикажи/сакриј GPX путање</string>
|
<string name="quick_action_show_hide_gpx_tracks">Прикажи/сакриј путање</string>
|
||||||
<string name="quick_action_show_hide_gpx_tracks_descr">Дугме које приказује или сакрива одабране GPX путање са карте.</string>
|
<string name="quick_action_show_hide_gpx_tracks_descr">Дугме које приказује или сакрива одабране путање са карте.</string>
|
||||||
<string name="quick_action_gpx_tracks_hide">Сакриј GPX путање</string>
|
<string name="quick_action_gpx_tracks_hide">Сакриј путање</string>
|
||||||
<string name="quick_action_gpx_tracks_show">Прикажи GPX путање</string>
|
<string name="quick_action_gpx_tracks_show">Прикажи путање</string>
|
||||||
<string name="use_osm_live_public_transport_description">Омогући јавни превоз на OsmAnd Live изменама.</string>
|
<string name="use_osm_live_public_transport_description">Омогући јавни превоз на OsmAnd Live изменама.</string>
|
||||||
<string name="use_osm_live_public_transport">OsmAnd Live јавни превоз</string>
|
<string name="use_osm_live_public_transport">OsmAnd Live јавни превоз</string>
|
||||||
<string name="rendering_attr_surface_sett_name">Калдрма</string>
|
<string name="rendering_attr_surface_sett_name">Калдрма</string>
|
||||||
|
@ -3136,9 +3136,9 @@
|
||||||
<string name="hide_compass_ruler">Сакриј лењир компас</string>
|
<string name="hide_compass_ruler">Сакриј лењир компас</string>
|
||||||
<string name="select_base_profile_dialog_message">Базирајте Ваш произвољни профил на једном од подразумеваних профила, овим се одређују основне поставке као што су подразуемвана видљивост справица или јединице брзине и даљине. Ово су подразумевани апликативни профили, заједно са примерима произвољних профила којима се може проширити:</string>
|
<string name="select_base_profile_dialog_message">Базирајте Ваш произвољни профил на једном од подразумеваних профила, овим се одређују основне поставке као што су подразуемвана видљивост справица или јединице брзине и даљине. Ово су подразумевани апликативни профили, заједно са примерима произвољних профила којима се може проширити:</string>
|
||||||
<string name="quick_action_need_to_add_item_to_list">Додајте бар једну ставку на поставкама у „Брзим радњама“</string>
|
<string name="quick_action_need_to_add_item_to_list">Додајте бар једну ставку на поставкама у „Брзим радњама“</string>
|
||||||
<string name="routing_attr_piste_type_downhill_name">Алпско/спуст скијање</string>
|
<string name="routing_attr_piste_type_downhill_name">Алпско и спуст скијање</string>
|
||||||
<string name="routing_attr_piste_type_downhill_description">Падине алпског скијања или спуста и приступ ски лифтовима.</string>
|
<string name="routing_attr_piste_type_downhill_description">Падине алпског скијања или спуста и приступ ски лифтовима.</string>
|
||||||
<string name="routing_attr_piste_type_nordic_name">Крос-кантри/нордијско скијање</string>
|
<string name="routing_attr_piste_type_nordic_name">Крос-кантри и нордијско скијање</string>
|
||||||
<string name="routing_attr_piste_type_nordic_description">Путеви за нордијско или крос-кантри скијање.</string>
|
<string name="routing_attr_piste_type_nordic_description">Путеви за нордијско или крос-кантри скијање.</string>
|
||||||
<string name="routing_attr_piste_type_skitour_name">Ски туре</string>
|
<string name="routing_attr_piste_type_skitour_name">Ски туре</string>
|
||||||
<string name="routing_attr_piste_type_skitour_description">Путање ски тура.</string>
|
<string name="routing_attr_piste_type_skitour_description">Путање ски тура.</string>
|
||||||
|
@ -3363,7 +3363,7 @@
|
||||||
<string name="swap_two_places">Замени %1$s и %2$s</string>
|
<string name="swap_two_places">Замени %1$s и %2$s</string>
|
||||||
<string name="route_start_point">Почетна тачка</string>
|
<string name="route_start_point">Почетна тачка</string>
|
||||||
<string name="track_saved">Стаза сачувана</string>
|
<string name="track_saved">Стаза сачувана</string>
|
||||||
<string name="empty_filename">Име фајла је празно</string>
|
<string name="empty_filename">Празно име датотеке</string>
|
||||||
<string name="shared_string_revert">Поврати</string>
|
<string name="shared_string_revert">Поврати</string>
|
||||||
<string name="quick_action_directions_from_desc">Дугме које центар екрана узима за тачку поласка. После пита да одаберете одредиште или рачуна пут до одредишта.</string>
|
<string name="quick_action_directions_from_desc">Дугме које центар екрана узима за тачку поласка. После пита да одаберете одредиште или рачуна пут до одредишта.</string>
|
||||||
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Прикажи чворове мреже бициклистичких путева</string>
|
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Прикажи чворове мреже бициклистичких путева</string>
|
||||||
|
@ -3425,9 +3425,9 @@
|
||||||
<string name="route_recalculation">Прерачунавање пута</string>
|
<string name="route_recalculation">Прерачунавање пута</string>
|
||||||
<string name="accessibility_announce">Објави</string>
|
<string name="accessibility_announce">Објави</string>
|
||||||
<string name="login_and_pass">Корисничко име и лозинка</string>
|
<string name="login_and_pass">Корисничко име и лозинка</string>
|
||||||
<string name="plugin_global_prefs_info">Ове поставке се примењују на све профиле.</string>
|
<string name="plugin_global_prefs_info">Ова подешавања додатака су глобална и примењују се на све профиле</string>
|
||||||
<string name="osm_editing">OSM уређивање</string>
|
<string name="osm_editing">OSM уређивање</string>
|
||||||
<string name="osm_edits_view_descr">Погледајте Ваше измене или OSM грешке које још нису отпремљене у %1$s. Отпремљене тачке се више неће приказивати.</string>
|
<string name="osm_edits_view_descr">Све своје још увек не отпремљене измене или ОСМ белешке можете погледати у %1$s. Отпремљене тачке се не приказују у ОсмАнду.</string>
|
||||||
<string name="app_mode_osm">OSM</string>
|
<string name="app_mode_osm">OSM</string>
|
||||||
<string name="select_nav_icon_descr">Иконица која се приказује за време навођења или померања.</string>
|
<string name="select_nav_icon_descr">Иконица која се приказује за време навођења или померања.</string>
|
||||||
<string name="select_map_icon_descr">Иконица која се приказује у мировању.</string>
|
<string name="select_map_icon_descr">Иконица која се приказује у мировању.</string>
|
||||||
|
@ -3547,7 +3547,7 @@
|
||||||
<string name="restore_all_profile_settings">Поврати све поставке профила\?</string>
|
<string name="restore_all_profile_settings">Поврати све поставке профила\?</string>
|
||||||
<string name="saving_new_profile">Чувам нови профил</string>
|
<string name="saving_new_profile">Чувам нови профил</string>
|
||||||
<string name="profile_backup_failed">Не могу да направим резервну копију профила.</string>
|
<string name="profile_backup_failed">Не могу да направим резервну копију профила.</string>
|
||||||
<string name="quick_action_show_hide_terrain">Прикажи / сакриј терен</string>
|
<string name="quick_action_show_hide_terrain">Прикажи или сакриј терен</string>
|
||||||
<string name="quick_action_terrain_hide">Сакриј терен</string>
|
<string name="quick_action_terrain_hide">Сакриј терен</string>
|
||||||
<string name="quick_action_terrain_show">Прикажи терен</string>
|
<string name="quick_action_terrain_show">Прикажи терен</string>
|
||||||
<string name="quick_action_terrain_descr">Дугме да прикаже или сакрите слој терена на карти.</string>
|
<string name="quick_action_terrain_descr">Дугме да прикаже или сакрите слој терена на карти.</string>
|
||||||
|
@ -3570,8 +3570,8 @@
|
||||||
<string name="shared_string_all_languages">Сви језици</string>
|
<string name="shared_string_all_languages">Сви језици</string>
|
||||||
<string name="profiles_for_action_not_found">Не може се наћи такав профил.</string>
|
<string name="profiles_for_action_not_found">Не може се наћи такав профил.</string>
|
||||||
<string name="index_item_world_basemap_detailed">Светска општа мапа (детаљна)</string>
|
<string name="index_item_world_basemap_detailed">Светска општа мапа (детаљна)</string>
|
||||||
<string name="create_edit_poi">Креирај / Уреди ПОИ</string>
|
<string name="create_edit_poi">Направите или измените ПОИ</string>
|
||||||
<string name="add_edit_favorite">Додај / Уреди фаворит</string>
|
<string name="add_edit_favorite">Додајте или измените омиљено</string>
|
||||||
<string name="back_to_editing">Повратак уређивању</string>
|
<string name="back_to_editing">Повратак уређивању</string>
|
||||||
<string name="shared_string_add_profile">Додај профил</string>
|
<string name="shared_string_add_profile">Додај профил</string>
|
||||||
<string name="change_application_profile">Промени профил апликације</string>
|
<string name="change_application_profile">Промени профил апликације</string>
|
||||||
|
@ -3590,7 +3590,7 @@
|
||||||
<string name="navigation_profiles_item">Профили навођења</string>
|
<string name="navigation_profiles_item">Профили навођења</string>
|
||||||
<string name="quick_action_transport_hide">Сакриј јавни превоз</string>
|
<string name="quick_action_transport_hide">Сакриј јавни превоз</string>
|
||||||
<string name="quick_action_transport_show">Прикажи јавни превоз</string>
|
<string name="quick_action_transport_show">Прикажи јавни превоз</string>
|
||||||
<string name="quick_action_show_hide_transport">Прикажи/сакриј јавни превоз</string>
|
<string name="quick_action_show_hide_transport">Прикажи или сакриј јавни превоз</string>
|
||||||
<string name="quick_action_transport_descr">Дугме које приказује или скрива јавни превоз на карти.</string>
|
<string name="quick_action_transport_descr">Дугме које приказује или скрива јавни превоз на карти.</string>
|
||||||
<string name="parking_positions">Паркинг позиције</string>
|
<string name="parking_positions">Паркинг позиције</string>
|
||||||
<string name="reset_deafult_order">Поврати подразумевани поредак ставки</string>
|
<string name="reset_deafult_order">Поврати подразумевани поредак ставки</string>
|
||||||
|
@ -3642,12 +3642,12 @@
|
||||||
<string name="vessel_height_warning">Можете подесити висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
<string name="vessel_height_warning">Можете подесити висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
||||||
<string name="vessel_height_limit_description">Подесите висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
<string name="vessel_height_limit_description">Подесите висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
||||||
<string name="vessel_width_limit_description">Подесите ширину пловила и избегните уске мостове</string>
|
<string name="vessel_width_limit_description">Подесите ширину пловила и избегните уске мостове</string>
|
||||||
<string name="use_volume_buttons_as_zoom_descr">Укључите да омогућите контролу нивоа увећања са дугмићима за јачину звука.</string>
|
<string name="use_volume_buttons_as_zoom_descr">Контролишите ниво зумирања на мапи помоћу дугмића за јачину звука на уређају.</string>
|
||||||
<string name="use_volume_buttons_as_zoom">Дугмићи за јачину звука за зумирање</string>
|
<string name="use_volume_buttons_as_zoom">Дугмићи за јачину звука за зумирање</string>
|
||||||
<string name="shared_string_uninstall_and_restart">Деинсталирај и поново покрени</string>
|
<string name="shared_string_uninstall_and_restart">Деинсталирај и поново покрени</string>
|
||||||
<string name="speed_cameras_removed_descr">Овај уређај нема радаре.</string>
|
<string name="speed_cameras_removed_descr">Овај уређај нема радаре.</string>
|
||||||
<string name="app_mode_inline_skates">Ролери</string>
|
<string name="app_mode_inline_skates">Ролери</string>
|
||||||
<string name="speed_cameras_restart_descr">Поновно покретање је потребно да се потпуно избришу подаци о радарима.</string>
|
<string name="speed_cameras_restart_descr">Поново покрените апликацију да бисте избрисали све податке брзинских камера.</string>
|
||||||
<string name="item_deleted">%1$s обрисано</string>
|
<string name="item_deleted">%1$s обрисано</string>
|
||||||
<string name="routing_attr_length_name">Лимит дужине</string>
|
<string name="routing_attr_length_name">Лимит дужине</string>
|
||||||
<string name="shared_string_bearing">Курс</string>
|
<string name="shared_string_bearing">Курс</string>
|
||||||
|
@ -3744,14 +3744,14 @@
|
||||||
<string name="slope_download_description">Додатне мапе су потребне да бисте видели нагибе на мапи.</string>
|
<string name="slope_download_description">Додатне мапе су потребне да бисте видели нагибе на мапи.</string>
|
||||||
<string name="slope_read_more">Можете прочитати више о нагибима у %1$s.</string>
|
<string name="slope_read_more">Можете прочитати више о нагибима у %1$s.</string>
|
||||||
<string name="terrain_empty_state_text">Омогућите да би видели сенке брда или мапе нагиба. Можете прочитати више о овим врстама карта на нашем сајту.</string>
|
<string name="terrain_empty_state_text">Омогућите да би видели сенке брда или мапе нагиба. Можете прочитати више о овим врстама карта на нашем сајту.</string>
|
||||||
<string name="import_complete_description">Сви подаци %1$S су увезени, можете да употребите дугмад испод да би сте отворили неопходни део апликације ради управљања њима.</string>
|
<string name="import_complete_description">Сви подаци из %1$s су увезени, можете да употребите дугмад испод да би сте отворили неопходни део апликације ради управљања њима.</string>
|
||||||
<string name="checking_for_duplicate_description">Османд проверава %1$S постојање дупликата са постојећим елементима у апликацији.
|
<string name="checking_for_duplicate_description">Османд проверава %1$s постојање дупликата са постојећим елементима у апликацији.
|
||||||
\n
|
\n
|
||||||
\nТо може да потраје неко време.</string>
|
\nТо може да потраје неко време.</string>
|
||||||
<string name="download_slope_maps">Нагиби</string>
|
<string name="download_slope_maps">Нагиби</string>
|
||||||
<string name="ui_customization_description">Прилагодите количину елемената у \"Фиоци\", \"Подешавању мапе\" и \"Контекст менију\".
|
<string name="ui_customization_description">Прилагодите количину елемената у \"Фиоци\", \"Подешавању мапе\" и \"Контекст менију\".
|
||||||
\n
|
\n
|
||||||
\nОнемогућите некоришћене додатке да сакријете све њихове контроле. %1$е.</string>
|
\nОнемогућите некоришћене додатке да сакријете све њихове контроле. %1$s.</string>
|
||||||
<string name="ui_customization_short_descr">Елементи Фиоке, Контекст мени</string>
|
<string name="ui_customization_short_descr">Елементи Фиоке, Контекст мени</string>
|
||||||
<string name="context_menu_actions">Акције Контекст менија</string>
|
<string name="context_menu_actions">Акције Контекст менија</string>
|
||||||
<string name="osm_live_payment_subscription_management">Наплатом ће бити оптерећен ваш Гугл Плеј налог при потврди куповине.
|
<string name="osm_live_payment_subscription_management">Наплатом ће бити оптерећен ваш Гугл Плеј налог при потврди куповине.
|
||||||
|
@ -3787,18 +3787,18 @@
|
||||||
\n
|
\n
|
||||||
\n%2$s: су нивои при којима ће оригиналне плочице бити видљиве, а умањење или увећање биће изван ових вредности.</string>
|
\n%2$s: су нивои при којима ће оригиналне плочице бити видљиве, а умањење или увећање биће изван ових вредности.</string>
|
||||||
<string name="lenght_limit_description">Унесите дужину возила, нека ограничења пута могу бити примењена за дужа возила.</string>
|
<string name="lenght_limit_description">Унесите дужину возила, нека ограничења пута могу бити примењена за дужа возила.</string>
|
||||||
<string name="quick_action_remove_next_destination">Обриши следећу одредишну тачку</string>
|
<string name="quick_action_remove_next_destination">Обриши најближу одредишну тачку</string>
|
||||||
<string name="please_provide_point_name_error">Молимо одредите име тачке</string>
|
<string name="please_provide_point_name_error">Молимо одредите име тачке</string>
|
||||||
<string name="quick_action_remove_next_destination_descr">Тренутна одредишна тачка биће уклоњена. Ако је она одредишна, стопираће се навигација.</string>
|
<string name="quick_action_remove_next_destination_descr">Тренутна одредишна тачка биће уклоњена. Ако је она одредишна, стопираће се навигација.</string>
|
||||||
<string name="search_download_wikipedia_maps">Преузмите мапе Википедије</string>
|
<string name="search_download_wikipedia_maps">Преузмите мапе Википедије</string>
|
||||||
<string name="plugin_wikipedia_description">Информације о тачкама од интереса потражите од Википедије. То је ваш џепни ванмрежни водич - само омогућите додатак Википедиа и уживајте у чланцима о објектима око вас.</string>
|
<string name="plugin_wikipedia_description">Информације о тачкама од интереса потражите на Википедији. То је ваш џепни ванмрежни водич - само укључите додатак Википедија и уживајте у чланцима о објектима око вас.</string>
|
||||||
<string name="app_mode_enduro_motorcycle">Ендуро скутер</string>
|
<string name="app_mode_enduro_motorcycle">Ендуро скутер</string>
|
||||||
<string name="app_mode_motor_scooter">Скутер</string>
|
<string name="app_mode_motor_scooter">Скутер</string>
|
||||||
<string name="app_mode_wheelchair">Инвалидска колица</string>
|
<string name="app_mode_wheelchair">Инвалидска колица</string>
|
||||||
<string name="app_mode_wheelchair_forward">Инвалидска колица напред</string>
|
<string name="app_mode_wheelchair_forward">Инвалидска колица напред</string>
|
||||||
<string name="app_mode_go_cart">Корпа</string>
|
<string name="app_mode_go_cart">Корпа</string>
|
||||||
<string name="osm_edit_closed_note">Затворена ОСМ белешка</string>
|
<string name="osm_edit_closed_note">Затворена ОСМ белешка</string>
|
||||||
<string name="set_working_days_to_continue">За наставак морате да одредите радне дане</string>
|
<string name="set_working_days_to_continue">За наставак одредите радне дане</string>
|
||||||
<string name="route_between_points">Рута између тачака</string>
|
<string name="route_between_points">Рута између тачака</string>
|
||||||
<string name="plan_a_route">Планирај руту</string>
|
<string name="plan_a_route">Планирај руту</string>
|
||||||
<string name="add_to_a_track">Додајте стази</string>
|
<string name="add_to_a_track">Додајте стази</string>
|
||||||
|
@ -3809,7 +3809,7 @@
|
||||||
<string name="gpx_direction_arrows">Стрелице смера</string>
|
<string name="gpx_direction_arrows">Стрелице смера</string>
|
||||||
<string name="track_coloring_solid">Чврст</string>
|
<string name="track_coloring_solid">Чврст</string>
|
||||||
<string name="add_hidden_group_info">Додата тачка неће бити видљива на мапи, пошто је одабрана група сакривена, можете је пронаћи у „%s“.</string>
|
<string name="add_hidden_group_info">Додата тачка неће бити видљива на мапи, пошто је одабрана група сакривена, можете је пронаћи у „%s“.</string>
|
||||||
<string name="track_show_start_finish_icons">Прикажи почетно крајне иконе</string>
|
<string name="track_show_start_finish_icons">Прикажи почетне и крајне иконе</string>
|
||||||
<string name="plan_route_last_edited">Последње измењена</string>
|
<string name="plan_route_last_edited">Последње измењена</string>
|
||||||
<string name="plan_route_import_track">Увези путању</string>
|
<string name="plan_route_import_track">Увези путању</string>
|
||||||
<string name="plan_route_open_existing_track">Отвори постојећу путању</string>
|
<string name="plan_route_open_existing_track">Отвори постојећу путању</string>
|
||||||
|
@ -3820,25 +3820,23 @@
|
||||||
<string name="save_as_new_track">Сачувај као нову стазу</string>
|
<string name="save_as_new_track">Сачувај као нову стазу</string>
|
||||||
<string name="reverse_route">Обрнута рута</string>
|
<string name="reverse_route">Обрнута рута</string>
|
||||||
<string name="route_between_points_whole_track_button_desc">Читава стаза ће се прерачунати користећи одабрани профил.</string>
|
<string name="route_between_points_whole_track_button_desc">Читава стаза ће се прерачунати користећи одабрани профил.</string>
|
||||||
<string name="route_between_points_next_segment_button_desc">Само ће се следећи сегмент прерачунати користећи одабрани профил.</string>
|
<string name="route_between_points_next_segment_button_desc">Само ће следећи сегмент бити прерачунат користећи одабрани профил.</string>
|
||||||
<string name="route_between_points_desc">Изаберите како повезати тачке, са правом линијом, или израчунајте руту између њих са одабраним профилом.</string>
|
<string name="route_between_points_desc">Изаберите како повезати тачке, по правој линији, или израчунајте руту између њих како је доле назначено.</string>
|
||||||
<string name="whole_track">Цела стаза</string>
|
<string name="whole_track">Цела стаза</string>
|
||||||
<string name="next_segment">Следећи сегмент</string>
|
<string name="next_segment">Следећи сегмент</string>
|
||||||
<string name="route_between_points_warning_desc">Да бисте користили ову опцију, ОсмАнд мора да прилагоди вашу стазу путевима на мапи.
|
<string name="route_between_points_warning_desc">Затим помоћу једног од ваших навигационих профила прислоните стазу на најближи дозвољени пут да бисте користили ову опцију.</string>
|
||||||
\n
|
|
||||||
\n На следећем кораку мора ћете одабрати навигацијски профил како бисте открили дозвољене путеве и праг удаљености и тиме приближили вашу стазу путевима.</string>
|
|
||||||
<string name="threshold_distance">Праг удаљености</string>
|
<string name="threshold_distance">Праг удаљености</string>
|
||||||
<string name="navigation_profile">Навигацијски профил</string>
|
<string name="navigation_profile">Навигацијски профил</string>
|
||||||
<string name="route_between_points_add_track_desc">Изаберите датотеку записа којој ће се додати нови сегмент.</string>
|
<string name="route_between_points_add_track_desc">Изаберите датотеку записа којој ће се додати нови сегмент.</string>
|
||||||
<string name="street_level_imagery">Слике на нивоу улице</string>
|
<string name="street_level_imagery">Слике на нивоу улице</string>
|
||||||
<string name="plan_route_exit_dialog_descr">Јесте ли сигурни да желите затворити План руте без чувања\? Изгуби ћете све промене.</string>
|
<string name="plan_route_exit_dialog_descr">Да ли сте сигурни да желите да одбаците све промене на планираној рути затварањем\?</string>
|
||||||
<string name="in_case_of_reverse_direction">У случају обрнутог правца</string>
|
<string name="in_case_of_reverse_direction">У случају обрнутог правца</string>
|
||||||
<string name="shared_string_save_as_gpx">Сачувај као нову датотеку стазе</string>
|
<string name="shared_string_save_as_gpx">Сачувај као нову датотеку стазе</string>
|
||||||
<string name="add_segment_to_the_track">Додај у датотеку стазе</string>
|
<string name="add_segment_to_the_track">Додај у датотеку стазе</string>
|
||||||
<string name="shared_string_gpx_files">Путање</string>
|
<string name="shared_string_gpx_files">Путање</string>
|
||||||
<string name="layer_gpx_layer">Путање</string>
|
<string name="layer_gpx_layer">Путање</string>
|
||||||
<string name="show_gpx">Путање</string>
|
<string name="show_gpx">Путање</string>
|
||||||
<string name="monitoring_control_start">GPX</string>
|
<string name="monitoring_control_start">РЕК</string>
|
||||||
<string name="save_track_to_gpx_globally">Уписуј путању у GPX фајл</string>
|
<string name="save_track_to_gpx_globally">Уписуј путању у GPX фајл</string>
|
||||||
<string name="shared_string_gpx_route">Траса руте</string>
|
<string name="shared_string_gpx_route">Траса руте</string>
|
||||||
<string name="empty_state_my_tracks">Додајте датотеке стаза</string>
|
<string name="empty_state_my_tracks">Додајте датотеке стаза</string>
|
||||||
|
@ -3849,9 +3847,9 @@
|
||||||
<string name="marker_save_as_track">Сачувај као датотеку стазе</string>
|
<string name="marker_save_as_track">Сачувај као датотеку стазе</string>
|
||||||
<string name="follow_track">Следи стазу</string>
|
<string name="follow_track">Следи стазу</string>
|
||||||
<string name="follow_track_descr">Изаберите датотеку стазе ради праћења</string>
|
<string name="follow_track_descr">Изаберите датотеку стазе ради праћења</string>
|
||||||
<string name="import_track_descr">Изаберите датотеку стазе ради праћења или увоза са уређаја.</string>
|
<string name="import_track_descr">Изаберите датотеку стазе ради праћења или увоза са вашег уређаја.</string>
|
||||||
<string name="select_another_track">Изаберите другу стазу</string>
|
<string name="select_another_track">Изаберите другу стазу</string>
|
||||||
<string name="navigate_to_track_descr">Наводите од моје локације до стазе</string>
|
<string name="navigate_to_track_descr">Наводите од моје позиције до стазе</string>
|
||||||
<string name="pass_whole_track_descr">Тачка стазе за навигацију</string>
|
<string name="pass_whole_track_descr">Тачка стазе за навигацију</string>
|
||||||
<string name="start_of_the_track">Почетак стазе</string>
|
<string name="start_of_the_track">Почетак стазе</string>
|
||||||
<string name="nearest_point">Најближа тачка</string>
|
<string name="nearest_point">Најближа тачка</string>
|
||||||
|
@ -3865,20 +3863,20 @@
|
||||||
<string name="plan_route_change_route_type_after">Промените врсту руте након</string>
|
<string name="plan_route_change_route_type_after">Промените врсту руте након</string>
|
||||||
<string name="what_is_new">Шта је ново</string>
|
<string name="what_is_new">Шта је ново</string>
|
||||||
<string name="shared_string_file_name">Име фајла</string>
|
<string name="shared_string_file_name">Име фајла</string>
|
||||||
<string name="number_of_gpx_files_selected_pattern"/>
|
<string name="number_of_gpx_files_selected_pattern">%s изабраних датотека стаза</string>
|
||||||
<string name="gpx_monitoring_stop">Паузирај снимање пута</string>
|
<string name="gpx_monitoring_stop">Паузирај снимање пута</string>
|
||||||
<string name="one_point_error">Додајте бар две тачке.</string>
|
<string name="one_point_error">Додајте бар две тачке.</string>
|
||||||
<string name="osm_edit_logout_success">Одјава успешна</string>
|
<string name="osm_edit_logout_success">Одјављен</string>
|
||||||
<string name="gpx_upload_private_visibility_descr">„Приватно“ значи да се траг не појављује ни на једној јавној листи, али су тачке праћења у њему у нехронолошком редоследу доступне путем јавног ГПС АПИ-ја без временских ознака.</string>
|
<string name="gpx_upload_private_visibility_descr">„Приватно“ значи да се траг не појављује ни на једној јавној листи, али су тачке праћења у њему у нехронолошком редоследу доступне путем јавног ГПС АПИ-ја без временских ознака.</string>
|
||||||
<string name="gpx_upload_identifiable_visibility_descr">„Могуће је идентификовати“ значи да ће се траг јавно приказати у вашим ГПС траговима и у јавним списковима ГПС трагова, тј. други корисници ће моћи да преузму необрађени траг и повежу га са вашим корисничким именом. Јавни подаци о временским тачкама трага из ГПС АПИ-ја који се сервирају путем АПИ-ја за тачке праћења имаће референцу на вашу оригиналну страницу праћења.</string>
|
<string name="gpx_upload_identifiable_visibility_descr">„Могуће је идентификовати“ значи да ће се траг јавно приказати у вашим ГПС траговима и у јавним списковима ГПС трагова, тј. други корисници ће моћи да преузму необрађени траг и повежу га са вашим корисничким именом. Јавни подаци о временским тачкама трага из ГПС АПИ-ја који се сервирају путем АПИ-ја за тачке праћења имаће референцу на вашу оригиналну страницу праћења.</string>
|
||||||
<string name="gpx_upload_trackable_visibility_descr">„Следљиво“ значи да се траг не приказује нигде на јавним листама, али обрађене тачке праћења са временским ознакама у њима (које не могу бити директно повезане са вама) иду кроз преузимања са јавног ГПС АПИ-ја.</string>
|
<string name="gpx_upload_trackable_visibility_descr">„Следљиво“ значи да се траг не приказује нигде на јавним листама, али обрађене тачке праћења са временским ознакама у њима (које не могу бити директно повезане са вама) иду кроз преузимања са јавног ГПС АПИ-ја.</string>
|
||||||
<string name="osm_edit_close_note">Затвори ОСМ белешку</string>
|
<string name="osm_edit_close_note">Затвори ОСМ белешку</string>
|
||||||
<string name="osm_edit_comment_note">Коментар ОСМ напомене</string>
|
<string name="osm_edit_comment_note">Коментар ОСМ напомене</string>
|
||||||
<string name="osm_login_descr">Пријавите се помоћу сигурне методе ОАутх или користите своје корисничко име и лозинку.</string>
|
<string name="osm_login_descr">Можете се пријавити користећи безбедан ОАут метод или користити своје корисничко име и лозинку.</string>
|
||||||
<string name="shared_string_add_photo">Додај фотографију</string>
|
<string name="shared_string_add_photo">Додај фотографију</string>
|
||||||
<string name="register_on_openplacereviews">Региструјте се на
|
<string name="register_on_openplacereviews">Региструјте се на
|
||||||
\nOpenPlaceReviews.</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Пријавите се на веб локацију пројекта отворених података OpenPlaceReviews.орг да бисте отпремили још више фотографија.</string>
|
<string name="register_on_openplacereviews_desc">Фотографије пружа пројекат отворених података OpenPlaceReviews.org. Да бисте поставили своје фотографије, морате се пријавити на веб страницу.</string>
|
||||||
<string name="register_opr_create_new_account">Направите нови налог</string>
|
<string name="register_opr_create_new_account">Направите нови налог</string>
|
||||||
<string name="register_opr_have_account">Већ имам</string>
|
<string name="register_opr_have_account">Већ имам</string>
|
||||||
<string name="shared_string_search_history">Претрага</string>
|
<string name="shared_string_search_history">Претрага</string>
|
||||||
|
@ -3896,4 +3894,103 @@
|
||||||
<string name="file_size_needed_for_import">Потребно за увоз</string>
|
<string name="file_size_needed_for_import">Потребно за увоз</string>
|
||||||
<string name="export_not_enough_space_descr">Уређај има слободно само %1$s. Ослободите мало простора или поништите одабир неких предмета за извоз.</string>
|
<string name="export_not_enough_space_descr">Уређај има слободно само %1$s. Ослободите мало простора или поништите одабир неких предмета за извоз.</string>
|
||||||
<string name="export_not_enough_space">Нема довољно простора</string>
|
<string name="export_not_enough_space">Нема довољно простора</string>
|
||||||
|
<string name="start_finish_icons">Иконе за почетак и завршетак</string>
|
||||||
|
<string name="navigate_point_mgrs">МГРС</string>
|
||||||
|
<string name="snowmobile_render_descr">За вожњу моторних санки са наменским путевима и стазама.</string>
|
||||||
|
<string name="navigate_point_format_mgrs">МГРС</string>
|
||||||
|
<string name="mgrs_format_descr">ОсмАнд користи МГРС, који је сличан УТМ НАТО формату.</string>
|
||||||
|
<string name="simplified_track">Поједностављена стаза</string>
|
||||||
|
<string name="simplified_track_description">Само линија руте ће бити сачувана, а путне тачке ће бити избрисане.</string>
|
||||||
|
<string name="disable_recording_once_app_killed_descrp">Паузираће евидентирање стазе када се апликација убије (преко скорашњих програма). (Индикатор рада OsmAnd-а у позадини тада нестаје из обавештајне траке.)</string>
|
||||||
|
<string name="save_global_track_interval_descr">Наведите интервал евидентирања за опште снимање стаза (укључено помоћу виџета „Снимање путовања“ на мапи).</string>
|
||||||
|
<string name="gpx_monitoring_start">Наставите снимање путовања</string>
|
||||||
|
<string name="system_default_theme">Системско подразумевана</string>
|
||||||
|
<string name="all_next_segments">Сви наредни сегменти</string>
|
||||||
|
<string name="previous_segment">Претходни сегмент</string>
|
||||||
|
<string name="all_previous_segments">Сви претходни сегменти</string>
|
||||||
|
<string name="only_selected_segment_recalc">Само изабрани сегмент ће се поново израчунати помоћу изабраног профила.</string>
|
||||||
|
<string name="all_next_segments_will_be_recalc">Сви наредни сегменти ће се поново израчунати помоћу изабраног профила.</string>
|
||||||
|
<string name="all_previous_segments_will_be_recalc">Сви претходни сегменти ће се поново израчунати помоћу изабраног профила.</string>
|
||||||
|
<string name="open_saved_track">Отвори сачувану</string>
|
||||||
|
<string name="shared_string_is_saved">је сачувано</string>
|
||||||
|
<string name="shared_string_redo">Понови</string>
|
||||||
|
<string name="release_3_8">• Ажурирано Функција планирања руте: омогућава употребу различитих типова навигације по сегменту и укључивање стаза
|
||||||
|
\n
|
||||||
|
\n • Нови мени Изглед за стазе: одаберите боју, дебљину, стрелице смера приказа, иконе почетка и завршетка
|
||||||
|
\n
|
||||||
|
\n • Побољшана видљивост бициклистичких чворова.
|
||||||
|
\n
|
||||||
|
\n • Стазе се сада могу додирнути, имају контекстуални мени са основним информацијама.
|
||||||
|
\n
|
||||||
|
\n • Побољшани алгоритми претраге
|
||||||
|
\n
|
||||||
|
\n • Побољшане опције праћења стаза у Навигацији
|
||||||
|
\n
|
||||||
|
\n • Решени проблеми са увозом / извозом подешавања профила
|
||||||
|
\n
|
||||||
|
\n</string>
|
||||||
|
<string name="sort_last_modified">Последња измена</string>
|
||||||
|
<string name="sort_name_descending">Име: З - А</string>
|
||||||
|
<string name="sort_name_ascending">Име: А - З</string>
|
||||||
|
<string name="contour_lines_thanks">Хвала вам што сте купили „Контурне линије“</string>
|
||||||
|
<string name="osm_live_payment_desc_hw">Претплата се наплаћује по изабраном периоду. Откажите га у АппГалери у било ком тренутку.</string>
|
||||||
|
<string name="osm_live_payment_subscription_management_hw">Уплата ће бити наплаћена са вашег рачуна АппГалери при потврди куповине.
|
||||||
|
\n
|
||||||
|
\nПретплата се аутоматски обнавља уколико није отказана пре датума обнове. Ваш рачун ће бити задужен за период обнове (месец / три месеца / година) само на датум обнове.
|
||||||
|
\n
|
||||||
|
\nПретплатама можете управљати и отказати их тако што ћете отићи у подешавања апликације АппГалери.</string>
|
||||||
|
<string name="routing_attr_avoid_footways_description">Избегавајте пешачке стазе</string>
|
||||||
|
<string name="routing_attr_avoid_footways_name">Избегавајте пешачке стазе</string>
|
||||||
|
<string name="development">Развој</string>
|
||||||
|
<string name="use_live_public_transport">ОсмАнд лајв подаци</string>
|
||||||
|
<string name="use_live_routing">ОсмАнд лајв подаци</string>
|
||||||
|
<string name="complex_routing_descr">Двофазно усмеравање за аутомобилску навигацију.</string>
|
||||||
|
<string name="use_native_pt">Развој матичног јавног превоза</string>
|
||||||
|
<string name="use_native_pt_desc">Пребаците се на Јава (безбедан) прорачун рутирања јавног превоза</string>
|
||||||
|
<string name="perform_oauth_authorization_description">Пријавите се помоћу ОАут-а да бисте користили осм уређивачке функције</string>
|
||||||
|
<string name="perform_oauth_authorization">Пријавите се преко ОАут-а</string>
|
||||||
|
<string name="clear_osm_token">Обришите ОпенСтритМап ОАут токен</string>
|
||||||
|
<string name="file_already_imported">Датотека је већ увезена у ОсмАнд</string>
|
||||||
|
<string name="use_two_phase_routing">Користите двофазни алгоритам усмеравања А*</string>
|
||||||
|
<string name="shared_string_graph">Графикон</string>
|
||||||
|
<string name="message_need_calculate_route_before_show_graph">%1$s подаци доступни само на путевима, морате израчунати руту користећи „Рута између тачака“ да бисте је добили.</string>
|
||||||
|
<string name="message_graph_will_be_available_after_recalculation">Сачекајте поновно израчунавање руте.
|
||||||
|
\nГрафикон ће бити доступан након поновног израчунавања.</string>
|
||||||
|
<string name="shared_string_local_maps">Локалне мапе</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
|
||||||
|
<string name="app_mode_gap">Размак</string>
|
||||||
|
<string name="icon_group_amenity">Аменити</string>
|
||||||
|
<string name="icon_group_special">Специал</string>
|
||||||
|
<string name="icon_group_transport">Превоз</string>
|
||||||
|
<string name="icon_group_service">Услуга</string>
|
||||||
|
<string name="icon_group_symbols">Симболи</string>
|
||||||
|
<string name="icon_group_sport">Спорт</string>
|
||||||
|
<string name="icon_group_emergency">Хитна помоћ</string>
|
||||||
|
<string name="icon_group_travel">Путовање</string>
|
||||||
|
<string name="message_you_need_add_two_points_to_show_graphs">Треба да додате најмање две тачке</string>
|
||||||
|
<string name="login_open_street_map">Пријавите се на OpenStreetMap.org</string>
|
||||||
|
<string name="login_open_street_map_org">Пријавите се на OpenStreetMap.org</string>
|
||||||
|
<string name="sign_in_with_open_street_map">Пријавите се помоћу ОпенСтритМап</string>
|
||||||
|
<string name="open_street_map_login_mode">Морате се пријавити да бисте отпремили нове или измењене промене.
|
||||||
|
\n
|
||||||
|
\nМожете се пријавити користећи безбедан ОАут метод или користите своје корисничко име и лозинку.</string>
|
||||||
|
<string name="use_login_password">Користите корисничко име и лозинку</string>
|
||||||
|
<string name="login_account">Налог</string>
|
||||||
|
<string name="user_login">Пријавите се</string>
|
||||||
|
<string name="manage_subscription">Управљајте претплатом</string>
|
||||||
|
<string name="subscription_payment_issue_title">Постоји проблем са вашом претплатом. Кликните на дугме да бисте отворили подешавања претплате за Гугле Плеј и да бисте поправили начин плаћања.</string>
|
||||||
|
<string name="subscription_expired_title">Претплата на ОсмАнд лајв је истекла</string>
|
||||||
|
<string name="subscription_paused_title">Претплата на ОсмАнд лајв је паузирана</string>
|
||||||
|
<string name="subscription_on_hold_title">Претплата на ОсмАнд лајв је на чекању</string>
|
||||||
|
<string name="markers_history">Историја маркера</string>
|
||||||
|
<string name="send_files_to_openstreetmap">Пошаљите ГПКС датотеку на ОпенСтритМап</string>
|
||||||
|
<string name="enter_text_separated">Унесите ознаке одвојене зарезом.</string>
|
||||||
|
<string name="gpx_upload_public_visibility_descr">„Јавно“ значи да је траг јавно приказан у вашим ГПС траговима и на јавним ГПС траговима, као и на јавном списку трагова са временским ознакама у сировом облику. Подаци који се приказују путем АПИ-ја не упућују на вашу страницу трагова. Временске ознаке праћења нису доступне путем јавног ГПС АПИ-ја и тачке праћења нису хронолошки поређане.</string>
|
||||||
|
<string name="cannot_upload_image">Није могуће отпремити слику, покушајте поново касније</string>
|
||||||
|
<string name="select_picture">Изаберите слику</string>
|
||||||
|
<string name="select_groups_for_import">Изаберите групе које ће бити увезене.</string>
|
||||||
|
<string name="select_items_for_import">Изаберите ставке које ће бити увезене.</string>
|
||||||
|
<string name="use_dev_url_descr">Пређите на употребу dev.openstreetmap.org уместо на openstreetmap.org да бисте тестирали отпремање ОСМ белешке / ПОИ / ГПКС.</string>
|
||||||
|
<string name="use_dev_url">Употреби dev.openstreetmap.org</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3995,4 +3995,5 @@
|
||||||
<string name="use_dev_url">Використовувати dev.openstreetmap.org</string>
|
<string name="use_dev_url">Використовувати dev.openstreetmap.org</string>
|
||||||
<string name="cannot_upload_image">Не вдається завантажити зображення, повторіть спробу пізніше</string>
|
<string name="cannot_upload_image">Не вдається завантажити зображення, повторіть спробу пізніше</string>
|
||||||
<string name="select_picture">Вибрати зображення</string>
|
<string name="select_picture">Вибрати зображення</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -397,6 +397,7 @@
|
||||||
<dimen name="setting_list_item_small_height">42dp</dimen>
|
<dimen name="setting_list_item_small_height">42dp</dimen>
|
||||||
<dimen name="setting_select_icon_button_height">128dp</dimen>
|
<dimen name="setting_select_icon_button_height">128dp</dimen>
|
||||||
<dimen name="setting_select_icon_button_width">164dp</dimen>
|
<dimen name="setting_select_icon_button_width">164dp</dimen>
|
||||||
|
<dimen name="setting_list_item_group_height">68dp</dimen>
|
||||||
|
|
||||||
<dimen name="slider_thumb_size">6dp</dimen>
|
<dimen name="slider_thumb_size">6dp</dimen>
|
||||||
<dimen name="slider_thumb_halo_size">12dp</dimen>
|
<dimen name="slider_thumb_halo_size">12dp</dimen>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<string name="elevation_data">You can use Elevation data for consideration of Ascent / Descent for your trip</string>
|
<string name="elevation_data">You can use Elevation data for consideration of Ascent / Descent for your trip</string>
|
||||||
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
<string name="add_photos_descr">OsmAnd shows photos from several sources:\nOpenPlaceReviews - POI photos;\nMapillary - street-level imagery;\nWeb / Wikimedia - POI photos specified in OpenStreetMap data.</string>
|
<string name="add_photos_descr">OsmAnd shows photos from several sources:\nOpenPlaceReviews - POI photos;\nMapillary - street-level imagery;\nWeb / Wikimedia - POI photos specified in OpenStreetMap data.</string>
|
||||||
<string name="use_dev_url">Use dev.openstreetmap.org</string>
|
<string name="use_dev_url">Use dev.openstreetmap.org</string>
|
||||||
<string name="use_dev_url_descr">Switch to use "dev.openstreetmap.org" instead of "openstreetmap.org" to testing uploading OSM Note / POI / GPX.</string>
|
<string name="use_dev_url_descr">Switch to use "dev.openstreetmap.org" instead of "openstreetmap.org" to testing uploading OSM Note / POI / GPX.</string>
|
||||||
|
@ -2468,6 +2469,7 @@
|
||||||
<string name="lang_fr">French</string>
|
<string name="lang_fr">French</string>
|
||||||
<string name="lang_ka">Georgian</string>
|
<string name="lang_ka">Georgian</string>
|
||||||
<string name="lang_de">German</string>
|
<string name="lang_de">German</string>
|
||||||
|
<string name="lang_de_casual">German (casual)</string>
|
||||||
<string name="lang_el">Greek</string>
|
<string name="lang_el">Greek</string>
|
||||||
<string name="lang_he">Hebrew</string>
|
<string name="lang_he">Hebrew</string>
|
||||||
<string name="lang_iw">Hebrew</string>
|
<string name="lang_iw">Hebrew</string>
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class AnalyticsHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
private final static Log LOG = PlatformUtil.getLog(AnalyticsHelper.class);
|
private final static Log LOG = PlatformUtil.getLog(AnalyticsHelper.class);
|
||||||
|
|
||||||
private final static String ANALYTICS_UPLOAD_URL = "https://test.osmand.net/api/submit_analytics";
|
private final static String ANALYTICS_UPLOAD_URL = "https://osmand.net/api/submit_analytics";
|
||||||
private final static String ANALYTICS_FILE_NAME = "analytics.json";
|
private final static String ANALYTICS_FILE_NAME = "analytics.json";
|
||||||
|
|
||||||
private final static int DATA_PARCEL_SIZE = 500; // 500 events
|
private final static int DATA_PARCEL_SIZE = 500; // 500 events
|
||||||
|
|
|
@ -66,6 +66,8 @@ import net.osmand.plus.voice.JSTTSCommandPlayerImpl;
|
||||||
import net.osmand.plus.voice.MediaCommandPlayerImpl;
|
import net.osmand.plus.voice.MediaCommandPlayerImpl;
|
||||||
import net.osmand.plus.voice.TTSCommandPlayerImpl;
|
import net.osmand.plus.voice.TTSCommandPlayerImpl;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelObfHelper;
|
||||||
import net.osmand.render.RenderingRulesStorage;
|
import net.osmand.render.RenderingRulesStorage;
|
||||||
import net.osmand.router.RoutingConfiguration;
|
import net.osmand.router.RoutingConfiguration;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -85,7 +87,6 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import btools.routingapp.BRouterServiceConnection;
|
|
||||||
import btools.routingapp.IBRouterService;
|
import btools.routingapp.IBRouterService;
|
||||||
|
|
||||||
import static net.osmand.plus.AppVersionUpgradeOnInit.LAST_APP_VERSION;
|
import static net.osmand.plus.AppVersionUpgradeOnInit.LAST_APP_VERSION;
|
||||||
|
@ -457,11 +458,14 @@ public class AppInitializer implements IProgress {
|
||||||
app.mapMarkersHelper = startupInit(new MapMarkersHelper(app), MapMarkersHelper.class);
|
app.mapMarkersHelper = startupInit(new MapMarkersHelper(app), MapMarkersHelper.class);
|
||||||
app.searchUICore = startupInit(new QuickSearchHelper(app), QuickSearchHelper.class);
|
app.searchUICore = startupInit(new QuickSearchHelper(app), QuickSearchHelper.class);
|
||||||
app.mapViewTrackingUtilities = startupInit(new MapViewTrackingUtilities(app), MapViewTrackingUtilities.class);
|
app.mapViewTrackingUtilities = startupInit(new MapViewTrackingUtilities(app), MapViewTrackingUtilities.class);
|
||||||
app.travelDbHelper = new TravelDbHelper(app);
|
|
||||||
|
//TODO cleanup after Travel migration complete
|
||||||
|
app.travelHelper = TravelObfHelper.checkIfObfFileExists(app) ? new TravelObfHelper(app) : new TravelDbHelper(app);
|
||||||
if (app.getSettings().SELECTED_TRAVEL_BOOK.get() != null) {
|
if (app.getSettings().SELECTED_TRAVEL_BOOK.get() != null) {
|
||||||
app.travelDbHelper.initTravelBooks();
|
app.travelHelper.initTravelBooks();
|
||||||
}
|
}
|
||||||
app.travelDbHelper = startupInit(app.travelDbHelper, TravelDbHelper.class);
|
app.travelHelper = startupInit(app.travelHelper, TravelHelper.class);
|
||||||
|
|
||||||
app.lockHelper = startupInit(new LockHelper(app), LockHelper.class);
|
app.lockHelper = startupInit(new LockHelper(app), LockHelper.class);
|
||||||
app.settingsHelper = startupInit(new SettingsHelper(app), SettingsHelper.class);
|
app.settingsHelper = startupInit(new SettingsHelper(app), SettingsHelper.class);
|
||||||
app.quickActionRegistry = startupInit(new QuickActionRegistry(app.getSettings()), QuickActionRegistry.class);
|
app.quickActionRegistry = startupInit(new QuickActionRegistry(app.getSettings()), QuickActionRegistry.class);
|
||||||
|
|
|
@ -79,7 +79,7 @@ import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||||
import net.osmand.plus.voice.CommandPlayer;
|
import net.osmand.plus.voice.CommandPlayer;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.router.GeneralRouter;
|
import net.osmand.router.GeneralRouter;
|
||||||
import net.osmand.router.RoutingConfiguration;
|
import net.osmand.router.RoutingConfiguration;
|
||||||
import net.osmand.router.RoutingConfiguration.Builder;
|
import net.osmand.router.RoutingConfiguration.Builder;
|
||||||
|
@ -148,7 +148,7 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
OsmandRegions regions;
|
OsmandRegions regions;
|
||||||
GeocodingLookupService geocodingLookupService;
|
GeocodingLookupService geocodingLookupService;
|
||||||
QuickSearchHelper searchUICore;
|
QuickSearchHelper searchUICore;
|
||||||
TravelDbHelper travelDbHelper;
|
TravelHelper travelHelper;
|
||||||
InAppPurchaseHelper inAppPurchaseHelper;
|
InAppPurchaseHelper inAppPurchaseHelper;
|
||||||
MapViewTrackingUtilities mapViewTrackingUtilities;
|
MapViewTrackingUtilities mapViewTrackingUtilities;
|
||||||
LockHelper lockHelper;
|
LockHelper lockHelper;
|
||||||
|
@ -481,8 +481,8 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
return searchUICore;
|
return searchUICore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TravelDbHelper getTravelDbHelper() {
|
public TravelHelper getTravelHelper() {
|
||||||
return travelDbHelper;
|
return travelHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InAppPurchaseHelper getInAppPurchaseHelper() {
|
public InAppPurchaseHelper getInAppPurchaseHelper() {
|
||||||
|
|
|
@ -76,6 +76,7 @@ import net.osmand.plus.views.layers.MapControlsLayer;
|
||||||
import net.osmand.plus.wikipedia.WikipediaDialogFragment;
|
import net.osmand.plus.wikipedia.WikipediaDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.WikivoyageWelcomeDialogFragment;
|
import net.osmand.plus.wikivoyage.WikivoyageWelcomeDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.plus.wikivoyage.explore.WikivoyageExploreActivity;
|
import net.osmand.plus.wikivoyage.explore.WikivoyageExploreActivity;
|
||||||
import net.osmand.router.GeneralRouter;
|
import net.osmand.router.GeneralRouter;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -924,9 +925,9 @@ public class MapActivityActions implements DialogProvider {
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
|
||||||
MapActivity.clearPrevActivityIntent();
|
MapActivity.clearPrevActivityIntent();
|
||||||
TravelDbHelper travelDbHelper = getMyApplication().getTravelDbHelper();
|
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
||||||
travelDbHelper.initTravelBooks();
|
travelHelper.initTravelBooks();
|
||||||
if (travelDbHelper.getSelectedTravelBook() == null) {
|
if (travelHelper.getSelectedTravelBook() == null) {
|
||||||
WikivoyageWelcomeDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
WikivoyageWelcomeDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(mapActivity, WikivoyageExploreActivity.class);
|
Intent intent = new Intent(mapActivity, WikivoyageExploreActivity.class);
|
||||||
|
|
|
@ -930,11 +930,21 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
|
||||||
stopRecording(activity, false);
|
stopRecording(activity, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mapActivityResume(MapActivity activity) {
|
||||||
|
this.mapActivity = activity;
|
||||||
|
if (Build.VERSION.SDK_INT < 29) {
|
||||||
|
runAction(activity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mapActivityResumeOnTop(MapActivity activity) {
|
public void mapActivityResumeOnTop(MapActivity activity) {
|
||||||
this.mapActivity = activity;
|
this.mapActivity = activity;
|
||||||
// ((AudioManager) activity.getSystemService(Context.AUDIO_SERVICE)).registerMediaButtonEventReceiver(
|
runAction(activity);
|
||||||
// new ComponentName(activity, MediaRemoteControlReceiver.class));
|
}
|
||||||
|
|
||||||
|
private void runAction(MapActivity activity) {
|
||||||
if (runAction != -1) {
|
if (runAction != -1) {
|
||||||
takeAction(activity, actionLon, actionLat, runAction);
|
takeAction(activity, actionLon, actionLat, runAction);
|
||||||
runAction = -1;
|
runAction = -1;
|
||||||
|
|
|
@ -417,7 +417,9 @@ public class AvoidSpecificRoads {
|
||||||
AvoidRoadInfo other = (AvoidRoadInfo) obj;
|
AvoidRoadInfo other = (AvoidRoadInfo) obj;
|
||||||
return Math.abs(latitude - other.latitude) < 0.00001
|
return Math.abs(latitude - other.latitude) < 0.00001
|
||||||
&& Math.abs(longitude - other.longitude) < 0.00001
|
&& Math.abs(longitude - other.longitude) < 0.00001
|
||||||
&& Algorithms.objectEquals(name, other.name);
|
&& Algorithms.objectEquals(name, other.name)
|
||||||
|
&& Algorithms.objectEquals(appModeKey, other.appModeKey)
|
||||||
|
&& id == other.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,6 +34,7 @@ import net.osmand.plus.dialogs.ImportGpxBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
||||||
import net.osmand.plus.measurementtool.MeasurementToolFragment;
|
import net.osmand.plus.measurementtool.MeasurementToolFragment;
|
||||||
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
@ -67,6 +68,8 @@ import static net.osmand.IndexConstants.WPT_CHART_FILE_EXT;
|
||||||
import static net.osmand.data.FavouritePoint.DEFAULT_BACKGROUND_TYPE;
|
import static net.osmand.data.FavouritePoint.DEFAULT_BACKGROUND_TYPE;
|
||||||
import static net.osmand.plus.myplaces.FavoritesActivity.GPX_TAB;
|
import static net.osmand.plus.myplaces.FavoritesActivity.GPX_TAB;
|
||||||
import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID;
|
import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID;
|
||||||
|
import static net.osmand.plus.settings.backend.backup.SettingsHelper.REPLACE_KEY;
|
||||||
|
import static net.osmand.plus.settings.backend.backup.SettingsHelper.SETTINGS_TYPE_LIST_KEY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Koen Rabaey
|
* @author Koen Rabaey
|
||||||
|
@ -203,10 +206,11 @@ public class ImportHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
public static String getNameFromContentUri(OsmandApplication app, Uri contentUri) {
|
public static String getNameFromContentUri(OsmandApplication app, Uri contentUri) {
|
||||||
try {
|
try {
|
||||||
String name;
|
String name;
|
||||||
Cursor returnCursor = app.getContentResolver().query(contentUri, new String[] {OpenableColumns.DISPLAY_NAME}, null, null, null);
|
Cursor returnCursor = app.getContentResolver().query(contentUri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null);
|
||||||
if (returnCursor != null && returnCursor.moveToFirst()) {
|
if (returnCursor != null && returnCursor.moveToFirst()) {
|
||||||
int columnIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
int columnIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
||||||
if (columnIndex != -1) {
|
if (columnIndex != -1) {
|
||||||
|
@ -257,18 +261,32 @@ public class ImportHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, CallbackWithObject<List<SettingsItem>> callback) {
|
private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, CallbackWithObject<List<SettingsItem>> callback) {
|
||||||
if (extras != null && extras.containsKey(SettingsHelper.SETTINGS_VERSION_KEY) && extras.containsKey(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY)) {
|
if (extras != null
|
||||||
|
&& extras.containsKey(SettingsHelper.SETTINGS_VERSION_KEY)
|
||||||
|
&& extras.containsKey(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY)) {
|
||||||
int version = extras.getInt(SettingsHelper.SETTINGS_VERSION_KEY, -1);
|
int version = extras.getInt(SettingsHelper.SETTINGS_VERSION_KEY, -1);
|
||||||
String latestChanges = extras.getString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY);
|
String latestChanges = extras.getString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY);
|
||||||
handleOsmAndSettingsImport(intentUri, fileName, latestChanges, version, callback);
|
boolean replace = extras.getBoolean(REPLACE_KEY);
|
||||||
|
ArrayList<String> settingsTypeKeys = extras.getStringArrayList(SETTINGS_TYPE_LIST_KEY);
|
||||||
|
List<ExportSettingsType> settingsTypes = null;
|
||||||
|
if (settingsTypeKeys != null) {
|
||||||
|
settingsTypes = new ArrayList<>();
|
||||||
|
for (String key : settingsTypeKeys) {
|
||||||
|
settingsTypes.add(ExportSettingsType.valueOf(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handleOsmAndSettingsImport(intentUri, fileName, settingsTypes, replace, latestChanges, version, callback);
|
||||||
} else {
|
} else {
|
||||||
handleOsmAndSettingsImport(intentUri, fileName, null, -1, callback);
|
handleOsmAndSettingsImport(intentUri, fileName, null, false, null, -1,
|
||||||
|
callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleOsmAndSettingsImport(Uri uri, String name, String latestChanges, int version,
|
protected void handleOsmAndSettingsImport(Uri uri, String name, final List<ExportSettingsType> settingsTypes,
|
||||||
CallbackWithObject<List<SettingsItem>> callback) {
|
final boolean replace, String latestChanges, int version,
|
||||||
executeImportTask(new SettingsImportTask(activity, uri, name, latestChanges, version, callback));
|
CallbackWithObject<List<SettingsItem>> callback) {
|
||||||
|
executeImportTask(new SettingsImportTask(activity, uri, name, settingsTypes, replace, latestChanges, version,
|
||||||
|
callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleXmlFileImport(Uri intentUri, String fileName, CallbackWithObject routingCallback) {
|
protected void handleXmlFileImport(Uri intentUri, String fileName, CallbackWithObject routingCallback) {
|
||||||
|
|
|
@ -11,38 +11,50 @@ import net.osmand.AndroidUtils;
|
||||||
import net.osmand.CallbackWithObject;
|
import net.osmand.CallbackWithObject;
|
||||||
import net.osmand.FileUtils;
|
import net.osmand.FileUtils;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
|
import net.osmand.plus.AppInitializer;
|
||||||
import net.osmand.plus.CustomOsmandPlugin;
|
import net.osmand.plus.CustomOsmandPlugin;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.BaseLoadAsyncTask;
|
import net.osmand.plus.base.BaseLoadAsyncTask;
|
||||||
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
|
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.CheckDuplicatesListener;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper.CheckDuplicatesListener;
|
||||||
import net.osmand.plus.settings.backend.backup.PluginSettingsItem;
|
import net.osmand.plus.settings.backend.backup.PluginSettingsItem;
|
||||||
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
|
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsCollectListener;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsCollectListener;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsImportListener;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper.SettingsImportListener;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
||||||
|
import net.osmand.plus.settings.fragments.ImportCompleteFragment;
|
||||||
import net.osmand.plus.settings.fragments.ImportSettingsFragment;
|
import net.osmand.plus.settings.fragments.ImportSettingsFragment;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static net.osmand.plus.AppInitializer.loadRoutingFiles;
|
import static net.osmand.plus.AppInitializer.loadRoutingFiles;
|
||||||
|
import static net.osmand.plus.settings.backend.backup.SettingsHelper.getSettingsToOperate;
|
||||||
|
|
||||||
class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
||||||
|
|
||||||
private Uri uri;
|
private Uri uri;
|
||||||
private String name;
|
private String name;
|
||||||
|
private List<ExportSettingsType> settingsTypes;
|
||||||
|
private boolean replace;
|
||||||
private String latestChanges;
|
private String latestChanges;
|
||||||
private int version;
|
private int version;
|
||||||
private CallbackWithObject<List<SettingsItem>> callback;
|
private CallbackWithObject<List<SettingsItem>> callback;
|
||||||
|
|
||||||
public SettingsImportTask(@NonNull FragmentActivity activity, @NonNull Uri uri,
|
public SettingsImportTask(@NonNull FragmentActivity activity, @NonNull Uri uri,
|
||||||
@NonNull String name, String latestChanges, int version,
|
@NonNull String name, List<ExportSettingsType> settingsTypes,
|
||||||
CallbackWithObject<List<SettingsItem>> callback) {
|
boolean replace, String latestChanges, int version,
|
||||||
|
CallbackWithObject<List<SettingsItem>> callback) {
|
||||||
super(activity);
|
super(activity);
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.settingsTypes = settingsTypes;
|
||||||
|
this.replace = replace;
|
||||||
this.latestChanges = latestChanges;
|
this.latestChanges = latestChanges;
|
||||||
this.version = version;
|
this.version = version;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
@ -60,7 +72,8 @@ class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
||||||
File tempDir = FileUtils.getTempDir(app);
|
File tempDir = FileUtils.getTempDir(app);
|
||||||
final File file = new File(tempDir, name);
|
final File file = new File(tempDir, name);
|
||||||
if (error == null && file.exists()) {
|
if (error == null && file.exists()) {
|
||||||
app.getSettingsHelper().collectSettings(file, latestChanges, version, new SettingsCollectListener() {
|
final SettingsHelper settingsHelper = app.getSettingsHelper();
|
||||||
|
settingsHelper.collectSettings(file, latestChanges, version, new SettingsCollectListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSettingsCollectFinished(boolean succeed, boolean empty, @NonNull List<SettingsItem> items) {
|
public void onSettingsCollectFinished(boolean succeed, boolean empty, @NonNull List<SettingsItem> items) {
|
||||||
hideProgress();
|
hideProgress();
|
||||||
|
@ -78,10 +91,16 @@ class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
||||||
handlePluginImport(pluginItem, file);
|
handlePluginImport(pluginItem, file);
|
||||||
}
|
}
|
||||||
if (!pluginIndependentItems.isEmpty()) {
|
if (!pluginIndependentItems.isEmpty()) {
|
||||||
FragmentActivity activity = activityRef.get();
|
if (settingsTypes == null) {
|
||||||
if (activity != null) {
|
FragmentActivity activity = activityRef.get();
|
||||||
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
if (activity != null) {
|
||||||
ImportSettingsFragment.showInstance(fragmentManager, pluginIndependentItems, file);
|
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
||||||
|
ImportSettingsFragment.showInstance(fragmentManager, pluginIndependentItems, file);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Map<ExportSettingsType, List<?>> allSettingsMap = getSettingsToOperate(pluginIndependentItems, false);
|
||||||
|
List<SettingsItem> settingsList = settingsHelper.getFilteredSettingsItems(allSettingsMap, settingsTypes);
|
||||||
|
settingsHelper.checkDuplicates(file, settingsList, settingsList, getDuplicatesListener(file, replace));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (empty) {
|
} else if (empty) {
|
||||||
|
@ -95,6 +114,42 @@ class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CheckDuplicatesListener getDuplicatesListener(final File file, final boolean replace) {
|
||||||
|
return new CheckDuplicatesListener() {
|
||||||
|
@Override
|
||||||
|
public void onDuplicatesChecked(@NonNull List<Object> duplicates, List<SettingsItem> items) {
|
||||||
|
if (replace) {
|
||||||
|
for (SettingsItem item : items) {
|
||||||
|
item.setShouldReplace(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
app.getSettingsHelper().importSettings(file, items, "", 1, getImportListener(file));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private SettingsImportListener getImportListener(final File file) {
|
||||||
|
return new SettingsImportListener() {
|
||||||
|
@Override
|
||||||
|
public void onSettingsImportFinished(boolean succeed, @NonNull List<SettingsItem> items) {
|
||||||
|
if (succeed) {
|
||||||
|
app.getRendererRegistry().updateExternalRenderers();
|
||||||
|
app.getPoiFilters().loadSelectedPoiFilters();
|
||||||
|
AppInitializer.loadRoutingFiles(app, null);
|
||||||
|
FragmentActivity activity = activityRef.get();
|
||||||
|
if (activity instanceof MapActivity) {
|
||||||
|
((MapActivity) activity).getMapLayers().getMapWidgetRegistry().updateVisibleWidgets();
|
||||||
|
((MapActivity) activity).updateApplicationModeSettings();
|
||||||
|
}
|
||||||
|
if (file != null && activity != null) {
|
||||||
|
FragmentManager fm = activity.getSupportFragmentManager();
|
||||||
|
ImportCompleteFragment.showInstance(fm, items, file.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void handlePluginImport(final PluginSettingsItem pluginItem, final File file) {
|
private void handlePluginImport(final PluginSettingsItem pluginItem, final File file) {
|
||||||
FragmentActivity activity = activityRef.get();
|
FragmentActivity activity = activityRef.get();
|
||||||
final ProgressDialog progress;
|
final ProgressDialog progress;
|
||||||
|
|
|
@ -85,7 +85,8 @@ public class ZipImportTask extends BaseLoadAsyncTask<Void, Void, ImportType> {
|
||||||
importHelper.handleKmzImport(uri, name + GPX_FILE_EXT, save, useImportDir);
|
importHelper.handleKmzImport(uri, name + GPX_FILE_EXT, save, useImportDir);
|
||||||
} else if (importType == ImportType.SETTINGS) {
|
} else if (importType == ImportType.SETTINGS) {
|
||||||
String name = createUniqueFileName(app, "settings", TEMP_DIR, OSMAND_SETTINGS_FILE_EXT);
|
String name = createUniqueFileName(app, "settings", TEMP_DIR, OSMAND_SETTINGS_FILE_EXT);
|
||||||
importHelper.handleOsmAndSettingsImport(uri, name + OSMAND_SETTINGS_FILE_EXT, null, -1, null);
|
importHelper.handleOsmAndSettingsImport(uri, name + OSMAND_SETTINGS_FILE_EXT,
|
||||||
|
null, false, null, -1, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,6 +14,8 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -27,14 +29,12 @@ import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.view.ContextThemeWrapper;
|
import androidx.appcompat.view.ContextThemeWrapper;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.graphics.drawable.DrawableCompat;
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.data.Amenity;
|
import net.osmand.data.Amenity;
|
||||||
|
@ -42,11 +42,7 @@ import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.osm.io.NetworkUtils;
|
import net.osmand.osm.io.NetworkUtils;
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.*;
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
import net.osmand.plus.OsmandPlugin;
|
|
||||||
import net.osmand.plus.R;
|
|
||||||
import net.osmand.plus.UiUtilities;
|
|
||||||
import net.osmand.plus.activities.ActivityResultListener;
|
import net.osmand.plus.activities.ActivityResultListener;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.helpers.FontCache;
|
import net.osmand.plus.helpers.FontCache;
|
||||||
|
@ -69,7 +65,6 @@ import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.plus.widgets.tools.ClickableSpanTouchListener;
|
import net.osmand.plus.widgets.tools.ClickableSpanTouchListener;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.openplacereviews.opendb.util.exception.FailedVerificationException;
|
import org.openplacereviews.opendb.util.exception.FailedVerificationException;
|
||||||
|
|
||||||
|
@ -77,13 +72,7 @@ import java.io.BufferedInputStream;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask.GetImageCardsListener;
|
import static net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask.GetImageCardsListener;
|
||||||
|
|
||||||
|
@ -119,6 +108,8 @@ public class MenuBuilder {
|
||||||
private String preferredMapLang;
|
private String preferredMapLang;
|
||||||
private String preferredMapAppLang;
|
private String preferredMapAppLang;
|
||||||
private boolean transliterateNames;
|
private boolean transliterateNames;
|
||||||
|
private View view;
|
||||||
|
private View photoButton;
|
||||||
|
|
||||||
private final OpenDBAPI openDBAPI = new OpenDBAPI();
|
private final OpenDBAPI openDBAPI = new OpenDBAPI();
|
||||||
private String[] placeId = new String[0];
|
private String[] placeId = new String[0];
|
||||||
|
@ -131,6 +122,14 @@ public class MenuBuilder {
|
||||||
@Override
|
@Override
|
||||||
public void onPlaceIdAcquired(String[] placeId) {
|
public void onPlaceIdAcquired(String[] placeId) {
|
||||||
MenuBuilder.this.placeId = placeId;
|
MenuBuilder.this.placeId = placeId;
|
||||||
|
if (placeId.length < 2) {
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
photoButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -239,6 +238,7 @@ public class MenuBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void build(View view) {
|
public void build(View view) {
|
||||||
|
this.view = view;
|
||||||
firstRow = true;
|
firstRow = true;
|
||||||
hidden = false;
|
hidden = false;
|
||||||
buildTopInternal(view);
|
buildTopInternal(view);
|
||||||
|
@ -412,7 +412,10 @@ public class MenuBuilder {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//TODO This feature is under development
|
//TODO This feature is under development
|
||||||
view.setVisibility(View.VISIBLE);
|
if (!OsmandPlugin.isDevelopment()) {
|
||||||
|
view.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
photoButton = view;
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,7 +433,9 @@ public class MenuBuilder {
|
||||||
OnActivityResultListener() {
|
OnActivityResultListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onResult(int resultCode, Intent resultData) {
|
public void onResult(int resultCode, Intent resultData) {
|
||||||
handleSelectedImage(view, resultData.getData());
|
if (resultData != null) {
|
||||||
|
handleSelectedImage(view, resultData.getData());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -443,10 +448,12 @@ public class MenuBuilder {
|
||||||
try {
|
try {
|
||||||
inputStream = app.getContentResolver().openInputStream(uri);
|
inputStream = app.getContentResolver().openInputStream(uri);
|
||||||
if (inputStream != null) {
|
if (inputStream != null) {
|
||||||
uploadImageToPlace(view, inputStream);
|
uploadImageToPlace(inputStream);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error(e);
|
LOG.error(e);
|
||||||
|
String str = app.getString(R.string.cannot_upload_image);
|
||||||
|
showToastMessage(str);
|
||||||
} finally {
|
} finally {
|
||||||
Algorithms.closeStream(inputStream);
|
Algorithms.closeStream(inputStream);
|
||||||
}
|
}
|
||||||
|
@ -455,7 +462,7 @@ public class MenuBuilder {
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void uploadImageToPlace(View view, InputStream image) {
|
private void uploadImageToPlace(InputStream image) {
|
||||||
InputStream serverData = new ByteArrayInputStream(compressImage(image));
|
InputStream serverData = new ByteArrayInputStream(compressImage(image));
|
||||||
final String baseUrl = OPRWebviewActivity.getBaseUrl(app);
|
final String baseUrl = OPRWebviewActivity.getBaseUrl(app);
|
||||||
String url = baseUrl + "api/ipfs/image";
|
String url = baseUrl + "api/ipfs/image";
|
||||||
|
@ -463,26 +470,60 @@ public class MenuBuilder {
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
try {
|
try {
|
||||||
|
StringBuilder error = new StringBuilder();
|
||||||
res = openDBAPI.uploadImage(
|
res = openDBAPI.uploadImage(
|
||||||
placeId,
|
placeId,
|
||||||
baseUrl,
|
baseUrl,
|
||||||
OPRWebviewActivity.getPrivateKeyFromCookie(app),
|
OPRWebviewActivity.getPrivateKeyFromCookie(app),
|
||||||
OPRWebviewActivity.getUsernameFromCookie(app),
|
OPRWebviewActivity.getUsernameFromCookie(app),
|
||||||
response);
|
response, error);
|
||||||
|
if (res != 200) {
|
||||||
|
showToastMessage(error.toString());
|
||||||
|
} else {
|
||||||
|
//ok, continue
|
||||||
|
}
|
||||||
} catch (FailedVerificationException e) {
|
} catch (FailedVerificationException e) {
|
||||||
LOG.error(e);
|
LOG.error(e);
|
||||||
app.showToastMessage(R.string.cannot_upload_image);
|
checkTokenAndShowScreen();
|
||||||
}
|
}
|
||||||
if (res != 200) {
|
if (res != 200) {
|
||||||
//image was uploaded but not added to blockchain
|
//image was uploaded but not added to blockchain
|
||||||
app.showToastMessage(R.string.cannot_upload_image);
|
checkTokenAndShowScreen();
|
||||||
} else {
|
} else {
|
||||||
app.showToastMessage(R.string.successfully_uploaded_pattern, 1, 1);
|
String str = app.getString(R.string.successfully_uploaded_pattern, 1, 1);
|
||||||
|
showToastMessage(str);
|
||||||
//refresh the image
|
//refresh the image
|
||||||
execute(new GetImageCardsTask(mapActivity, getLatLon(), getAdditionalCardParams(), imageCardListener));
|
execute(new GetImageCardsTask(mapActivity, getLatLon(), getAdditionalCardParams(), imageCardListener));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
app.showToastMessage(R.string.cannot_upload_image);
|
checkTokenAndShowScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showToastMessage(final String str) {
|
||||||
|
new Handler(Looper.getMainLooper()).post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Toast.makeText(mapActivity.getBaseContext(), str, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//This method runs on non main thread
|
||||||
|
private void checkTokenAndShowScreen() {
|
||||||
|
final String baseUrl = OPRWebviewActivity.getBaseUrl(app);
|
||||||
|
final String name = OPRWebviewActivity.getUsernameFromCookie(app);
|
||||||
|
final String privateKey = OPRWebviewActivity.getPrivateKeyFromCookie(app);
|
||||||
|
if (openDBAPI.checkPrivateKeyValid(baseUrl, name, privateKey)) {
|
||||||
|
String str = app.getString(R.string.cannot_upload_image);
|
||||||
|
showToastMessage(str);
|
||||||
|
} else {
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
OprStartFragment.showInstance(mapActivity.getSupportFragmentManager());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1186,4 +1227,4 @@ public class MenuBuilder {
|
||||||
public static <P> void execute(AsyncTask<P, ?, ?> task, P... requests) {
|
public static <P> void execute(AsyncTask<P, ?, ?> task, P... requests) {
|
||||||
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, requests);
|
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, requests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,9 @@ import net.osmand.util.OpeningHoursParser;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.net.URLDecoder;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.DecimalFormatSymbols;
|
import java.text.DecimalFormatSymbols;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -784,20 +786,29 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
||||||
String wikidataValue = amenity.getAdditionalInfo(Amenity.WIKIDATA);
|
String wikidataValue = amenity.getAdditionalInfo(Amenity.WIKIDATA);
|
||||||
String wikimediaValue = amenity.getAdditionalInfo(Amenity.WIKIMEDIA_COMMONS);
|
String wikimediaValue = amenity.getAdditionalInfo(Amenity.WIKIMEDIA_COMMONS);
|
||||||
if (!Algorithms.isEmpty(imageValue)) {
|
if (!Algorithms.isEmpty(imageValue)) {
|
||||||
params.put("osm_image", imageValue);
|
params.put("osm_image", getDecodedAdditionalInfo(imageValue));
|
||||||
}
|
}
|
||||||
if (!Algorithms.isEmpty(mapillaryValue)) {
|
if (!Algorithms.isEmpty(mapillaryValue)) {
|
||||||
params.put("osm_mapillary_key", mapillaryValue);
|
params.put("osm_mapillary_key", getDecodedAdditionalInfo(mapillaryValue));
|
||||||
}
|
}
|
||||||
if (!Algorithms.isEmpty(wikidataValue)) {
|
if (!Algorithms.isEmpty(wikidataValue)) {
|
||||||
params.put(Amenity.WIKIDATA, wikidataValue);
|
params.put(Amenity.WIKIDATA, getDecodedAdditionalInfo(wikidataValue));
|
||||||
}
|
}
|
||||||
if (!Algorithms.isEmpty(wikimediaValue)) {
|
if (!Algorithms.isEmpty(wikimediaValue)) {
|
||||||
params.put(Amenity.WIKIMEDIA_COMMONS, wikimediaValue);
|
params.put(Amenity.WIKIMEDIA_COMMONS, getDecodedAdditionalInfo(wikimediaValue));
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getDecodedAdditionalInfo(String additionalInfo) {
|
||||||
|
try {
|
||||||
|
return URLDecoder.decode(additionalInfo, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
LOG.error(e);
|
||||||
|
}
|
||||||
|
return additionalInfo;
|
||||||
|
}
|
||||||
|
|
||||||
private CollapsableView getPoiTypeCollapsableView(final Context context, boolean collapsed,
|
private CollapsableView getPoiTypeCollapsableView(final Context context, boolean collapsed,
|
||||||
@NonNull final List<PoiType> categoryTypes,
|
@NonNull final List<PoiType> categoryTypes,
|
||||||
final boolean poiAdditional, AmenityInfoRow textRow) {
|
final boolean poiAdditional, AmenityInfoRow textRow) {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders.cards;
|
package net.osmand.plus.mapcontextmenu.builders.cards;
|
||||||
|
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import net.osmand.AndroidNetworkUtils;
|
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
@ -12,7 +12,6 @@ import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public class IPFSImageCard extends ImageCard {
|
public class IPFSImageCard extends ImageCard {
|
||||||
private static final String BASE_URL = "https://test.openplacereviews.org/api/ipfs/image-ipfs?cid=";
|
|
||||||
private static final Log LOG = PlatformUtil.getLog(IPFSImageCard.class);
|
private static final Log LOG = PlatformUtil.getLog(IPFSImageCard.class);
|
||||||
|
|
||||||
public IPFSImageCard(MapActivity mapActivity, JSONObject imageObject) {
|
public IPFSImageCard(MapActivity mapActivity, JSONObject imageObject) {
|
||||||
|
@ -23,6 +22,7 @@ public class IPFSImageCard extends ImageCard {
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
LOG.error(e);
|
LOG.error(e);
|
||||||
}
|
}
|
||||||
|
String BASE_URL = mapActivity.getString(R.string.opr_base_url) + "api/ipfs/image-ipfs?cid=";
|
||||||
url = BASE_URL + cid;
|
url = BASE_URL + cid;
|
||||||
imageHiresUrl = BASE_URL + cid;
|
imageHiresUrl = BASE_URL + cid;
|
||||||
imageUrl = BASE_URL + cid;
|
imageUrl = BASE_URL + cid;
|
||||||
|
|
|
@ -27,6 +27,7 @@ import net.osmand.plus.R;
|
||||||
import net.osmand.plus.Version;
|
import net.osmand.plus.Version;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
|
@ -567,11 +568,11 @@ public class MapMarkersHelper {
|
||||||
@NonNull
|
@NonNull
|
||||||
public List<MapMarkersGroup> getGroupsForSavedArticlesTravelBook() {
|
public List<MapMarkersGroup> getGroupsForSavedArticlesTravelBook() {
|
||||||
List<MapMarkersGroup> res = new ArrayList<>();
|
List<MapMarkersGroup> res = new ArrayList<>();
|
||||||
TravelDbHelper travelDbHelper = ctx.getTravelDbHelper();
|
TravelHelper travelHelper = ctx.getTravelHelper();
|
||||||
if (travelDbHelper.getSelectedTravelBook() != null) {
|
if (travelHelper.getSelectedTravelBook() != null) {
|
||||||
List<TravelArticle> savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles();
|
List<TravelArticle> savedArticles = travelHelper.getLocalDataHelper().getSavedArticles();
|
||||||
for (TravelArticle art : savedArticles) {
|
for (TravelArticle art : savedArticles) {
|
||||||
String gpxName = travelDbHelper.getGPXName(art);
|
String gpxName = travelHelper.getGPXName(art);
|
||||||
File path = ctx.getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
|
File path = ctx.getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
|
||||||
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists());
|
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists());
|
||||||
MapMarkersGroup search = getMapMarkerGroupById(getMarkerGroupId(path), MapMarkersGroup.GPX_TYPE);
|
MapMarkersGroup search = getMapMarkerGroupById(getMarkerGroupId(path), MapMarkersGroup.GPX_TYPE);
|
||||||
|
|
|
@ -37,6 +37,7 @@ import net.osmand.plus.mapmarkers.SelectWptCategoriesBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
|
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -163,11 +164,11 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
|
||||||
CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
|
CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
|
||||||
items.add(categoriesSubHeader);
|
items.add(categoriesSubHeader);
|
||||||
}
|
}
|
||||||
TravelDbHelper travelDbHelper = mapActivity.getMyApplication().getTravelDbHelper();
|
TravelHelper travelHelper = mapActivity.getMyApplication().getTravelHelper();
|
||||||
if (travelDbHelper.getSelectedTravelBook() != null) {
|
if (travelHelper.getSelectedTravelBook() != null) {
|
||||||
List<TravelArticle> savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles();
|
List<TravelArticle> savedArticles = travelHelper.getLocalDataHelper().getSavedArticles();
|
||||||
for (TravelArticle art : savedArticles) {
|
for (TravelArticle art : savedArticles) {
|
||||||
String gpxName = travelDbHelper.getGPXName(art);
|
String gpxName = travelHelper.getGPXName(art);
|
||||||
File path = mapActivity.getMyApplication().getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
|
File path = mapActivity.getMyApplication().getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
|
||||||
if (path.getAbsolutePath().equals(group.getGpxPath())) {
|
if (path.getAbsolutePath().equals(group.getGpxPath())) {
|
||||||
group.setWikivoyageArticle(art);
|
group.setWikivoyageArticle(art);
|
||||||
|
|
|
@ -486,7 +486,7 @@ public class TrackActivityFragmentAdapter implements TrackBitmapDrawerListener {
|
||||||
String title = metadata.getArticleTitle();
|
String title = metadata.getArticleTitle();
|
||||||
String lang = metadata.getArticleLang();
|
String lang = metadata.getArticleLang();
|
||||||
if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(lang)) {
|
if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(lang)) {
|
||||||
return app.getTravelDbHelper().getArticle(title, lang);
|
return app.getTravelHelper().getArticle(title, lang);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,19 +11,21 @@ import android.webkit.CookieManager;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.webkit.WebViewClient;
|
import android.webkit.WebViewClient;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class OPRWebviewActivity extends OsmandActionBarActivity {
|
public class OPRWebviewActivity extends OsmandActionBarActivity {
|
||||||
public static final String KEY_LOGIN = "LOGIN_KEY";
|
public static final String KEY_LOGIN = "LOGIN_KEY";
|
||||||
public static String KEY_TITLE = "TITLE_KEY";
|
public static final String KEY_TITLE = "TITLE_KEY";
|
||||||
|
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)";
|
||||||
private WebView webView;
|
private WebView webView;
|
||||||
private boolean isLogin = false;
|
private boolean isLogin = false;
|
||||||
|
|
||||||
|
@ -43,8 +45,13 @@ public class OPRWebviewActivity extends OsmandActionBarActivity {
|
||||||
return getBaseUrl(ctx) + "signup";
|
return getBaseUrl(ctx) + "signup";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getFinishUrl(Context ctx) {
|
public static List<String> getFinishUrls(Context ctx) {
|
||||||
return getCookieUrl(ctx);
|
String googleOAuthFinishUrl = getBaseUrl(ctx) + "auth?code=4";
|
||||||
|
String profileUrl = getCookieUrl(ctx);
|
||||||
|
List<String> urls = new ArrayList<>();
|
||||||
|
urls.add(googleOAuthFinishUrl);
|
||||||
|
urls.add(profileUrl);
|
||||||
|
return urls;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -76,6 +83,7 @@ public class OPRWebviewActivity extends OsmandActionBarActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
webView = findViewById(R.id.printDialogWebview);
|
webView = findViewById(R.id.printDialogWebview);
|
||||||
|
webView.getSettings().setUserAgentString(USER_AGENT);
|
||||||
webView.setWebViewClient(new CloseOnSuccessWebViewClient());
|
webView.setWebViewClient(new CloseOnSuccessWebViewClient());
|
||||||
webView.getSettings().setJavaScriptEnabled(true);
|
webView.getSettings().setJavaScriptEnabled(true);
|
||||||
WebView.setWebContentsDebuggingEnabled(true);
|
WebView.setWebContentsDebuggingEnabled(true);
|
||||||
|
@ -124,8 +132,10 @@ public class OPRWebviewActivity extends OsmandActionBarActivity {
|
||||||
public class CloseOnSuccessWebViewClient extends WebViewClient {
|
public class CloseOnSuccessWebViewClient extends WebViewClient {
|
||||||
@Override
|
@Override
|
||||||
public void onPageFinished(WebView view, String url) {
|
public void onPageFinished(WebView view, String url) {
|
||||||
if (url.contains(getFinishUrl(OPRWebviewActivity.this)) && isLogin) {
|
for (String furl : getFinishUrls(OPRWebviewActivity.this)) {
|
||||||
finish();
|
if (url.contains(furl) && isLogin) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
super.onPageFinished(view, url);
|
super.onPageFinished(view, url);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.plus.BuildConfig;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||||
|
@ -74,7 +75,7 @@ public class OprStartFragment extends BaseOsmAndFragment {
|
||||||
private void setURLSpan(View v) {
|
private void setURLSpan(View v) {
|
||||||
String desc = requireContext().getString(R.string.register_on_openplacereviews_desc);
|
String desc = requireContext().getString(R.string.register_on_openplacereviews_desc);
|
||||||
SpannableString ss = new SpannableString(desc);
|
SpannableString ss = new SpannableString(desc);
|
||||||
ss.setSpan(new URLSpanNoUnderline("https://" + openPlaceReviewsUrl), desc.indexOf(openPlaceReviewsUrl),
|
ss.setSpan(new URLSpanNoUnderline(getActivity().getString(R.string.opr_base_url)), desc.indexOf(openPlaceReviewsUrl),
|
||||||
desc.indexOf(openPlaceReviewsUrl) + openPlaceReviewsUrl.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
|
desc.indexOf(openPlaceReviewsUrl) + openPlaceReviewsUrl.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
|
||||||
v.<TextView>findViewById(R.id.start_opr_description).setText(ss);
|
v.<TextView>findViewById(R.id.start_opr_description).setText(ss);
|
||||||
v.<TextView>findViewById(R.id.start_opr_description).setMovementMethod(LinkMovementMethod.getInstance());
|
v.<TextView>findViewById(R.id.start_opr_description).setMovementMethod(LinkMovementMethod.getInstance());
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class OpenDBAPI {
|
||||||
response.toString().contains(LOGIN_SUCCESS_MESSAGE);
|
response.toString().contains(LOGIN_SUCCESS_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int uploadImage(String[] placeId, String baseUrl, String privateKey, String username, String image) throws FailedVerificationException {
|
public int uploadImage(String[] placeId, String baseUrl, String privateKey, String username, String image, StringBuilder sb) throws FailedVerificationException {
|
||||||
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
Security.removeProvider("BC");
|
Security.removeProvider("BC");
|
||||||
Security.addProvider(new BouncyCastleProvider());
|
Security.addProvider(new BouncyCastleProvider());
|
||||||
|
@ -92,11 +92,9 @@ public class OpenDBAPI {
|
||||||
List<String> ids = new ArrayList<>(Arrays.asList(placeId));
|
List<String> ids = new ArrayList<>(Arrays.asList(placeId));
|
||||||
Map<String, Object> change = new TreeMap<>();
|
Map<String, Object> change = new TreeMap<>();
|
||||||
Map<String, Object> images = new TreeMap<>();
|
Map<String, Object> images = new TreeMap<>();
|
||||||
Map<String, Object> outdoor = new TreeMap<>();
|
images.put("append", imageMap);
|
||||||
outdoor.put("outdoor", imageResponseList);
|
|
||||||
images.put("append", outdoor);
|
|
||||||
change.put("version", "increment");
|
change.put("version", "increment");
|
||||||
change.put("images", images);
|
change.put("images.review", images);
|
||||||
edit.put("id", ids);
|
edit.put("id", ids);
|
||||||
edit.put("change", change);
|
edit.put("change", change);
|
||||||
edit.put("current", new Object());
|
edit.put("current", new Object());
|
||||||
|
@ -134,6 +132,7 @@ public class OpenDBAPI {
|
||||||
String strCurrentLine;
|
String strCurrentLine;
|
||||||
while ((strCurrentLine = br.readLine()) != null) {
|
while ((strCurrentLine = br.readLine()) != null) {
|
||||||
log.error(strCurrentLine);
|
log.error(strCurrentLine);
|
||||||
|
sb.append(strCurrentLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -149,4 +148,4 @@ public class OpenDBAPI {
|
||||||
public String cid;
|
public String cid;
|
||||||
public String extension;
|
public String extension;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@ public class FollowTrackFragment extends ContextMenuScrollFragment implements Ca
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
ImageButton closeButton = view.findViewById(R.id.close_button);
|
ImageButton closeButton = view.findViewById(R.id.close_button);
|
||||||
buttonsShadow = view.findViewById(R.id.buttons_shadow);
|
buttonsShadow = view.findViewById(R.id.buttons_shadow);
|
||||||
|
sortButton = view.findViewById(R.id.sort_button);
|
||||||
closeButton.setImageDrawable(getContentIcon(AndroidUtils.getNavigationIconResId(app)));
|
closeButton.setImageDrawable(getContentIcon(AndroidUtils.getNavigationIconResId(app)));
|
||||||
closeButton.setOnClickListener(new View.OnClickListener() {
|
closeButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -219,6 +220,7 @@ public class FollowTrackFragment extends ContextMenuScrollFragment implements Ca
|
||||||
if (Algorithms.isEmpty(fileName)) {
|
if (Algorithms.isEmpty(fileName)) {
|
||||||
fileName = app.getString(R.string.shared_string_gpx_track);
|
fileName = app.getString(R.string.shared_string_gpx_track);
|
||||||
}
|
}
|
||||||
|
sortButton.setVisibility(View.GONE);
|
||||||
GPXInfo gpxInfo = new GPXInfo(fileName, file != null ? file.lastModified() : 0, file != null ? file.length() : 0);
|
GPXInfo gpxInfo = new GPXInfo(fileName, file != null ? file.lastModified() : 0, file != null ? file.length() : 0);
|
||||||
TrackEditCard importTrackCard = new TrackEditCard(mapActivity, gpxInfo);
|
TrackEditCard importTrackCard = new TrackEditCard(mapActivity, gpxInfo);
|
||||||
importTrackCard.setListener(this);
|
importTrackCard.setListener(this);
|
||||||
|
@ -268,6 +270,7 @@ public class FollowTrackFragment extends ContextMenuScrollFragment implements Ca
|
||||||
tracksCard = new TracksToFollowCard(mapActivity, list, defaultCategory);
|
tracksCard = new TracksToFollowCard(mapActivity, list, defaultCategory);
|
||||||
tracksCard.setListener(FollowTrackFragment.this);
|
tracksCard.setListener(FollowTrackFragment.this);
|
||||||
getCardsContainer().addView(tracksCard.build(mapActivity));
|
getCardsContainer().addView(tracksCard.build(mapActivity));
|
||||||
|
sortButton.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@ public enum ExportSettingsType {
|
||||||
GLOBAL(R.string.general_settings_2, R.drawable.ic_action_settings),
|
GLOBAL(R.string.general_settings_2, R.drawable.ic_action_settings),
|
||||||
QUICK_ACTIONS(R.string.configure_screen_quick_action, R.drawable.ic_quick_action),
|
QUICK_ACTIONS(R.string.configure_screen_quick_action, R.drawable.ic_quick_action),
|
||||||
POI_TYPES(R.string.poi_dialog_poi_type, R.drawable.ic_action_info_dark),
|
POI_TYPES(R.string.poi_dialog_poi_type, R.drawable.ic_action_info_dark),
|
||||||
SEARCH_HISTORY(R.string.shared_string_search_history, R.drawable.ic_action_history),
|
|
||||||
AVOID_ROADS(R.string.avoid_road, R.drawable.ic_action_alert),
|
AVOID_ROADS(R.string.avoid_road, R.drawable.ic_action_alert),
|
||||||
FAVORITES(R.string.shared_string_favorites, R.drawable.ic_action_favorite),
|
FAVORITES(R.string.shared_string_favorites, R.drawable.ic_action_favorite),
|
||||||
TRACKS(R.string.shared_string_tracks, R.drawable.ic_action_route_distance),
|
TRACKS(R.string.shared_string_tracks, R.drawable.ic_action_route_distance),
|
||||||
|
@ -19,6 +18,7 @@ public enum ExportSettingsType {
|
||||||
MULTIMEDIA_NOTES(R.string.audionotes_plugin_name, R.drawable.ic_grouped_by_type),
|
MULTIMEDIA_NOTES(R.string.audionotes_plugin_name, R.drawable.ic_grouped_by_type),
|
||||||
ACTIVE_MARKERS(R.string.map_markers, R.drawable.ic_action_flag),
|
ACTIVE_MARKERS(R.string.map_markers, R.drawable.ic_action_flag),
|
||||||
HISTORY_MARKERS(R.string.markers_history, R.drawable.ic_action_flag),
|
HISTORY_MARKERS(R.string.markers_history, R.drawable.ic_action_flag),
|
||||||
|
SEARCH_HISTORY(R.string.shared_string_search_history, R.drawable.ic_action_history),
|
||||||
CUSTOM_RENDER_STYLE(R.string.shared_string_rendering_style, R.drawable.ic_action_map_style),
|
CUSTOM_RENDER_STYLE(R.string.shared_string_rendering_style, R.drawable.ic_action_map_style),
|
||||||
CUSTOM_ROUTING(R.string.shared_string_routing, R.drawable.ic_action_route_distance),
|
CUSTOM_ROUTING(R.string.shared_string_routing, R.drawable.ic_action_route_distance),
|
||||||
MAP_SOURCES(R.string.quick_action_map_source_title, R.drawable.ic_map),
|
MAP_SOURCES(R.string.quick_action_map_source_title, R.drawable.ic_map),
|
||||||
|
@ -48,12 +48,13 @@ public enum ExportSettingsType {
|
||||||
|
|
||||||
public boolean isSettingsCategory() {
|
public boolean isSettingsCategory() {
|
||||||
return this == PROFILE || this == GLOBAL || this == QUICK_ACTIONS || this == POI_TYPES
|
return this == PROFILE || this == GLOBAL || this == QUICK_ACTIONS || this == POI_TYPES
|
||||||
|| this == SEARCH_HISTORY || this == AVOID_ROADS;
|
|| this == AVOID_ROADS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMyPlacesCategory() {
|
public boolean isMyPlacesCategory() {
|
||||||
return this == FAVORITES || this == TRACKS || this == OSM_EDITS || this == OSM_NOTES
|
return this == FAVORITES || this == TRACKS || this == OSM_EDITS || this == OSM_NOTES
|
||||||
|| this == MULTIMEDIA_NOTES || this == ACTIVE_MARKERS || this == HISTORY_MARKERS;
|
|| this == MULTIMEDIA_NOTES || this == ACTIVE_MARKERS || this == HISTORY_MARKERS
|
||||||
|
|| this == SEARCH_HISTORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isResourcesCategory() {
|
public boolean isResourcesCategory() {
|
||||||
|
|
|
@ -287,20 +287,17 @@ public class OsmAndAppCustomization {
|
||||||
if (!connectedAppDir.exists()) {
|
if (!connectedAppDir.exists()) {
|
||||||
connectedAppDir.mkdirs();
|
connectedAppDir.mkdirs();
|
||||||
}
|
}
|
||||||
OutputStream fout = new FileOutputStream(new File(connectedAppDir, iconName));
|
OutputStream fout = null;
|
||||||
|
if (!Algorithms.isEmpty(iconName)) {
|
||||||
|
fout = new FileOutputStream(new File(connectedAppDir, iconName));
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Algorithms.streamCopy(is, fout);
|
if (fout != null) {
|
||||||
|
Algorithms.streamCopy(is, fout);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
Algorithms.closeStream(is);
|
||||||
is.close();
|
Algorithms.closeStream(fout);
|
||||||
} catch (IOException e) {
|
|
||||||
LOG.error(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
fout.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
LOG.error(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("", connectedAppDirPath + "/" + iconName);
|
json.put("", connectedAppDirPath + "/" + iconName);
|
||||||
|
@ -406,8 +403,7 @@ public class OsmAndAppCustomization {
|
||||||
return set.contains(appMode);
|
return set.contains(appMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setNavDrawerLogoWithParams(String imageUri, @Nullable String packageName,
|
public boolean setNavDrawerLogoWithParams(String imageUri, @Nullable String packageName, @Nullable String intent) {
|
||||||
@Nullable String intent) {
|
|
||||||
return setNavDrawerLogo(imageUri, packageName, intent);
|
return setNavDrawerLogo(imageUri, packageName, intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,13 +68,9 @@ public class AvoidRoadsSettingsItem extends CollectionSettingsItem<AvoidSpecific
|
||||||
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
|
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
|
||||||
appliedItems = new ArrayList<>(newItems);
|
appliedItems = new ArrayList<>(newItems);
|
||||||
for (AvoidSpecificRoads.AvoidRoadInfo duplicate : duplicateItems) {
|
for (AvoidSpecificRoads.AvoidRoadInfo duplicate : duplicateItems) {
|
||||||
if (shouldReplace) {
|
LatLon latLon = new LatLon(duplicate.latitude, duplicate.longitude);
|
||||||
LatLon latLon = new LatLon(duplicate.latitude, duplicate.longitude);
|
if (settings.removeImpassableRoad(latLon)) {
|
||||||
if (settings.removeImpassableRoad(latLon)) {
|
settings.addImpassableRoad(duplicate);
|
||||||
settings.addImpassableRoad(duplicate);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
settings.addImpassableRoad(renameItem(duplicate));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (AvoidSpecificRoads.AvoidRoadInfo avoidRoad : appliedItems) {
|
for (AvoidSpecificRoads.AvoidRoadInfo avoidRoad : appliedItems) {
|
||||||
|
@ -87,7 +83,12 @@ public class AvoidRoadsSettingsItem extends CollectionSettingsItem<AvoidSpecific
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDuplicate(@NonNull AvoidSpecificRoads.AvoidRoadInfo item) {
|
public boolean isDuplicate(@NonNull AvoidSpecificRoads.AvoidRoadInfo item) {
|
||||||
return existingItems.contains(item);
|
for (AvoidSpecificRoads.AvoidRoadInfo roadInfo : existingItems) {
|
||||||
|
if (roadInfo.id == item.id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -95,22 +96,15 @@ public class AvoidRoadsSettingsItem extends CollectionSettingsItem<AvoidSpecific
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldShowDuplicates() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public AvoidSpecificRoads.AvoidRoadInfo renameItem(@NonNull AvoidSpecificRoads.AvoidRoadInfo item) {
|
public AvoidSpecificRoads.AvoidRoadInfo renameItem(@NonNull AvoidSpecificRoads.AvoidRoadInfo item) {
|
||||||
int number = 0;
|
return item;
|
||||||
while (true) {
|
|
||||||
number++;
|
|
||||||
AvoidSpecificRoads.AvoidRoadInfo renamedItem = new AvoidSpecificRoads.AvoidRoadInfo();
|
|
||||||
renamedItem.name = item.name + "_" + number;
|
|
||||||
if (!isDuplicate(renamedItem)) {
|
|
||||||
renamedItem.id = item.id;
|
|
||||||
renamedItem.latitude = item.latitude;
|
|
||||||
renamedItem.longitude = item.longitude;
|
|
||||||
renamedItem.appModeKey = item.appModeKey;
|
|
||||||
return renamedItem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -126,8 +120,9 @@ public class AvoidRoadsSettingsItem extends CollectionSettingsItem<AvoidSpecific
|
||||||
double longitude = object.optDouble("longitude");
|
double longitude = object.optDouble("longitude");
|
||||||
String name = object.optString("name");
|
String name = object.optString("name");
|
||||||
String appModeKey = object.optString("appModeKey");
|
String appModeKey = object.optString("appModeKey");
|
||||||
|
long id = object.optLong("roadId");
|
||||||
AvoidSpecificRoads.AvoidRoadInfo roadInfo = new AvoidSpecificRoads.AvoidRoadInfo();
|
AvoidSpecificRoads.AvoidRoadInfo roadInfo = new AvoidSpecificRoads.AvoidRoadInfo();
|
||||||
roadInfo.id = 0;
|
roadInfo.id = id;
|
||||||
roadInfo.latitude = latitude;
|
roadInfo.latitude = latitude;
|
||||||
roadInfo.longitude = longitude;
|
roadInfo.longitude = longitude;
|
||||||
roadInfo.name = name;
|
roadInfo.name = name;
|
||||||
|
@ -155,6 +150,7 @@ public class AvoidRoadsSettingsItem extends CollectionSettingsItem<AvoidSpecific
|
||||||
jsonObject.put("longitude", avoidRoad.longitude);
|
jsonObject.put("longitude", avoidRoad.longitude);
|
||||||
jsonObject.put("name", avoidRoad.name);
|
jsonObject.put("name", avoidRoad.name);
|
||||||
jsonObject.put("appModeKey", avoidRoad.appModeKey);
|
jsonObject.put("appModeKey", avoidRoad.appModeKey);
|
||||||
|
jsonObject.put("roadId", avoidRoad.id);
|
||||||
jsonArray.put(jsonObject);
|
jsonArray.put(jsonObject);
|
||||||
}
|
}
|
||||||
json.put("items", jsonArray);
|
json.put("items", jsonArray);
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
public class FileSettingsItem extends StreamSettingsItem {
|
public class FileSettingsItem extends StreamSettingsItem {
|
||||||
|
@ -131,6 +132,7 @@ public class FileSettingsItem extends StreamSettingsItem {
|
||||||
private final File appPath;
|
private final File appPath;
|
||||||
protected FileSubtype subtype;
|
protected FileSubtype subtype;
|
||||||
private long size;
|
private long size;
|
||||||
|
private long lastModified;
|
||||||
|
|
||||||
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) throws IllegalArgumentException {
|
public FileSettingsItem(@NonNull OsmandApplication app, @NonNull File file) throws IllegalArgumentException {
|
||||||
super(app, file.getPath().replace(app.getAppPath(null).getPath(), ""));
|
super(app, file.getPath().replace(app.getAppPath(null).getPath(), ""));
|
||||||
|
@ -222,6 +224,14 @@ public class FileSettingsItem extends StreamSettingsItem {
|
||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getLastModified() {
|
||||||
|
return lastModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastModified(long lastModified) {
|
||||||
|
this.lastModified = lastModified;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public File getFile() {
|
public File getFile() {
|
||||||
return file;
|
return file;
|
||||||
|
@ -292,6 +302,9 @@ public class FileSettingsItem extends StreamSettingsItem {
|
||||||
} finally {
|
} finally {
|
||||||
Algorithms.closeStream(output);
|
Algorithms.closeStream(output);
|
||||||
}
|
}
|
||||||
|
if (lastModified != -1) {
|
||||||
|
dest.setLastModified(lastModified);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -306,7 +319,14 @@ public class FileSettingsItem extends StreamSettingsItem {
|
||||||
warnings.add(app.getString(R.string.settings_item_read_error, file.getName()));
|
warnings.add(app.getString(R.string.settings_item_read_error, file.getName()));
|
||||||
SettingsHelper.LOG.error("Failed to set input stream from file: " + file.getName(), e);
|
SettingsHelper.LOG.error("Failed to set input stream from file: " + file.getName(), e);
|
||||||
}
|
}
|
||||||
return super.getWriter();
|
return new StreamSettingsItemWriter(this) {
|
||||||
|
@Override
|
||||||
|
public ZipEntry createNewEntry(String fileName) {
|
||||||
|
ZipEntry entry = super.createNewEntry(fileName);
|
||||||
|
entry.setTime(file.lastModified());
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
return new StreamSettingsItemWriter(this) {
|
return new StreamSettingsItemWriter(this) {
|
||||||
|
|
||||||
|
|
|
@ -481,24 +481,19 @@ public class SettingsHelper {
|
||||||
return getFilteredSettingsItems(typesMap, settingsTypes);
|
return getFilteredSettingsItems(typesMap, settingsTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SettingsItem> getFilteredSettingsItems(Map<ExportSettingsType, List<?>> additionalData,
|
public List<SettingsItem> getFilteredSettingsItems(Map<ExportSettingsType, List<?>> allSettingsMap,
|
||||||
List<ExportSettingsType> settingsTypes) {
|
List<ExportSettingsType> settingsTypes) {
|
||||||
List<SettingsItem> settingsItems = new ArrayList<>();
|
List<SettingsItem> settingsItems = new ArrayList<>();
|
||||||
for (ExportSettingsType settingsType : settingsTypes) {
|
for (ExportSettingsType settingsType : settingsTypes) {
|
||||||
List<?> settingsDataObjects = additionalData.get(settingsType);
|
List<?> settingsDataObjects = allSettingsMap.get(settingsType);
|
||||||
if (settingsDataObjects != null) {
|
if (settingsDataObjects != null) {
|
||||||
for (Object object : settingsDataObjects) {
|
settingsItems.addAll(prepareSettingsItems(new ArrayList<>(settingsDataObjects)));
|
||||||
if (object instanceof ApplicationModeBean) {
|
|
||||||
settingsItems.add(new ProfileSettingsItem(app, null, (ApplicationModeBean) object));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
settingsItems.addAll(prepareAdditionalSettingsItems(new ArrayList<>(settingsDataObjects)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return settingsItems;
|
return settingsItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<ExportSettingsCategory, SettingsCategoryItems> getAdditionalData(boolean globalExport) {
|
public Map<ExportSettingsCategory, SettingsCategoryItems> getSettingsByCategory(boolean globalExport) {
|
||||||
Map<ExportSettingsCategory, SettingsCategoryItems> dataList = new LinkedHashMap<>();
|
Map<ExportSettingsCategory, SettingsCategoryItems> dataList = new LinkedHashMap<>();
|
||||||
|
|
||||||
Map<ExportSettingsType, List<?>> settingsItems = getSettingsItems(globalExport);
|
Map<ExportSettingsType, List<?>> settingsItems = getSettingsItems(globalExport);
|
||||||
|
@ -539,10 +534,6 @@ public class SettingsHelper {
|
||||||
if (!poiList.isEmpty()) {
|
if (!poiList.isEmpty()) {
|
||||||
settingsItems.put(ExportSettingsType.POI_TYPES, poiList);
|
settingsItems.put(ExportSettingsType.POI_TYPES, poiList);
|
||||||
}
|
}
|
||||||
List<HistoryEntry> historyEntries = SearchHistoryHelper.getInstance(app).getHistoryEntries(false);
|
|
||||||
if (!historyEntries.isEmpty()) {
|
|
||||||
settingsItems.put(ExportSettingsType.SEARCH_HISTORY, historyEntries);
|
|
||||||
}
|
|
||||||
Map<LatLon, AvoidRoadInfo> impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads();
|
Map<LatLon, AvoidRoadInfo> impassableRoads = app.getAvoidSpecificRoads().getImpassableRoads();
|
||||||
if (!impassableRoads.isEmpty()) {
|
if (!impassableRoads.isEmpty()) {
|
||||||
settingsItems.put(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()));
|
settingsItems.put(ExportSettingsType.AVOID_ROADS, new ArrayList<>(impassableRoads.values()));
|
||||||
|
@ -611,6 +602,10 @@ public class SettingsHelper {
|
||||||
markersGroup.setMarkers(markersHistory);
|
markersGroup.setMarkers(markersHistory);
|
||||||
myPlacesItems.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup));
|
myPlacesItems.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup));
|
||||||
}
|
}
|
||||||
|
List<HistoryEntry> historyEntries = SearchHistoryHelper.getInstance(app).getHistoryEntries(false);
|
||||||
|
if (!historyEntries.isEmpty()) {
|
||||||
|
myPlacesItems.put(ExportSettingsType.SEARCH_HISTORY, historyEntries);
|
||||||
|
}
|
||||||
return myPlacesItems;
|
return myPlacesItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -692,7 +687,7 @@ public class SettingsHelper {
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SettingsItem> prepareAdditionalSettingsItems(List<? super Object> data) {
|
public List<SettingsItem> prepareSettingsItems(List<? super Object> data) {
|
||||||
List<SettingsItem> settingsItems = new ArrayList<>();
|
List<SettingsItem> settingsItems = new ArrayList<>();
|
||||||
List<QuickAction> quickActions = new ArrayList<>();
|
List<QuickAction> quickActions = new ArrayList<>();
|
||||||
List<PoiUIFilter> poiUIFilters = new ArrayList<>();
|
List<PoiUIFilter> poiUIFilters = new ArrayList<>();
|
||||||
|
@ -754,10 +749,7 @@ public class SettingsHelper {
|
||||||
}
|
}
|
||||||
if (!appModeBeans.isEmpty()) {
|
if (!appModeBeans.isEmpty()) {
|
||||||
for (ApplicationModeBean modeBean : appModeBeans) {
|
for (ApplicationModeBean modeBean : appModeBeans) {
|
||||||
ApplicationMode mode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null);
|
settingsItems.add(new ProfileSettingsItem(app, null, modeBean));
|
||||||
if (mode != null) {
|
|
||||||
settingsItems.add(new ProfileSettingsItem(app, mode));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!osmNotesPointList.isEmpty()) {
|
if (!osmNotesPointList.isEmpty()) {
|
||||||
|
@ -829,10 +821,10 @@ public class SettingsHelper {
|
||||||
List<File> routingFilesList = new ArrayList<>();
|
List<File> routingFilesList = new ArrayList<>();
|
||||||
List<File> renderFilesList = new ArrayList<>();
|
List<File> renderFilesList = new ArrayList<>();
|
||||||
List<File> multimediaFilesList = new ArrayList<>();
|
List<File> multimediaFilesList = new ArrayList<>();
|
||||||
List<File> tracksFilesList = new ArrayList<>();
|
|
||||||
List<File> ttsVoiceFilesList = new ArrayList<>();
|
List<File> ttsVoiceFilesList = new ArrayList<>();
|
||||||
List<File> voiceFilesList = new ArrayList<>();
|
List<File> voiceFilesList = new ArrayList<>();
|
||||||
List<FileSettingsItem> mapFilesList = new ArrayList<>();
|
List<FileSettingsItem> mapFilesList = new ArrayList<>();
|
||||||
|
List<FileSettingsItem> tracksFilesList = new ArrayList<>();
|
||||||
List<AvoidRoadInfo> avoidRoads = new ArrayList<>();
|
List<AvoidRoadInfo> avoidRoads = new ArrayList<>();
|
||||||
List<GlobalSettingsItem> globalSettingsItems = new ArrayList<>();
|
List<GlobalSettingsItem> globalSettingsItems = new ArrayList<>();
|
||||||
List<OsmNotesPoint> notesPointList = new ArrayList<>();
|
List<OsmNotesPoint> notesPointList = new ArrayList<>();
|
||||||
|
@ -856,7 +848,7 @@ public class SettingsHelper {
|
||||||
} else if (fileItem.getSubtype() == FileSubtype.MULTIMEDIA_NOTES) {
|
} else if (fileItem.getSubtype() == FileSubtype.MULTIMEDIA_NOTES) {
|
||||||
multimediaFilesList.add(fileItem.getFile());
|
multimediaFilesList.add(fileItem.getFile());
|
||||||
} else if (fileItem.getSubtype() == FileSubtype.GPX) {
|
} else if (fileItem.getSubtype() == FileSubtype.GPX) {
|
||||||
tracksFilesList.add(fileItem.getFile());
|
tracksFilesList.add(fileItem);
|
||||||
} else if (fileItem.getSubtype().isMap()) {
|
} else if (fileItem.getSubtype().isMap()) {
|
||||||
mapFilesList.add(fileItem);
|
mapFilesList.add(fileItem);
|
||||||
} else if (fileItem.getSubtype() == FileSubtype.TTS_VOICE) {
|
} else if (fileItem.getSubtype() == FileSubtype.TTS_VOICE) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ class SettingsImporter {
|
||||||
try {
|
try {
|
||||||
SettingsItemsFactory itemsFactory = new SettingsItemsFactory(app, itemsJson);
|
SettingsItemsFactory itemsFactory = new SettingsItemsFactory(app, itemsJson);
|
||||||
List<SettingsItem> settingsItemList = itemsFactory.getItems();
|
List<SettingsItem> settingsItemList = itemsFactory.getItems();
|
||||||
getFilesSize(file, settingsItemList);
|
updateFilesInfo(file, settingsItemList);
|
||||||
items.addAll(settingsItemList);
|
items.addAll(settingsItemList);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
SettingsHelper.LOG.error("Error parsing items: " + itemsJson, e);
|
SettingsHelper.LOG.error("Error parsing items: " + itemsJson, e);
|
||||||
|
@ -81,7 +81,7 @@ class SettingsImporter {
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getFilesSize(@NonNull File file, List<SettingsItem> settingsItemList) throws IOException {
|
private void updateFilesInfo(@NonNull File file, List<SettingsItem> settingsItemList) throws IOException {
|
||||||
ZipFile zipfile = new ZipFile(file.getPath());
|
ZipFile zipfile = new ZipFile(file.getPath());
|
||||||
Enumeration<? extends ZipEntry> zipEnum = zipfile.entries();
|
Enumeration<? extends ZipEntry> zipEnum = zipfile.entries();
|
||||||
while (zipEnum.hasMoreElements()) {
|
while (zipEnum.hasMoreElements()) {
|
||||||
|
@ -90,7 +90,9 @@ class SettingsImporter {
|
||||||
for (SettingsItem settingsItem : settingsItemList) {
|
for (SettingsItem settingsItem : settingsItemList) {
|
||||||
if (settingsItem instanceof FileSettingsItem
|
if (settingsItem instanceof FileSettingsItem
|
||||||
&& zipEntry.getName().equals(settingsItem.getFileName())) {
|
&& zipEntry.getName().equals(settingsItem.getFileName())) {
|
||||||
((FileSettingsItem) settingsItem).setSize(size);
|
FileSettingsItem fileSettingsItem = (FileSettingsItem) settingsItem;
|
||||||
|
fileSettingsItem.setSize(size);
|
||||||
|
fileSettingsItem.setLastModified(zipEntry.getTime());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,13 @@ public abstract class SettingsItemWriter<T extends SettingsItem> {
|
||||||
public abstract boolean writeToStream(@NonNull OutputStream outputStream) throws IOException;
|
public abstract boolean writeToStream(@NonNull OutputStream outputStream) throws IOException;
|
||||||
|
|
||||||
public void writeEntry(String fileName, @NonNull ZipOutputStream zos) throws IOException {
|
public void writeEntry(String fileName, @NonNull ZipOutputStream zos) throws IOException {
|
||||||
ZipEntry entry = new ZipEntry(fileName);
|
ZipEntry entry = createNewEntry(fileName);
|
||||||
zos.putNextEntry(entry);
|
zos.putNextEntry(entry);
|
||||||
writeToStream(zos);
|
writeToStream(zos);
|
||||||
zos.closeEntry();
|
zos.closeEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ZipEntry createNewEntry(String fileName) {
|
||||||
|
return new ZipEntry(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,14 @@ package net.osmand.plus.settings.fragments;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
import android.widget.ExpandableListView;
|
import android.widget.ExpandableListView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.activity.OnBackPressedCallback;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
@ -31,6 +30,7 @@ import net.osmand.plus.settings.backend.ExportSettingsCategory;
|
||||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener;
|
import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -60,6 +60,7 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
protected ExpandableListView expandableList;
|
protected ExpandableListView expandableList;
|
||||||
protected ExportSettingsAdapter adapter;
|
protected ExportSettingsAdapter adapter;
|
||||||
|
|
||||||
|
protected boolean exportMode;
|
||||||
protected boolean nightMode;
|
protected boolean nightMode;
|
||||||
private boolean wasDrawerDisabled;
|
private boolean wasDrawerDisabled;
|
||||||
|
|
||||||
|
@ -73,6 +74,17 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
app = requireMyApplication();
|
app = requireMyApplication();
|
||||||
nightMode = !app.getSettings().isLightContent();
|
nightMode = !app.getSettings().isLightContent();
|
||||||
|
|
||||||
|
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||||
|
@Override
|
||||||
|
public void handleOnBackPressed() {
|
||||||
|
if (hasSelectedData()) {
|
||||||
|
showExitDialog();
|
||||||
|
} else {
|
||||||
|
dismissFragment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -101,26 +113,15 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
|
|
||||||
continueBtn = root.findViewById(R.id.continue_button);
|
continueBtn = root.findViewById(R.id.continue_button);
|
||||||
UiUtilities.setupDialogButton(nightMode, continueBtn, DialogButtonType.PRIMARY, getString(R.string.shared_string_continue));
|
UiUtilities.setupDialogButton(nightMode, continueBtn, DialogButtonType.PRIMARY, getString(R.string.shared_string_continue));
|
||||||
continueBtn.setOnClickListener(new View.OnClickListener() {
|
root.findViewById(R.id.continue_button_container).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
onContinueButtonClickAction();
|
if (expandableList.getHeaderViewsCount() <= 1) {
|
||||||
}
|
if (hasSelectedData()) {
|
||||||
});
|
onContinueButtonClickAction();
|
||||||
|
|
||||||
ViewTreeObserver treeObserver = buttonsContainer.getViewTreeObserver();
|
|
||||||
treeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
|
||||||
@Override
|
|
||||||
public void onGlobalLayout() {
|
|
||||||
if (buttonsContainer != null) {
|
|
||||||
ViewTreeObserver vts = buttonsContainer.getViewTreeObserver();
|
|
||||||
int height = buttonsContainer.getMeasuredHeight();
|
|
||||||
expandableList.setPadding(0, 0, 0, height);
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
|
||||||
vts.removeOnGlobalLayoutListener(this);
|
|
||||||
} else {
|
|
||||||
vts.removeGlobalOnLayoutListener(this);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
expandableList.smoothScrollToPosition(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -185,7 +186,11 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
showExitDialog();
|
if (hasSelectedData()) {
|
||||||
|
showExitDialog();
|
||||||
|
} else {
|
||||||
|
dismissFragment();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -204,16 +209,25 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
continueBtn.setEnabled(false);
|
continueBtn.setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
updateWarningHeaderVisibility(false);
|
updateWarningHeaderVisibility(false);
|
||||||
continueBtn.setEnabled(adapter.hasSelectedData());
|
continueBtn.setEnabled(hasSelectedData());
|
||||||
}
|
}
|
||||||
itemsSizeContainer.setVisibility(View.VISIBLE);
|
itemsSizeContainer.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
updateWarningHeaderVisibility(false);
|
updateWarningHeaderVisibility(false);
|
||||||
itemsSizeContainer.setVisibility(View.INVISIBLE);
|
itemsSizeContainer.setVisibility(View.INVISIBLE);
|
||||||
continueBtn.setEnabled(adapter.hasSelectedData());
|
continueBtn.setEnabled(hasSelectedData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasSelectedData() {
|
||||||
|
for (List<?> items : selectedItemsMap.values()) {
|
||||||
|
if (!Algorithms.isEmpty(items)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void updateWarningHeaderVisibility(boolean visible) {
|
private void updateWarningHeaderVisibility(boolean visible) {
|
||||||
if (visible) {
|
if (visible) {
|
||||||
if (expandableList.getHeaderViewsCount() < 2) {
|
if (expandableList.getHeaderViewsCount() < 2) {
|
||||||
|
@ -255,13 +269,24 @@ public abstract class BaseSettingsListFragment extends BaseOsmAndFragment implem
|
||||||
updateAvailableSpace();
|
updateAvailableSpace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected List<Object> getItemsForType(ExportSettingsType type) {
|
||||||
|
for (SettingsCategoryItems categoryItems : dataList.values()) {
|
||||||
|
if (categoryItems.getTypes().contains(type)) {
|
||||||
|
return (List<Object>) categoryItems.getItemsForType(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<Object> getSelectedItemsForType(ExportSettingsType type) {
|
||||||
|
return (List<Object>) selectedItemsMap.get(type);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTypeClicked(ExportSettingsCategory category, ExportSettingsType type) {
|
public void onTypeClicked(ExportSettingsType type) {
|
||||||
FragmentManager fragmentManager = getFragmentManager();
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
if (fragmentManager != null && type != ExportSettingsType.GLOBAL && type != ExportSettingsType.SEARCH_HISTORY) {
|
if (fragmentManager != null && type != ExportSettingsType.GLOBAL && type != ExportSettingsType.SEARCH_HISTORY) {
|
||||||
List<Object> items = (List<Object>) dataList.get(category).getItemsForType(type);
|
ExportItemsBottomSheet.showInstance(fragmentManager, type, this, exportMode);
|
||||||
List<Object> selectedItems = (List<Object>) selectedItemsMap.get(type);
|
|
||||||
ExportItemsBottomSheet.showInstance(type, selectedItems, items, fragmentManager, this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -14,11 +14,15 @@ import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.map.ITileSource;
|
import net.osmand.map.ITileSource;
|
||||||
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
||||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||||
|
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||||
|
import net.osmand.plus.GpxDbHelper.GpxDataItemCallback;
|
||||||
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.SQLiteTileSource;
|
import net.osmand.plus.SQLiteTileSource;
|
||||||
|
@ -28,6 +32,7 @@ import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton.Builder;
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton.Builder;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.SimpleDividerItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.SimpleDividerItem;
|
||||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||||
|
@ -47,6 +52,7 @@ import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
||||||
|
import net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
|
||||||
import net.osmand.plus.settings.backend.backup.GlobalSettingsItem;
|
import net.osmand.plus.settings.backend.backup.GlobalSettingsItem;
|
||||||
import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener;
|
import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedListener;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -67,18 +73,43 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
public static final String TAG = ExportItemsBottomSheet.class.getSimpleName();
|
public static final String TAG = ExportItemsBottomSheet.class.getSimpleName();
|
||||||
private static final Log LOG = PlatformUtil.getLog(ExportItemsBottomSheet.class);
|
private static final Log LOG = PlatformUtil.getLog(ExportItemsBottomSheet.class);
|
||||||
|
|
||||||
|
private static final String SETTINGS_TYPE_KEY = "settings_type_key";
|
||||||
|
private static final String EXPORT_MODE_KEY = "export_mode_key";
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
private UiUtilities uiUtilities;
|
private UiUtilities uiUtilities;
|
||||||
|
|
||||||
private ExportSettingsType type;
|
private ExportSettingsType type;
|
||||||
private List<Object> allItems;
|
private final List<Object> allItems = new ArrayList<>();
|
||||||
private List<Object> selectedItems = new ArrayList<>();
|
private final List<Object> selectedItems = new ArrayList<>();
|
||||||
|
|
||||||
private TextView selectedSize;
|
private TextView selectedSize;
|
||||||
private ThreeStateCheckbox checkBox;
|
private ThreeStateCheckbox checkBox;
|
||||||
|
|
||||||
private int activeColorRes;
|
private int activeColorRes;
|
||||||
private int secondaryColorRes;
|
private int secondaryColorRes;
|
||||||
|
private boolean exportMode;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
exportMode = savedInstanceState.getBoolean(EXPORT_MODE_KEY);
|
||||||
|
type = ExportSettingsType.valueOf(savedInstanceState.getString(SETTINGS_TYPE_KEY));
|
||||||
|
}
|
||||||
|
Fragment target = getTargetFragment();
|
||||||
|
if (target instanceof BaseSettingsListFragment) {
|
||||||
|
BaseSettingsListFragment fragment = (BaseSettingsListFragment) target;
|
||||||
|
List<Object> items = fragment.getItemsForType(type);
|
||||||
|
if (items != null) {
|
||||||
|
allItems.addAll(items);
|
||||||
|
}
|
||||||
|
List<Object> selectedItemsForType = fragment.getSelectedItemsForType(type);
|
||||||
|
if (selectedItemsForType != null) {
|
||||||
|
selectedItems.addAll(selectedItemsForType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMenuItems(Bundle savedInstanceState) {
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
|
@ -111,11 +142,18 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
})
|
})
|
||||||
.setTag(object);
|
.setTag(object);
|
||||||
setupBottomSheetItem(builder, object);
|
setupBottomSheetItem(builder, object);
|
||||||
item[0] = (BottomSheetItemWithCompoundButton) builder.create();
|
item[0] = builder.create();
|
||||||
items.add(item[0]);
|
items.add(item[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(EXPORT_MODE_KEY, exportMode);
|
||||||
|
outState.putString(SETTINGS_TYPE_KEY, type.name());
|
||||||
|
}
|
||||||
|
|
||||||
private BaseBottomSheetItem createTitleItem() {
|
private BaseBottomSheetItem createTitleItem() {
|
||||||
LayoutInflater themedInflater = UiUtilities.getInflater(requireContext(), nightMode);
|
LayoutInflater themedInflater = UiUtilities.getInflater(requireContext(), nightMode);
|
||||||
View view = themedInflater.inflate(R.layout.settings_group_title, null);
|
View view = themedInflater.inflate(R.layout.settings_group_title, null);
|
||||||
|
@ -153,7 +191,30 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes;
|
int checkBoxColor = checkBox.getState() == UNCHECKED ? secondaryColorRes : activeColorRes;
|
||||||
CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor)));
|
CompoundButtonCompat.setButtonTintList(checkBox, ColorStateList.valueOf(ContextCompat.getColor(app, checkBoxColor)));
|
||||||
|
|
||||||
selectedSize.setText(getString(R.string.ltr_or_rtl_combine_via_slash, selectedItems.size(), allItems.size()));
|
String description;
|
||||||
|
if (type == ExportSettingsType.OFFLINE_MAPS && !selectedItems.isEmpty()) {
|
||||||
|
String size = AndroidUtils.formatSize(app, calculateSelectedItemsSize());
|
||||||
|
String selected = getString(R.string.ltr_or_rtl_combine_via_slash, selectedItems.size(), allItems.size());
|
||||||
|
description = getString(R.string.ltr_or_rtl_combine_via_comma, selected, size);
|
||||||
|
} else {
|
||||||
|
description = getString(R.string.ltr_or_rtl_combine_via_slash, selectedItems.size(), allItems.size());
|
||||||
|
}
|
||||||
|
selectedSize.setText(description);
|
||||||
|
}
|
||||||
|
|
||||||
|
private long calculateSelectedItemsSize() {
|
||||||
|
long itemsSize = 0;
|
||||||
|
for (int i = 0; i < allItems.size(); i++) {
|
||||||
|
Object object = allItems.get(i);
|
||||||
|
if (selectedItems.contains(object)) {
|
||||||
|
if (object instanceof FileSettingsItem) {
|
||||||
|
itemsSize += ((FileSettingsItem) object).getSize();
|
||||||
|
} else if (object instanceof File) {
|
||||||
|
itemsSize += ((File) object).length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return itemsSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateItems(boolean checked) {
|
private void updateItems(boolean checked) {
|
||||||
|
@ -184,15 +245,13 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showInstance(@NonNull ExportSettingsType type, List<Object> selectedItems, List<?> allItems, @NonNull FragmentManager fm, @Nullable Fragment target) {
|
public static void showInstance(@NonNull FragmentManager fm, @NonNull ExportSettingsType type,
|
||||||
|
@NonNull BaseSettingsListFragment target, boolean exportMode) {
|
||||||
try {
|
try {
|
||||||
if (!fm.isStateSaved() && fm.findFragmentByTag(TAG) == null) {
|
if (!fm.isStateSaved() && fm.findFragmentByTag(TAG) == null) {
|
||||||
ExportItemsBottomSheet fragment = new ExportItemsBottomSheet();
|
ExportItemsBottomSheet fragment = new ExportItemsBottomSheet();
|
||||||
fragment.type = type;
|
fragment.type = type;
|
||||||
fragment.allItems = (List<Object>) allItems;
|
fragment.exportMode = exportMode;
|
||||||
if (selectedItems != null) {
|
|
||||||
fragment.selectedItems.addAll(selectedItems);
|
|
||||||
}
|
|
||||||
fragment.setTargetFragment(target, 0);
|
fragment.setTargetFragment(target, 0);
|
||||||
fragment.show(fm, TAG);
|
fragment.show(fm, TAG);
|
||||||
}
|
}
|
||||||
|
@ -211,13 +270,13 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupBottomSheetItem(BottomSheetItemWithCompoundButton.Builder builder, Object object) {
|
private void setupBottomSheetItem(Builder builder, Object object) {
|
||||||
if (object instanceof ApplicationModeBean) {
|
if (object instanceof ApplicationModeBean) {
|
||||||
ApplicationModeBean modeBean = (ApplicationModeBean) object;
|
ApplicationModeBean modeBean = (ApplicationModeBean) object;
|
||||||
String profileName = modeBean.userProfileName;
|
String profileName = modeBean.userProfileName;
|
||||||
if (Algorithms.isEmpty(profileName)) {
|
if (Algorithms.isEmpty(profileName)) {
|
||||||
ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null);
|
ApplicationMode appMode = ApplicationMode.valueOfStringKey(modeBean.stringKey, null);
|
||||||
profileName = getString(appMode.getNameKeyResource());
|
profileName = appMode.toHumanString();
|
||||||
}
|
}
|
||||||
builder.setTitle(profileName);
|
builder.setTitle(profileName);
|
||||||
|
|
||||||
|
@ -254,10 +313,11 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
builder.setTitle(tileSource.getName());
|
builder.setTitle(tileSource.getName());
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_map, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_map, activeColorRes));
|
||||||
} else if (object instanceof File) {
|
} else if (object instanceof File) {
|
||||||
setupBottomSheetItemForFile(builder, (File) object);
|
File file = (File) object;
|
||||||
|
setupBottomSheetItemForFile(builder, file, file.lastModified(), file.length());
|
||||||
} else if (object instanceof FileSettingsItem) {
|
} else if (object instanceof FileSettingsItem) {
|
||||||
FileSettingsItem fileSettingsItem = (FileSettingsItem) object;
|
FileSettingsItem item = (FileSettingsItem) object;
|
||||||
setupBottomSheetItemForFile(builder, fileSettingsItem.getFile());
|
setupBottomSheetItemForFile(builder, item.getFile(), item.getLastModified(), item.getSize());
|
||||||
} else if (object instanceof AvoidRoadInfo) {
|
} else if (object instanceof AvoidRoadInfo) {
|
||||||
AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) object;
|
AvoidRoadInfo avoidRoadInfo = (AvoidRoadInfo) object;
|
||||||
builder.setTitle(avoidRoadInfo.name);
|
builder.setTitle(avoidRoadInfo.name);
|
||||||
|
@ -275,6 +335,9 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
builder.setTitle(group.getDisplayName(app));
|
builder.setTitle(group.getDisplayName(app));
|
||||||
int color = group.getColor() == 0 ? ContextCompat.getColor(app, R.color.color_favorite) : group.getColor();
|
int color = group.getColor() == 0 ? ContextCompat.getColor(app, R.color.color_favorite) : group.getColor();
|
||||||
builder.setIcon(uiUtilities.getPaintedIcon(R.drawable.ic_action_folder, color));
|
builder.setIcon(uiUtilities.getPaintedIcon(R.drawable.ic_action_folder, color));
|
||||||
|
int points = group.getPoints().size();
|
||||||
|
String itemsDescr = getString(R.string.shared_string_gpx_points);
|
||||||
|
builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_colon, itemsDescr, points));
|
||||||
} else if (object instanceof GlobalSettingsItem) {
|
} else if (object instanceof GlobalSettingsItem) {
|
||||||
GlobalSettingsItem globalSettingsItem = (GlobalSettingsItem) object;
|
GlobalSettingsItem globalSettingsItem = (GlobalSettingsItem) object;
|
||||||
builder.setTitle(globalSettingsItem.getPublicName(app));
|
builder.setTitle(globalSettingsItem.getPublicName(app));
|
||||||
|
@ -285,9 +348,12 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
builder.setTitle(getString(R.string.map_markers));
|
builder.setTitle(getString(R.string.map_markers));
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_flag, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||||
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
|
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
|
||||||
builder.setTitle(getString(R.string.map_markers));
|
builder.setTitle(getString(R.string.markers_history));
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_history, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_history, activeColorRes));
|
||||||
}
|
}
|
||||||
|
int selectedMarkers = markersGroup.getMarkers().size();
|
||||||
|
String itemsDescr = getString(R.string.shared_string_items);
|
||||||
|
builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_colon, itemsDescr, selectedMarkers));
|
||||||
} else if (object instanceof HistoryEntry) {
|
} else if (object instanceof HistoryEntry) {
|
||||||
HistoryEntry historyEntry = (HistoryEntry) object;
|
HistoryEntry historyEntry = (HistoryEntry) object;
|
||||||
builder.setTitle(historyEntry.getName().getName());
|
builder.setTitle(historyEntry.getName().getName());
|
||||||
|
@ -295,8 +361,8 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupBottomSheetItemForFile(Builder builder, File file) {
|
private void setupBottomSheetItemForFile(Builder builder, File file, long lastModified, long size) {
|
||||||
FileSettingsItem.FileSubtype fileSubtype = FileSettingsItem.FileSubtype.getSubtypeByPath(app, file.getPath());
|
FileSubtype fileSubtype = FileSubtype.getSubtypeByPath(app, file.getPath());
|
||||||
builder.setTitle(file.getName());
|
builder.setTitle(file.getName());
|
||||||
if (file.getAbsolutePath().contains(IndexConstants.RENDERERS_DIR)) {
|
if (file.getAbsolutePath().contains(IndexConstants.RENDERERS_DIR)) {
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_map_style, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_map_style, activeColorRes));
|
||||||
|
@ -304,6 +370,8 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
|
||||||
} else if (file.getAbsolutePath().contains(IndexConstants.GPX_INDEX_DIR)) {
|
} else if (file.getAbsolutePath().contains(IndexConstants.GPX_INDEX_DIR)) {
|
||||||
builder.setTitle(GpxUiHelper.getGpxTitle(file.getName()));
|
builder.setTitle(GpxUiHelper.getGpxTitle(file.getName()));
|
||||||
|
builder.setTag(file);
|
||||||
|
builder.setDescription(getTrackDescr(file, lastModified, size));
|
||||||
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(R.drawable.ic_action_route_distance, activeColorRes));
|
||||||
} else if (file.getAbsolutePath().contains(IndexConstants.AV_INDEX_DIR)) {
|
} else if (file.getAbsolutePath().contains(IndexConstants.AV_INDEX_DIR)) {
|
||||||
int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file);
|
int iconId = AudioVideoNotesPlugin.getIconIdForRecordingFile(file);
|
||||||
|
@ -316,6 +384,85 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
|| fileSubtype == FileSettingsItem.FileSubtype.VOICE) {
|
|| fileSubtype == FileSettingsItem.FileSubtype.VOICE) {
|
||||||
builder.setTitle(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
|
builder.setTitle(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
|
||||||
builder.setIcon(uiUtilities.getIcon(fileSubtype.getIconId(), activeColorRes));
|
builder.setIcon(uiUtilities.getIcon(fileSubtype.getIconId(), activeColorRes));
|
||||||
|
|
||||||
|
if (fileSubtype.isMap()) {
|
||||||
|
String mapDescription = getMapDescription(file);
|
||||||
|
String formattedSize = AndroidUtils.formatSize(app, size);
|
||||||
|
if (mapDescription != null) {
|
||||||
|
builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_star, mapDescription, formattedSize));
|
||||||
|
} else {
|
||||||
|
builder.setDescription(formattedSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final GpxDataItemCallback gpxDataItemCallback = new GpxDataItemCallback() {
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGpxDataItemReady(GpxDataItem item) {
|
||||||
|
for (BaseBottomSheetItem bottomSheetItem : items) {
|
||||||
|
if (Algorithms.objectEquals(item.getFile(), bottomSheetItem.getTag())) {
|
||||||
|
((BottomSheetItemWithDescription) bottomSheetItem).setDescription(getTrackDescrForDataItem(item));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private String getTrackDescr(@NonNull File file, long lastModified, long size) {
|
||||||
|
String folder = "";
|
||||||
|
File parent = file.getParentFile();
|
||||||
|
if (parent != null) {
|
||||||
|
folder = Algorithms.capitalizeFirstLetter(parent.getName());
|
||||||
|
}
|
||||||
|
if (exportMode) {
|
||||||
|
GpxDataItem dataItem = getDataItem(file, gpxDataItemCallback);
|
||||||
|
if (dataItem != null) {
|
||||||
|
return getTrackDescrForDataItem(dataItem);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String date = OsmAndFormatter.getFormattedDate(app, lastModified);
|
||||||
|
String formattedSize = AndroidUtils.formatSize(app, size);
|
||||||
|
String descr = getString(R.string.ltr_or_rtl_combine_via_bold_point, folder, date);
|
||||||
|
return getString(R.string.ltr_or_rtl_combine_via_comma, descr, formattedSize);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getTrackDescrForDataItem(@NonNull GpxDataItem dataItem) {
|
||||||
|
GPXTrackAnalysis analysis = dataItem.getAnalysis();
|
||||||
|
if (analysis != null) {
|
||||||
|
File parent = dataItem.getFile().getParentFile();
|
||||||
|
String folder = Algorithms.capitalizeFirstLetter(parent.getName());
|
||||||
|
String dist = OsmAndFormatter.getFormattedDistance(analysis.totalDistance, app);
|
||||||
|
String points = analysis.wptPoints + " " + getString(R.string.shared_string_gpx_points).toLowerCase();
|
||||||
|
String descr = getString(R.string.ltr_or_rtl_combine_via_bold_point, folder, dist);
|
||||||
|
return getString(R.string.ltr_or_rtl_combine_via_comma, descr, points);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private GpxDataItem getDataItem(File file, @Nullable GpxDataItemCallback callback) {
|
||||||
|
return app.getGpxDbHelper().getItem(file, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getMapDescription(File file) {
|
||||||
|
if (file.isDirectory() || file.getName().endsWith(IndexConstants.BINARY_WIKIVOYAGE_MAP_INDEX_EXT)) {
|
||||||
|
return getString(R.string.online_map);
|
||||||
|
} else if (file.getName().endsWith(IndexConstants.BINARY_ROAD_MAP_INDEX_EXT)) {
|
||||||
|
return getString(R.string.download_roads_only_item);
|
||||||
|
} else if (file.getName().endsWith(IndexConstants.BINARY_WIKI_MAP_INDEX_EXT)) {
|
||||||
|
return getString(R.string.download_wikipedia_maps);
|
||||||
|
} else if (file.getName().endsWith(IndexConstants.BINARY_SRTM_MAP_INDEX_EXT)) {
|
||||||
|
return getString(R.string.download_srtm_maps);
|
||||||
|
} else if (file.getName().endsWith(IndexConstants.BINARY_MAP_INDEX_EXT)) {
|
||||||
|
return getString(R.string.download_regular_maps);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -18,6 +18,7 @@ import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
|
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.helpers.FontCache;
|
import net.osmand.plus.helpers.FontCache;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||||
import net.osmand.plus.settings.backend.ExportSettingsCategory;
|
import net.osmand.plus.settings.backend.ExportSettingsCategory;
|
||||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
||||||
|
@ -54,6 +55,9 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
private final boolean nightMode;
|
private final boolean nightMode;
|
||||||
private final int activeColorRes;
|
private final int activeColorRes;
|
||||||
private final int secondaryColorRes;
|
private final int secondaryColorRes;
|
||||||
|
private final int groupViewHeight;
|
||||||
|
private final int childViewHeight;
|
||||||
|
private final int listBottomPadding;
|
||||||
|
|
||||||
ExportSettingsAdapter(OsmandApplication app, OnItemSelectedListener listener, boolean nightMode) {
|
ExportSettingsAdapter(OsmandApplication app, OnItemSelectedListener listener, boolean nightMode) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
@ -63,6 +67,9 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
themedInflater = UiUtilities.getInflater(app, nightMode);
|
themedInflater = UiUtilities.getInflater(app, nightMode);
|
||||||
activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light;
|
activeColorRes = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light;
|
||||||
secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light;
|
secondaryColorRes = nightMode ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light;
|
||||||
|
groupViewHeight = app.getResources().getDimensionPixelSize(R.dimen.setting_list_item_group_height);
|
||||||
|
childViewHeight = app.getResources().getDimensionPixelSize(R.dimen.setting_list_item_large_height);
|
||||||
|
listBottomPadding = app.getResources().getDimensionPixelSize(R.dimen.fab_recycler_view_padding_bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,6 +77,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
View group = convertView;
|
View group = convertView;
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false);
|
group = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false);
|
||||||
|
group.findViewById(R.id.item_container).setMinimumHeight(groupViewHeight);
|
||||||
}
|
}
|
||||||
final ExportSettingsCategory category = itemsTypes.get(groupPosition);
|
final ExportSettingsCategory category = itemsTypes.get(groupPosition);
|
||||||
final SettingsCategoryItems items = itemsMap.get(category);
|
final SettingsCategoryItems items = itemsMap.get(category);
|
||||||
|
@ -108,6 +116,9 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
boolean addPadding = !isExpanded && groupPosition == getGroupCount() - 1;
|
||||||
|
group.setPadding(0, 0, 0, addPadding ? listBottomPadding : 0);
|
||||||
|
|
||||||
adjustIndicator(app, groupPosition, isExpanded, group, nightMode);
|
adjustIndicator(app, groupPosition, isExpanded, group, nightMode);
|
||||||
AndroidUiHelper.updateVisibility(group.findViewById(R.id.divider), isExpanded);
|
AndroidUiHelper.updateVisibility(group.findViewById(R.id.divider), isExpanded);
|
||||||
AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_top_divider), true);
|
AndroidUiHelper.updateVisibility(group.findViewById(R.id.card_top_divider), true);
|
||||||
|
@ -122,6 +133,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
View child = convertView;
|
View child = convertView;
|
||||||
if (child == null) {
|
if (child == null) {
|
||||||
child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false);
|
child = themedInflater.inflate(R.layout.profile_data_list_item_group, parent, false);
|
||||||
|
child.findViewById(R.id.item_container).setMinimumHeight(childViewHeight);
|
||||||
}
|
}
|
||||||
final ExportSettingsCategory category = itemsTypes.get(groupPosition);
|
final ExportSettingsCategory category = itemsTypes.get(groupPosition);
|
||||||
final SettingsCategoryItems categoryItems = itemsMap.get(category);
|
final SettingsCategoryItems categoryItems = itemsMap.get(category);
|
||||||
|
@ -157,7 +169,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onTypeClicked(category, type);
|
listener.onTypeClicked(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -174,7 +186,8 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
boolean addPadding = isLastChild && groupPosition == getGroupCount() - 1;
|
||||||
|
child.setPadding(0, 0, 0, addPadding ? listBottomPadding : 0);
|
||||||
AndroidUiHelper.updateVisibility(child.findViewById(R.id.card_bottom_divider), isLastChild);
|
AndroidUiHelper.updateVisibility(child.findViewById(R.id.card_bottom_divider), isLastChild);
|
||||||
|
|
||||||
return child;
|
return child;
|
||||||
|
@ -247,10 +260,6 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasSelectedData() {
|
|
||||||
return !selectedItemsMap.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<? super Object> getData() {
|
public List<? super Object> getData() {
|
||||||
List<Object> selectedItems = new ArrayList<>();
|
List<Object> selectedItems = new ArrayList<>();
|
||||||
for (List<?> items : selectedItemsMap.values()) {
|
for (List<?> items : selectedItemsMap.values()) {
|
||||||
|
@ -307,6 +316,10 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
itemsSize += ((FileSettingsItem) object).getSize();
|
itemsSize += ((FileSettingsItem) object).getSize();
|
||||||
} else if (object instanceof File) {
|
} else if (object instanceof File) {
|
||||||
itemsSize += ((File) object).length();
|
itemsSize += ((File) object).length();
|
||||||
|
} else if (object instanceof MapMarkersGroup) {
|
||||||
|
int selectedMarkers = ((MapMarkersGroup) object).getMarkers().size();
|
||||||
|
String itemsDescr = app.getString(R.string.shared_string_items);
|
||||||
|
return app.getString(R.string.ltr_or_rtl_combine_via_colon, itemsDescr, selectedMarkers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,7 +345,7 @@ public class ExportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
||||||
|
|
||||||
void onCategorySelected(ExportSettingsCategory type, boolean selected);
|
void onCategorySelected(ExportSettingsCategory type, boolean selected);
|
||||||
|
|
||||||
void onTypeClicked(ExportSettingsCategory category, ExportSettingsType type);
|
void onTypeClicked(ExportSettingsType type);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,7 +11,6 @@ import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.activity.OnBackPressedCallback;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
@ -44,12 +43,9 @@ public class ExportSettingsFragment extends BaseSettingsListFragment {
|
||||||
public static final String TAG = ImportSettingsFragment.class.getSimpleName();
|
public static final String TAG = ImportSettingsFragment.class.getSimpleName();
|
||||||
public static final Log LOG = PlatformUtil.getLog(ImportSettingsFragment.class.getSimpleName());
|
public static final Log LOG = PlatformUtil.getLog(ImportSettingsFragment.class.getSimpleName());
|
||||||
|
|
||||||
private static final String EXPORT_SETTINGS_TAG = "import_settings_tag";
|
|
||||||
private static final String GLOBAL_EXPORT_KEY = "global_export_key";
|
private static final String GLOBAL_EXPORT_KEY = "global_export_key";
|
||||||
private static final String EXPORT_START_TIME_KEY = "export_start_time_key";
|
private static final String EXPORT_START_TIME_KEY = "export_start_time_key";
|
||||||
private static final String EXPORTING_STARTED_KEY = "exporting_started_key";
|
private static final String EXPORTING_STARTED_KEY = "exporting_started_key";
|
||||||
private static final String INCLUDE_ADDITIONAL_DATA_KEY = "include_additional_data_key";
|
|
||||||
private static final String INCLUDE_GLOBAL_SETTINGS_KEY = "include_global_settings_key";
|
|
||||||
private static final String PROGRESS_MAX_KEY = "progress_max_key";
|
private static final String PROGRESS_MAX_KEY = "progress_max_key";
|
||||||
private static final String PROGRESS_VALUE_KEY = "progress_value_key";
|
private static final String PROGRESS_VALUE_KEY = "progress_value_key";
|
||||||
|
|
||||||
|
@ -76,14 +72,8 @@ public class ExportSettingsFragment extends BaseSettingsListFragment {
|
||||||
progressMax = savedInstanceState.getInt(PROGRESS_MAX_KEY);
|
progressMax = savedInstanceState.getInt(PROGRESS_MAX_KEY);
|
||||||
progressValue = savedInstanceState.getInt(PROGRESS_VALUE_KEY);
|
progressValue = savedInstanceState.getInt(PROGRESS_VALUE_KEY);
|
||||||
}
|
}
|
||||||
dataList = app.getSettingsHelper().getAdditionalData(globalExport);
|
exportMode = true;
|
||||||
|
dataList = app.getSettingsHelper().getSettingsByCategory(globalExport);
|
||||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
|
||||||
@Override
|
|
||||||
public void handleOnBackPressed() {
|
|
||||||
showExitDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -139,7 +129,7 @@ public class ExportSettingsFragment extends BaseSettingsListFragment {
|
||||||
showExportProgressDialog();
|
showExportProgressDialog();
|
||||||
File tempDir = FileUtils.getTempDir(app);
|
File tempDir = FileUtils.getTempDir(app);
|
||||||
String fileName = getFileName();
|
String fileName = getFileName();
|
||||||
List<SettingsItem> items = app.getSettingsHelper().prepareAdditionalSettingsItems(adapter.getData());
|
List<SettingsItem> items = app.getSettingsHelper().prepareSettingsItems(adapter.getData());
|
||||||
progress.setMax(getMaxProgress(items));
|
progress.setMax(getMaxProgress(items));
|
||||||
app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true);
|
app.getSettingsHelper().exportSettings(tempDir, fileName, getSettingsExportListener(), items, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.activity.OnBackPressedCallback;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
@ -101,13 +100,8 @@ public class ImportSettingsFragment extends BaseSettingsListFragment {
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
duplicateStartTime = savedInstanceState.getLong(DUPLICATES_START_TIME_KEY);
|
duplicateStartTime = savedInstanceState.getLong(DUPLICATES_START_TIME_KEY);
|
||||||
}
|
}
|
||||||
|
exportMode = false;
|
||||||
settingsHelper = app.getSettingsHelper();
|
settingsHelper = app.getSettingsHelper();
|
||||||
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
|
||||||
@Override
|
|
||||||
public void handleOnBackPressed() {
|
|
||||||
showExitDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ImportAsyncTask importTask = settingsHelper.getImportTask();
|
ImportAsyncTask importTask = settingsHelper.getImportTask();
|
||||||
if (importTask != null) {
|
if (importTask != null) {
|
||||||
|
|
|
@ -40,6 +40,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
|
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
|
||||||
|
@ -873,6 +874,10 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
||||||
private void customProfileSaved() {
|
private void customProfileSaved() {
|
||||||
FragmentActivity activity = getActivity();
|
FragmentActivity activity = getActivity();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
|
if (activity instanceof MapActivity) {
|
||||||
|
((MapActivity) activity).getMapLayers().getMapWidgetRegistry().updateVisibleWidgets();
|
||||||
|
((MapActivity) activity).updateApplicationModeSettings();
|
||||||
|
}
|
||||||
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
||||||
if (!fragmentManager.isStateSaved()) {
|
if (!fragmentManager.isStateSaved()) {
|
||||||
fragmentManager.popBackStack();
|
fragmentManager.popBackStack();
|
||||||
|
|
|
@ -96,7 +96,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
language = voiceProvider.replace(IndexConstants.VOICE_PROVIDER_SUFFIX, "")
|
language = voiceProvider.replace(IndexConstants.VOICE_PROVIDER_SUFFIX, "")
|
||||||
.replace("-formal", "");
|
.replace("-formal", "").replace("-casual", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
||||||
if (url.contains(WIKIVOAYAGE_DOMAIN) && isWebPage) {
|
if (url.contains(WIKIVOAYAGE_DOMAIN) && isWebPage) {
|
||||||
String lang = WikiArticleHelper.getLang(url);
|
String lang = WikiArticleHelper.getLang(url);
|
||||||
String articleName = WikiArticleHelper.getArticleNameFromUrl(url, lang);
|
String articleName = WikiArticleHelper.getArticleNameFromUrl(url, lang);
|
||||||
long articleId = app.getTravelDbHelper().getArticleId(articleName, lang);
|
long articleId = app.getTravelHelper().getArticleId(articleName, lang);
|
||||||
if (articleId != 0) {
|
if (articleId != 0) {
|
||||||
WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, articleId, lang);
|
WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, articleId, lang);
|
||||||
} else {
|
} else {
|
||||||
|
@ -116,7 +116,7 @@ public class WikivoyageWebViewClient extends WebViewClient {
|
||||||
|
|
||||||
fragmentManager.popBackStackImmediate();
|
fragmentManager.popBackStackImmediate();
|
||||||
|
|
||||||
File path = app.getTravelDbHelper().createGpxFile(article);
|
File path = app.getTravelHelper().createGpxFile(article);
|
||||||
GPXUtilities.GPXFile gpxFile = article.getGpxFile();
|
GPXUtilities.GPXFile gpxFile = article.getGpxFile();
|
||||||
gpxFile.path = path.getAbsolutePath();
|
gpxFile.path = path.getAbsolutePath();
|
||||||
app.getSelectedGpxHelper().setGpxFileToDisplay(gpxFile);
|
app.getSelectedGpxHelper().setGpxFileToDisplay(gpxFile);
|
||||||
|
|
|
@ -42,6 +42,7 @@ import net.osmand.plus.wikivoyage.WikivoyageShowPicturesDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.WikivoyageWebViewClient;
|
import net.osmand.plus.wikivoyage.WikivoyageWebViewClient;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
@ -148,8 +149,8 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
if (article == null || activity == null || fm == null) {
|
if (article == null || activity == null || fm == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TravelDbHelper dbHelper = getMyApplication().getTravelDbHelper();
|
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
||||||
File path = dbHelper.createGpxFile(article);
|
File path = travelHelper.createGpxFile(article);
|
||||||
Intent newIntent = new Intent(activity, getMyApplication().getAppCustomization().getTrackActivity());
|
Intent newIntent = new Intent(activity, getMyApplication().getAppCustomization().getTrackActivity());
|
||||||
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, path.getAbsolutePath());
|
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, path.getAbsolutePath());
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
@ -234,7 +235,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
|
|
||||||
private void updateSaveButton() {
|
private void updateSaveButton() {
|
||||||
if (article != null) {
|
if (article != null) {
|
||||||
final TravelLocalDataHelper helper = getMyApplication().getTravelDbHelper().getLocalDataHelper();
|
final TravelLocalDataHelper helper = getMyApplication().getTravelHelper().getLocalDataHelper();
|
||||||
final boolean saved = helper.isArticleSaved(article);
|
final boolean saved = helper.isArticleSaved(article);
|
||||||
Drawable icon = getActiveIcon(saved ? R.drawable.ic_action_read_later_fill : R.drawable.ic_action_read_later);
|
Drawable icon = getActiveIcon(saved ? R.drawable.ic_action_read_later_fill : R.drawable.ic_action_read_later);
|
||||||
saveBtn.setText(getString(saved ? R.string.shared_string_remove : R.string.shared_string_bookmark));
|
saveBtn.setText(getString(saved ? R.string.shared_string_remove : R.string.shared_string_bookmark));
|
||||||
|
@ -246,7 +247,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
if (saved) {
|
if (saved) {
|
||||||
helper.removeArticleFromSaved(article);
|
helper.removeArticleFromSaved(article);
|
||||||
} else {
|
} else {
|
||||||
getMyApplication().getTravelDbHelper().createGpxFile(article);
|
getMyApplication().getTravelHelper().createGpxFile(article);
|
||||||
helper.addArticleToSaved(article);
|
helper.addArticleToSaved(article);
|
||||||
}
|
}
|
||||||
updateSaveButton();
|
updateSaveButton();
|
||||||
|
@ -301,7 +302,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
selectedLang = langs.get(0);
|
selectedLang = langs.get(0);
|
||||||
}
|
}
|
||||||
articleToolbarText.setText("");
|
articleToolbarText.setText("");
|
||||||
article = getMyApplication().getTravelDbHelper().getArticle(tripId, selectedLang);
|
article = getMyApplication().getTravelHelper().getArticle(tripId, selectedLang);
|
||||||
if (article == null) {
|
if (article == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -314,7 +315,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
trackButton.setVisibility(View.GONE);
|
trackButton.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
TravelLocalDataHelper ldh = getMyApplication().getTravelDbHelper().getLocalDataHelper();
|
TravelLocalDataHelper ldh = getMyApplication().getTravelHelper().getLocalDataHelper();
|
||||||
ldh.addToHistory(article);
|
ldh.addToHistory(article);
|
||||||
|
|
||||||
updateSaveButton();
|
updateSaveButton();
|
||||||
|
@ -370,7 +371,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
@NonNull FragmentManager fm,
|
@NonNull FragmentManager fm,
|
||||||
@NonNull String title,
|
@NonNull String title,
|
||||||
@NonNull String lang) {
|
@NonNull String lang) {
|
||||||
long cityId = app.getTravelDbHelper().getArticleId(title, lang);
|
long cityId = app.getTravelHelper().getArticleId(title, lang);
|
||||||
return showInstance(app, fm, cityId, lang);
|
return showInstance(app, fm, cityId, lang);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,7 +379,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
@NonNull FragmentManager fm,
|
@NonNull FragmentManager fm,
|
||||||
long cityId,
|
long cityId,
|
||||||
@Nullable String selectedLang) {
|
@Nullable String selectedLang) {
|
||||||
ArrayList<String> langs = app.getTravelDbHelper().getArticleLangs(cityId);
|
ArrayList<String> langs = app.getTravelHelper().getArticleLangs(cityId);
|
||||||
return showInstance(fm, cityId, langs, selectedLang);
|
return showInstance(fm, cityId, langs, selectedLang);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,13 +73,13 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
article = getMyApplication().getTravelDbHelper().getArticle(cityId, selectedLang);
|
article = getMyApplication().getTravelHelper().getArticle(cityId, selectedLang);
|
||||||
if (article == null) {
|
if (article == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentsList = new ArrayList<>(Arrays.asList(article.getAggregatedPartOf().split(",")));
|
parentsList = new ArrayList<>(Arrays.asList(article.getAggregatedPartOf().split(",")));
|
||||||
|
|
||||||
LinkedHashMap<WikivoyageSearchResult, List<WikivoyageSearchResult>> navigationMap = getMyApplication().getTravelDbHelper().getNavigationMap(article);
|
LinkedHashMap<WikivoyageSearchResult, List<WikivoyageSearchResult>> navigationMap = getMyApplication().getTravelHelper().getNavigationMap(article);
|
||||||
|
|
||||||
items.add(new TitleItem(getString(R.string.shared_string_navigation)));
|
items.add(new TitleItem(getString(R.string.shared_string_navigation)));
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import net.osmand.IndexConstants;
|
||||||
import net.osmand.Location;
|
import net.osmand.Location;
|
||||||
import net.osmand.OsmAndCollator;
|
import net.osmand.OsmAndCollator;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -43,7 +44,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||||
|
|
||||||
public class TravelDbHelper {
|
public class TravelDbHelper implements TravelHelper {
|
||||||
|
|
||||||
private static final Log LOG = PlatformUtil.getLog(TravelDbHelper.class);
|
private static final Log LOG = PlatformUtil.getLog(TravelDbHelper.class);
|
||||||
|
|
||||||
|
@ -646,7 +647,7 @@ public class TravelDbHelper {
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class PopularArticle {
|
protected static class PopularArticle {
|
||||||
long tripId;
|
long tripId;
|
||||||
String title;
|
String title;
|
||||||
String lang;
|
String lang;
|
||||||
|
@ -654,11 +655,11 @@ public class TravelDbHelper {
|
||||||
int order;
|
int order;
|
||||||
double lat;
|
double lat;
|
||||||
double lon;
|
double lon;
|
||||||
|
|
||||||
public boolean isLocationSpecified() {
|
public boolean isLocationSpecified() {
|
||||||
return !Double.isNaN(lat) && !Double.isNaN(lon);
|
return !Double.isNaN(lat) && !Double.isNaN(lon);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PopularArticle readArticle(SQLiteCursor cursor) {
|
public static PopularArticle readArticle(SQLiteCursor cursor) {
|
||||||
PopularArticle res = new PopularArticle();
|
PopularArticle res = new PopularArticle();
|
||||||
res.title = cursor.getString(0);
|
res.title = cursor.getString(0);
|
||||||
|
@ -670,5 +671,17 @@ public class TravelDbHelper {
|
||||||
res.popIndex = cursor.isNull(6) ? 0 : cursor.getInt(6);
|
res.popIndex = cursor.isNull(6) ? 0 : cursor.getInt(6);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PopularArticle readArticleFromAmenity(Amenity a, String lang) {
|
||||||
|
PopularArticle res = new PopularArticle();
|
||||||
|
res.title = a.getName(lang);
|
||||||
|
res.lat = a.getLocation().getLatitude();
|
||||||
|
res.lon = a.getLocation().getLongitude();
|
||||||
|
res.tripId = a.getId();
|
||||||
|
res.lang = lang;
|
||||||
|
res.order = -1;
|
||||||
|
res.popIndex = 0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
53
OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java
Normal file
53
OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelHelper.java
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
package net.osmand.plus.wikivoyage.data;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface TravelHelper {
|
||||||
|
|
||||||
|
TravelLocalDataHelper getLocalDataHelper();
|
||||||
|
|
||||||
|
void initTravelBooks();
|
||||||
|
|
||||||
|
void loadDataForSelectedTravelBook();
|
||||||
|
|
||||||
|
File getSelectedTravelBook();
|
||||||
|
|
||||||
|
List<File> getExistingTravelBooks();
|
||||||
|
|
||||||
|
void selectTravelBook(File f);
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
List<WikivoyageSearchResult> search(final String searchQuery);
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
List<TravelArticle> getPopularArticles();
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
List<TravelArticle> loadPopularArticles();
|
||||||
|
|
||||||
|
LinkedHashMap<WikivoyageSearchResult, List<WikivoyageSearchResult>> getNavigationMap(
|
||||||
|
final TravelArticle article);
|
||||||
|
|
||||||
|
TravelArticle getArticle(long cityId, String lang);
|
||||||
|
|
||||||
|
TravelArticle getArticle(String title, String lang);
|
||||||
|
|
||||||
|
long getArticleId(String title, String lang);
|
||||||
|
|
||||||
|
ArrayList<String> getArticleLangs(long cityId);
|
||||||
|
|
||||||
|
String formatTravelBookName(File tb);
|
||||||
|
|
||||||
|
String getGPXName(TravelArticle article);
|
||||||
|
|
||||||
|
File createGpxFile(TravelArticle article);
|
||||||
|
}
|
|
@ -260,7 +260,7 @@ public class TravelLocalDataHelper {
|
||||||
if (oldVersion < 3) {
|
if (oldVersion < 3) {
|
||||||
conn.execSQL("ALTER TABLE " + HISTORY_TABLE_NAME + " ADD " + HISTORY_COL_TRAVEL_BOOK + " TEXT");
|
conn.execSQL("ALTER TABLE " + HISTORY_TABLE_NAME + " ADD " + HISTORY_COL_TRAVEL_BOOK + " TEXT");
|
||||||
conn.execSQL("ALTER TABLE " + BOOKMARKS_TABLE_NAME + " ADD " + BOOKMARKS_COL_TRAVEL_BOOK + " TEXT");
|
conn.execSQL("ALTER TABLE " + BOOKMARKS_TABLE_NAME + " ADD " + BOOKMARKS_COL_TRAVEL_BOOK + " TEXT");
|
||||||
File selectedTravelBook = context.getTravelDbHelper().getSelectedTravelBook();
|
File selectedTravelBook = context.getTravelHelper().getSelectedTravelBook();
|
||||||
if (selectedTravelBook != null) {
|
if (selectedTravelBook != null) {
|
||||||
Object[] args = new Object[]{selectedTravelBook.getName()};
|
Object[] args = new Object[]{selectedTravelBook.getName()};
|
||||||
conn.execSQL("UPDATE " + HISTORY_TABLE_NAME + " SET " + HISTORY_COL_TRAVEL_BOOK + " = ?", args);
|
conn.execSQL("UPDATE " + HISTORY_TABLE_NAME + " SET " + HISTORY_COL_TRAVEL_BOOK + " = ?", args);
|
||||||
|
@ -452,7 +452,7 @@ public class TravelLocalDataHelper {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private String getSelectedTravelBookName() {
|
private String getSelectedTravelBookName() {
|
||||||
File selectedTravelBook = context.getTravelDbHelper().getSelectedTravelBook();
|
File selectedTravelBook = context.getTravelHelper().getSelectedTravelBook();
|
||||||
if (selectedTravelBook != null) {
|
if (selectedTravelBook != null) {
|
||||||
return selectedTravelBook.getName();
|
return selectedTravelBook.getName();
|
||||||
}
|
}
|
||||||
|
|
301
OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java
Normal file
301
OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java
Normal file
|
@ -0,0 +1,301 @@
|
||||||
|
package net.osmand.plus.wikivoyage.data;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import net.osmand.Collator;
|
||||||
|
import net.osmand.GPXUtilities;
|
||||||
|
import net.osmand.IndexConstants;
|
||||||
|
import net.osmand.OsmAndCollator;
|
||||||
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.ResultMatcher;
|
||||||
|
import net.osmand.binary.BinaryIndexPart;
|
||||||
|
import net.osmand.binary.BinaryMapIndexReader;
|
||||||
|
import net.osmand.binary.BinaryMapPoiReaderAdapter;
|
||||||
|
import net.osmand.data.Amenity;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.RandomAccessFile;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class TravelObfHelper implements TravelHelper{
|
||||||
|
|
||||||
|
private static final Log LOG = PlatformUtil.getLog(TravelObfHelper.class);
|
||||||
|
|
||||||
|
private static final String WIKIVOYAGE_OBF = "Wikivoyage.obf";
|
||||||
|
public static final String ROUTE_ARTICLE = "route_article";
|
||||||
|
|
||||||
|
private final OsmandApplication application;
|
||||||
|
private Collator collator;
|
||||||
|
private TravelLocalDataHelper localDataHelper;
|
||||||
|
|
||||||
|
private File selectedTravelBook = null;
|
||||||
|
private List<File> existingTravelBooks = new ArrayList<>();
|
||||||
|
private List<TravelArticle> popularArticles = new ArrayList<TravelArticle>();
|
||||||
|
|
||||||
|
private BinaryMapIndexReader index = null;
|
||||||
|
|
||||||
|
|
||||||
|
public TravelObfHelper(OsmandApplication application) {
|
||||||
|
this.application = application;
|
||||||
|
collator = OsmAndCollator.primaryCollator();
|
||||||
|
localDataHelper = new TravelLocalDataHelper(application);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkIfObfFileExists(OsmandApplication app) {
|
||||||
|
File[] files = app.getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR).listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
for (File f : files) {
|
||||||
|
if (f.getName().equals(WIKIVOYAGE_OBF)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TravelLocalDataHelper getLocalDataHelper() {
|
||||||
|
return localDataHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** TODO
|
||||||
|
* 1. implement regional travelbooks
|
||||||
|
* 2. check settings for default?
|
||||||
|
*/
|
||||||
|
public void initTravelBooks() {
|
||||||
|
List<File> files = getPossibleFiles();
|
||||||
|
String travelBook = application.getSettings().SELECTED_TRAVEL_BOOK.get();
|
||||||
|
existingTravelBooks.clear();
|
||||||
|
if (files != null && !files.isEmpty()) {
|
||||||
|
for (File f : files) {
|
||||||
|
existingTravelBooks.add(f);
|
||||||
|
if (selectedTravelBook == null) {
|
||||||
|
selectedTravelBook = f;
|
||||||
|
} else if (Algorithms.objectEquals(travelBook, f.getName())) {
|
||||||
|
selectedTravelBook = f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selectedTravelBook = files.get(0);
|
||||||
|
} else {
|
||||||
|
selectedTravelBook = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* todo: get all obf files from folder, may be we should add some suffix like 'wikivoyage'
|
||||||
|
* to filenames to distinguish from other maps? Or add some checks right there.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
private List<File> getPossibleFiles() {
|
||||||
|
File[] files = application.getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR).listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
List<File> res = new ArrayList<>();
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.getName().equals("Wikivoyage.obf")) {
|
||||||
|
res.add(file);
|
||||||
|
LOG.debug(String.format("FIle name: %s", file.getAbsolutePath()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadDataForSelectedTravelBook() {
|
||||||
|
localDataHelper.refreshCachedData();
|
||||||
|
loadPopularArticles();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getSelectedTravelBook() {
|
||||||
|
return selectedTravelBook;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<File> getExistingTravelBooks() {
|
||||||
|
return existingTravelBooks;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectTravelBook(File f) {
|
||||||
|
//todo
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public List<WikivoyageSearchResult> search(String searchQuery) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public List<TravelArticle> getPopularArticles() {
|
||||||
|
return popularArticles;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO for now it reads any articles, since we didn't have popular articles in the obf
|
||||||
|
@NonNull
|
||||||
|
public List<TravelArticle> loadPopularArticles() {
|
||||||
|
String language = application.getLanguage();
|
||||||
|
final List<Amenity> articles = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
BinaryMapIndexReader bookIndexReader = getBookBinaryIndex();
|
||||||
|
if (bookIndexReader == null) {
|
||||||
|
popularArticles = new ArrayList<>();
|
||||||
|
return popularArticles;
|
||||||
|
}
|
||||||
|
LatLon ll = application.getMapViewTrackingUtilities().getMapLocation();
|
||||||
|
float coeff = 2;
|
||||||
|
BinaryMapIndexReader.SearchRequest<Amenity> req =
|
||||||
|
BinaryMapIndexReader.buildSearchPoiRequest(
|
||||||
|
MapUtils.get31TileNumberX(ll.getLongitude() - coeff),
|
||||||
|
MapUtils.get31TileNumberX(ll.getLongitude() + coeff),
|
||||||
|
MapUtils.get31TileNumberY(ll.getLatitude() + coeff),
|
||||||
|
MapUtils.get31TileNumberY(ll.getLatitude() - coeff),
|
||||||
|
-1,
|
||||||
|
BinaryMapIndexReader.ACCEPT_ALL_POI_TYPE_FILTER,
|
||||||
|
new ResultMatcher<Amenity>() {
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean publish(Amenity object) {
|
||||||
|
//TODO need more logical way to filter results
|
||||||
|
if (object.getSubType().equals(ROUTE_ARTICLE)) {
|
||||||
|
articles.add(object);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bookIndexReader.searchPoi(req);
|
||||||
|
bookIndexReader.close();
|
||||||
|
|
||||||
|
if (articles.size() > 0) {
|
||||||
|
Iterator<Amenity> it = articles.iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
Amenity a = it.next();
|
||||||
|
if (!a.getName(language).equals("")) {
|
||||||
|
popularArticles.add(readArticle(a, language));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return popularArticles;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private TravelArticle readArticle(Amenity amenity, String lang) {
|
||||||
|
TravelArticle res = new TravelArticle();
|
||||||
|
|
||||||
|
res.title = amenity.getName(lang).equals("") ? amenity.getName() : amenity.getName(lang);
|
||||||
|
res.content = amenity.getDescription(lang);
|
||||||
|
res.isPartOf = amenity.getTagContent(Amenity.IS_PART, lang) == null ? "" : amenity.getTagContent(Amenity.IS_PART, lang);
|
||||||
|
res.lat = amenity.getLocation().getLatitude();
|
||||||
|
res.lon = amenity.getLocation().getLongitude();
|
||||||
|
res.imageTitle = amenity.getTagContent(Amenity.IMAGE_TITLE, lang) == null ? "" : amenity.getTagContent(Amenity.IMAGE_TITLE, lang);
|
||||||
|
res.tripId = amenity.getId(); //?
|
||||||
|
res.originalId = 0; //?
|
||||||
|
res.lang = lang;
|
||||||
|
res.contentsJson = amenity.getTagContent(Amenity.CONTENT_JSON, lang) == null ? "" : amenity.getTagContent(Amenity.CONTENT_JSON, lang);
|
||||||
|
res.aggregatedPartOf = amenity.getTagContent(Amenity.IS_AGGR_PART, lang) == null ? "" : amenity.getTagContent(Amenity.IS_AGGR_PART, lang);
|
||||||
|
|
||||||
|
// crash in some places, need to fix it
|
||||||
|
// try {
|
||||||
|
// String gpxContent = amenity.getAdditionalInfo("gpx_info");
|
||||||
|
// res.gpxFile = GPXUtilities.loadGPXFile(new ByteArrayInputStream(gpxContent.getBytes("UTF-8")));
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// LOG.error(e.getMessage(), e);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BinaryMapIndexReader getBookBinaryIndex() throws IOException {
|
||||||
|
application.getSettings().SELECTED_TRAVEL_BOOK.set(selectedTravelBook.getName());
|
||||||
|
try {
|
||||||
|
RandomAccessFile r = new RandomAccessFile(selectedTravelBook.getAbsolutePath(), "r");
|
||||||
|
BinaryMapIndexReader index = new BinaryMapIndexReader(r, selectedTravelBook);
|
||||||
|
for (BinaryIndexPart p : index.getIndexes()) {
|
||||||
|
if (p instanceof BinaryMapPoiReaderAdapter.PoiRegion) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("File doesn't have valid structure : " + selectedTravelBook.getName() + " " + e.getMessage());
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LinkedHashMap<WikivoyageSearchResult, List<WikivoyageSearchResult>> getNavigationMap(TravelArticle article) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TravelArticle getArticle(long cityId, String lang) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TravelArticle getArticle(String title, String lang) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getArticleId(String title, String lang) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<String> getArticleLangs(long cityId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String formatTravelBookName(File tb) {
|
||||||
|
if (tb == null) {
|
||||||
|
return application.getString(R.string.shared_string_none);
|
||||||
|
}
|
||||||
|
String nm = tb.getName();
|
||||||
|
return nm.substring(0, nm.indexOf('.')).replace('_', ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGPXName(TravelArticle article) {
|
||||||
|
return article.getTitle().replace('/', '_').replace('\'', '_')
|
||||||
|
.replace('\"', '_') + IndexConstants.GPX_FILE_EXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File createGpxFile(TravelArticle article) {
|
||||||
|
final GPXUtilities.GPXFile gpx = article.getGpxFile();
|
||||||
|
File file = application.getAppPath(IndexConstants.GPX_TRAVEL_DIR + getGPXName(article));
|
||||||
|
if (!file.exists()) {
|
||||||
|
GPXUtilities.writeGpxFile(file, gpx);
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import net.osmand.plus.download.DownloadValidationManager;
|
||||||
import net.osmand.plus.download.IndexItem;
|
import net.osmand.plus.download.IndexItem;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
||||||
import net.osmand.plus.wikivoyage.explore.travelcards.ArticleTravelCard;
|
import net.osmand.plus.wikivoyage.explore.travelcards.ArticleTravelCard;
|
||||||
import net.osmand.plus.wikivoyage.explore.travelcards.BaseTravelCard;
|
import net.osmand.plus.wikivoyage.explore.travelcards.BaseTravelCard;
|
||||||
|
@ -92,7 +93,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
super.onResume();
|
super.onResume();
|
||||||
OsmandApplication app = getMyApplication();
|
OsmandApplication app = getMyApplication();
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
app.getTravelDbHelper().getLocalDataHelper().addListener(this);
|
app.getTravelHelper().getLocalDataHelper().addListener(this);
|
||||||
}
|
}
|
||||||
WikivoyageExploreActivity exploreActivity = getExploreActivity();
|
WikivoyageExploreActivity exploreActivity = getExploreActivity();
|
||||||
if (exploreActivity != null) {
|
if (exploreActivity != null) {
|
||||||
|
@ -105,7 +106,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
super.onPause();
|
super.onPause();
|
||||||
OsmandApplication app = getMyApplication();
|
OsmandApplication app = getMyApplication();
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
app.getTravelDbHelper().getLocalDataHelper().removeListener(this);
|
app.getTravelHelper().getLocalDataHelper().removeListener(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,9 +136,9 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
public void downloadHasFinished() {
|
public void downloadHasFinished() {
|
||||||
OsmandApplication app = getMyApplication();
|
OsmandApplication app = getMyApplication();
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
TravelDbHelper travelDbHelper = app.getTravelDbHelper();
|
TravelHelper travelHelper = app.getTravelHelper();
|
||||||
if (travelDbHelper.getSelectedTravelBook() == null) {
|
if (travelHelper.getSelectedTravelBook() == null) {
|
||||||
app.getTravelDbHelper().initTravelBooks();
|
app.getTravelHelper().initTravelBooks();
|
||||||
WikivoyageExploreActivity exploreActivity = getExploreActivity();
|
WikivoyageExploreActivity exploreActivity = getExploreActivity();
|
||||||
if (exploreActivity != null) {
|
if (exploreActivity != null) {
|
||||||
exploreActivity.populateData();
|
exploreActivity.populateData();
|
||||||
|
@ -181,10 +182,10 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
if (!Version.isPaidVersion(app)) {
|
if (!Version.isPaidVersion(app)) {
|
||||||
items.add(new OpenBetaTravelCard(app, nightMode, fm));
|
items.add(new OpenBetaTravelCard(app, nightMode, fm));
|
||||||
}
|
}
|
||||||
if (app.getTravelDbHelper().getSelectedTravelBook() != null) {
|
if (app.getTravelHelper().getSelectedTravelBook() != null) {
|
||||||
items.add(new HeaderTravelCard(app, nightMode, getString(R.string.popular_destinations)));
|
items.add(new HeaderTravelCard(app, nightMode, getString(R.string.popular_destinations)));
|
||||||
|
|
||||||
List<TravelArticle> popularArticles = app.getTravelDbHelper().getPopularArticles();
|
List<TravelArticle> popularArticles = app.getTravelHelper().getPopularArticles();
|
||||||
for (TravelArticle article : popularArticles) {
|
for (TravelArticle article : popularArticles) {
|
||||||
items.add(new ArticleTravelCard(app, nightMode, article, fm));
|
items.add(new ArticleTravelCard(app, nightMode, article, fm));
|
||||||
}
|
}
|
||||||
|
@ -238,7 +239,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
|
|
||||||
boolean outdated = mainIndexItem != null && mainIndexItem.isOutdated();
|
boolean outdated = mainIndexItem != null && mainIndexItem.isOutdated();
|
||||||
boolean needsDownloading = mainIndexItem != null && !mainIndexItem.isDownloaded();
|
boolean needsDownloading = mainIndexItem != null && !mainIndexItem.isDownloaded();
|
||||||
File selectedTravelBook = app.getTravelDbHelper().getSelectedTravelBook();
|
File selectedTravelBook = app.getTravelHelper().getSelectedTravelBook();
|
||||||
|
|
||||||
if (selectedTravelBook == null || needsDownloading || (outdated && SHOW_TRAVEL_UPDATE_CARD)) {
|
if (selectedTravelBook == null || needsDownloading || (outdated && SHOW_TRAVEL_UPDATE_CARD)) {
|
||||||
boolean showOtherMaps = false;
|
boolean showOtherMaps = false;
|
||||||
|
@ -389,7 +390,7 @@ public class ExploreTabFragment extends BaseOsmAndFragment implements DownloadEv
|
||||||
IndexItem mainItem = app.getDownloadThread().getIndexes().getWikivoyageItem(fileName);
|
IndexItem mainItem = app.getDownloadThread().getIndexes().getWikivoyageItem(fileName);
|
||||||
|
|
||||||
List<IndexItem> neededItems = new ArrayList<>();
|
List<IndexItem> neededItems = new ArrayList<>();
|
||||||
for (TravelArticle article : app.getTravelDbHelper().getLocalDataHelper().getSavedArticles()) {
|
for (TravelArticle article : app.getTravelHelper().getLocalDataHelper().getSavedArticles()) {
|
||||||
LatLon latLon = new LatLon(article.getLat(), article.getLon());
|
LatLon latLon = new LatLon(article.getLat(), article.getLon());
|
||||||
try {
|
try {
|
||||||
for (DownloadActivityType type : types) {
|
for (DownloadActivityType type : types) {
|
||||||
|
|
|
@ -195,7 +195,7 @@ public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||||
Object item = getItemByPosition();
|
Object item = getItemByPosition();
|
||||||
if (item != null && item instanceof TravelArticle) {
|
if (item != null && item instanceof TravelArticle) {
|
||||||
final TravelArticle article = (TravelArticle) item;
|
final TravelArticle article = (TravelArticle) item;
|
||||||
final TravelLocalDataHelper ldh = app.getTravelDbHelper().getLocalDataHelper();
|
final TravelLocalDataHelper ldh = app.getTravelHelper().getLocalDataHelper();
|
||||||
ldh.removeArticleFromSaved(article);
|
ldh.removeArticleFromSaved(article);
|
||||||
Snackbar snackbar = Snackbar.make(itemView, R.string.article_removed, Snackbar.LENGTH_LONG)
|
Snackbar snackbar = Snackbar.make(itemView, R.string.article_removed, Snackbar.LENGTH_LONG)
|
||||||
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
|
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
final OsmandApplication app = requireMyApplication();
|
final OsmandApplication app = requireMyApplication();
|
||||||
dataHelper = app.getTravelDbHelper().getLocalDataHelper();
|
dataHelper = app.getTravelHelper().getLocalDataHelper();
|
||||||
|
|
||||||
final View mainView = inflater.inflate(R.layout.fragment_saved_articles_tab, container, false);
|
final View mainView = inflater.inflate(R.layout.fragment_saved_articles_tab, container, false);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
|
||||||
import net.osmand.plus.wikipedia.WikiArticleHelper;
|
import net.osmand.plus.wikipedia.WikiArticleHelper;
|
||||||
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
|
import net.osmand.plus.wikivoyage.article.WikivoyageArticleDialogFragment;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.plus.wikivoyage.search.WikivoyageSearchDialogFragment;
|
import net.osmand.plus.wikivoyage.search.WikivoyageSearchDialogFragment;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ public class WikivoyageExploreActivity extends TabActivity implements DownloadEv
|
||||||
String title = WikiArticleHelper.decodeTitleFromTravelUrl(data.getQueryParameter("title"));
|
String title = WikiArticleHelper.decodeTitleFromTravelUrl(data.getQueryParameter("title"));
|
||||||
String selectedLang = data.getQueryParameter("lang");
|
String selectedLang = data.getQueryParameter("lang");
|
||||||
if (!Algorithms.isEmpty(title) && !Algorithms.isEmpty(selectedLang)) {
|
if (!Algorithms.isEmpty(title) && !Algorithms.isEmpty(selectedLang)) {
|
||||||
long articleId = app.getTravelDbHelper().getArticleId(title, selectedLang);
|
long articleId = app.getTravelHelper().getArticleId(title, selectedLang);
|
||||||
if (articleId != 0) {
|
if (articleId != 0) {
|
||||||
WikivoyageArticleDialogFragment.showInstance(app, getSupportFragmentManager(), articleId, selectedLang);
|
WikivoyageArticleDialogFragment.showInstance(app, getSupportFragmentManager(), articleId, selectedLang);
|
||||||
}
|
}
|
||||||
|
@ -333,7 +333,7 @@ public class WikivoyageExploreActivity extends TabActivity implements DownloadEv
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSearchBarVisibility() {
|
private void updateSearchBarVisibility() {
|
||||||
boolean show = app.getTravelDbHelper().getSelectedTravelBook() != null;
|
boolean show = app.getTravelHelper().getSelectedTravelBook() != null;
|
||||||
findViewById(R.id.search_box).setVisibility(show ? View.VISIBLE : View.GONE);
|
findViewById(R.id.search_box).setVisibility(show ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,16 +361,16 @@ public class WikivoyageExploreActivity extends TabActivity implements DownloadEv
|
||||||
private static class LoadWikivoyageData extends AsyncTask<Void, Void, Void> {
|
private static class LoadWikivoyageData extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
private WeakReference<WikivoyageExploreActivity> activityRef;
|
private WeakReference<WikivoyageExploreActivity> activityRef;
|
||||||
private TravelDbHelper travelDbHelper;
|
private TravelHelper travelHelper;
|
||||||
|
|
||||||
LoadWikivoyageData(WikivoyageExploreActivity activity) {
|
LoadWikivoyageData(WikivoyageExploreActivity activity) {
|
||||||
travelDbHelper = activity.getMyApplication().getTravelDbHelper();
|
travelHelper = activity.getMyApplication().getTravelHelper();
|
||||||
activityRef = new WeakReference<>(activity);
|
activityRef = new WeakReference<>(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
travelDbHelper.loadDataForSelectedTravelBook();
|
travelHelper.loadDataForSelectedTravelBook();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerHalfItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerHalfItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelHelper;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -45,13 +46,13 @@ public class WikivoyageOptionsBottomSheetDialogFragment extends MenuBottomSheetD
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final CommonPreference<WikiArticleShowImages> showImagesPref = app.getSettings().WIKI_ARTICLE_SHOW_IMAGES;
|
final CommonPreference<WikiArticleShowImages> showImagesPref = app.getSettings().WIKI_ARTICLE_SHOW_IMAGES;
|
||||||
final TravelDbHelper dbHelper = app.getTravelDbHelper();
|
final TravelHelper travelHelper = app.getTravelHelper();
|
||||||
|
|
||||||
items.add(new TitleItem(getString(R.string.shared_string_options)));
|
items.add(new TitleItem(getString(R.string.shared_string_options)));
|
||||||
|
|
||||||
if (dbHelper.getExistingTravelBooks().size() > 1) {
|
if (travelHelper.getExistingTravelBooks().size() > 1) {
|
||||||
BaseBottomSheetItem selectTravelBook = new BottomSheetItemWithDescription.Builder()
|
BaseBottomSheetItem selectTravelBook = new BottomSheetItemWithDescription.Builder()
|
||||||
.setDescription(dbHelper.formatTravelBookName(dbHelper.getSelectedTravelBook()))
|
.setDescription(travelHelper.formatTravelBookName(travelHelper.getSelectedTravelBook()))
|
||||||
.setDescriptionColorId(nightMode ? R.color.wikivoyage_active_dark : R.color.wikivoyage_active_light)
|
.setDescriptionColorId(nightMode ? R.color.wikivoyage_active_dark : R.color.wikivoyage_active_light)
|
||||||
.setIcon(getContentIcon(R.drawable.ic_action_travel))
|
.setIcon(getContentIcon(R.drawable.ic_action_travel))
|
||||||
.setTitle(getString(R.string.shared_string_travel_book))
|
.setTitle(getString(R.string.shared_string_travel_book))
|
||||||
|
@ -125,7 +126,7 @@ public class WikivoyageOptionsBottomSheetDialogFragment extends MenuBottomSheetD
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
OsmandApplication app = getMyApplication();
|
OsmandApplication app = getMyApplication();
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
TravelLocalDataHelper ldh = app.getTravelDbHelper().getLocalDataHelper();
|
TravelLocalDataHelper ldh = app.getTravelHelper().getLocalDataHelper();
|
||||||
ldh.clearHistory();
|
ldh.clearHistory();
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
|
@ -149,11 +150,11 @@ public class WikivoyageOptionsBottomSheetDialogFragment extends MenuBottomSheetD
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final TravelDbHelper dbHelper = app.getTravelDbHelper();
|
final TravelHelper travelHelper = app.getTravelHelper();
|
||||||
final List<File> list = dbHelper.getExistingTravelBooks();
|
final List<File> list = travelHelper.getExistingTravelBooks();
|
||||||
String[] ls = new String[list.size()];
|
String[] ls = new String[list.size()];
|
||||||
for (int i = 0; i < ls.length; i++) {
|
for (int i = 0; i < ls.length; i++) {
|
||||||
ls[i] = dbHelper.formatTravelBookName(list.get(i));
|
ls[i] = travelHelper.formatTravelBookName(list.get(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
new AlertDialog.Builder(ctx)
|
new AlertDialog.Builder(ctx)
|
||||||
|
@ -161,7 +162,7 @@ public class WikivoyageOptionsBottomSheetDialogFragment extends MenuBottomSheetD
|
||||||
.setItems(ls, new OnClickListener() {
|
.setItems(ls, new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
dbHelper.selectTravelBook(list.get(which));
|
travelHelper.selectTravelBook(list.get(which));
|
||||||
sendResult(TRAVEL_BOOK_CHANGED);
|
sendResult(TRAVEL_BOOK_CHANGED);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class ArticleTravelCard extends BaseTravelCard {
|
||||||
|
|
||||||
private void updateSaveButton(final ArticleTravelVH holder) {
|
private void updateSaveButton(final ArticleTravelVH holder) {
|
||||||
if (article != null) {
|
if (article != null) {
|
||||||
final TravelLocalDataHelper helper = app.getTravelDbHelper().getLocalDataHelper();
|
final TravelLocalDataHelper helper = app.getTravelHelper().getLocalDataHelper();
|
||||||
final boolean saved = helper.isArticleSaved(article);
|
final boolean saved = helper.isArticleSaved(article);
|
||||||
Drawable icon = getActiveIcon(saved ? R.drawable.ic_action_read_later_fill : R.drawable.ic_action_read_later);
|
Drawable icon = getActiveIcon(saved ? R.drawable.ic_action_read_later_fill : R.drawable.ic_action_read_later);
|
||||||
holder.rightButton.setText(saved ? R.string.shared_string_remove : R.string.shared_string_bookmark);
|
holder.rightButton.setText(saved ? R.string.shared_string_remove : R.string.shared_string_bookmark);
|
||||||
|
@ -103,7 +103,7 @@ public class ArticleTravelCard extends BaseTravelCard {
|
||||||
if (saved) {
|
if (saved) {
|
||||||
helper.removeArticleFromSaved(article);
|
helper.removeArticleFromSaved(article);
|
||||||
} else {
|
} else {
|
||||||
app.getTravelDbHelper().createGpxFile(article);
|
app.getTravelHelper().createGpxFile(article);
|
||||||
helper.addArticleToSaved(article);
|
helper.addArticleToSaved(article);
|
||||||
}
|
}
|
||||||
updateSaveButton(holder);
|
updateSaveButton(holder);
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class WikivoyageWptPtMenuController extends WptPtMenuController {
|
||||||
String title = metadata != null ? metadata.getArticleTitle() : null;
|
String title = metadata != null ? metadata.getArticleTitle() : null;
|
||||||
String lang = metadata != null ? metadata.getArticleLang() : null;
|
String lang = metadata != null ? metadata.getArticleLang() : null;
|
||||||
if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(lang)) {
|
if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(lang)) {
|
||||||
return mapActivity.getMyApplication().getTravelDbHelper().getArticle(title, lang);
|
return mapActivity.getMyApplication().getTravelHelper().getArticle(title, lang);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,7 +151,7 @@ public class WikivoyageSearchDialogFragment extends WikiBaseDialogFragment {
|
||||||
|
|
||||||
private void setAdapterItems(@Nullable List<WikivoyageSearchResult> items) {
|
private void setAdapterItems(@Nullable List<WikivoyageSearchResult> items) {
|
||||||
if (items == null || items.isEmpty()) {
|
if (items == null || items.isEmpty()) {
|
||||||
TravelLocalDataHelper ldh = getMyApplication().getTravelDbHelper().getLocalDataHelper();
|
TravelLocalDataHelper ldh = getMyApplication().getTravelHelper().getLocalDataHelper();
|
||||||
adapter.setHistoryItems(ldh.getAllHistory());
|
adapter.setHistoryItems(ldh.getAllHistory());
|
||||||
} else {
|
} else {
|
||||||
adapter.setItems(items);
|
adapter.setItems(items);
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class WikivoyageSearchHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isCancelled()) {
|
if (!isCancelled()) {
|
||||||
List<WikivoyageSearchResult> results = application.getTravelDbHelper().search(query);
|
List<WikivoyageSearchResult> results = application.getTravelHelper().search(query);
|
||||||
if (!isCancelled()) {
|
if (!isCancelled()) {
|
||||||
rm.publish(results);
|
rm.publish(results);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue