Merge remote-tracking branch 'origin/master' into trip_recording_process
# Conflicts: # OsmAnd/res/values/strings.xml # OsmAnd/src/net/osmand/plus/track/GpxBlockStatisticsBuilder.java
This commit is contained in:
commit
7f395a612a
93 changed files with 1457 additions and 680 deletions
|
@ -25,6 +25,24 @@ public class ALocation extends AidlParams {
|
||||||
private ALocation() {
|
private ALocation() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ALocation(double latitude, double longitude, long time, boolean hasAltitude, double altitude,
|
||||||
|
boolean hasSpeed, float speed, boolean hasBearing, float bearing,
|
||||||
|
boolean hasAccuracy, float accuracy, boolean hasVerticalAccuracy, float verticalAccuracy) {
|
||||||
|
this.latitude = latitude;
|
||||||
|
this.longitude = longitude;
|
||||||
|
this.time = time;
|
||||||
|
this.hasAltitude = hasAltitude;
|
||||||
|
this.altitude = altitude;
|
||||||
|
this.hasSpeed = hasSpeed;
|
||||||
|
this.speed = speed;
|
||||||
|
this.hasBearing = hasBearing;
|
||||||
|
this.bearing = bearing;
|
||||||
|
this.hasAccuracy = hasAccuracy;
|
||||||
|
this.accuracy = accuracy;
|
||||||
|
this.hasVerticalAccuracy = hasVerticalAccuracy;
|
||||||
|
this.verticalAccuracy = verticalAccuracy;
|
||||||
|
}
|
||||||
|
|
||||||
public ALocation(Parcel in) {
|
public ALocation(Parcel in) {
|
||||||
readFromParcel(in);
|
readFromParcel(in);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1255,6 +1255,10 @@ public class GPXUtilities {
|
||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean containsRoutePoint(WptPt point) {
|
||||||
|
return getRoutePoints().contains(point);
|
||||||
|
}
|
||||||
|
|
||||||
public List<WptPt> getRoutePoints() {
|
public List<WptPt> getRoutePoints() {
|
||||||
List<WptPt> points = new ArrayList<>();
|
List<WptPt> points = new ArrayList<>();
|
||||||
for (int i = 0; i < routes.size(); i++) {
|
for (int i = 0; i < routes.size(); i++) {
|
||||||
|
|
|
@ -1,17 +1,32 @@
|
||||||
package net.osmand.osm;
|
package net.osmand.osm;
|
||||||
|
|
||||||
public enum RouteActivityType {
|
import java.util.ArrayList;
|
||||||
WATER("Water", "yellow"), WINTER("Winter", "yellow"), SNOWMOBILE("Snowmobile", "yellow"), RIDING("Riding", "yellow"), RACING("Racing", "yellow"),
|
import java.util.List;
|
||||||
MOUNTAINBIKE("Mountainbike", "blue"), CYCLING("Cycling", "blue"),
|
|
||||||
HIKING("Hiking", "orange"), RUNNING("Running", "orange"), WALKING("Walking", "orange"),
|
|
||||||
OFFROAD("Off-road", "yellow"),
|
|
||||||
MOTORBIKE("Motorbike", "green"), CAR("Car", "green");
|
|
||||||
// less specific bottom order
|
|
||||||
|
|
||||||
|
public class RouteActivityType {
|
||||||
|
private static final List<RouteActivityType> values = new ArrayList<>();
|
||||||
|
public static final String DEFAULT_ICON = "special_marker";
|
||||||
|
public static final String DEFAULT_COLOR = "orange";
|
||||||
|
|
||||||
|
public static final RouteActivityType WATER = createType("water", "yellow").icon("special_kayak").reg();
|
||||||
|
public static final RouteActivityType WINTER = createType("winter", "yellow").icon("special_skiing").reg();
|
||||||
|
public static final RouteActivityType SNOWMOBILE = createType("snowmobile", "yellow").icon("special_snowmobile").reg();
|
||||||
|
public static final RouteActivityType RIDING = createType("riding", "yellow").icon("special_horse").reg();
|
||||||
|
public static final RouteActivityType RACING = createType("racing", "yellow").icon("raceway").reg();
|
||||||
|
public static final RouteActivityType MOUNTAINBIKE = createType("mountainbike", "blue").icon("sport_cycling").reg();
|
||||||
|
public static final RouteActivityType CYCLING = createType("cycling", "blue").icon("special_bicycle").reg();
|
||||||
|
public static final RouteActivityType HIKING = createType("hiking", "orange").icon("special_trekking").reg();
|
||||||
|
public static final RouteActivityType RUNNING = createType("running", "orange").icon("running").reg();
|
||||||
|
public static final RouteActivityType WALKING = createType("walking", "orange").icon("special_walking").reg();
|
||||||
|
public static final RouteActivityType OFFROAD = createType("offroad", "yellow").icon("special_offroad").reg();
|
||||||
|
public static final RouteActivityType MOTORBIKE = createType("motorbike", "green").icon("special_motorcycle").reg();
|
||||||
|
public static final RouteActivityType CAR = createType("car", "green").icon("shop_car").reg();
|
||||||
|
// less specific bottom order
|
||||||
String name;
|
String name;
|
||||||
String color;
|
String color;
|
||||||
|
String icon;
|
||||||
|
|
||||||
private RouteActivityType(String nm, String clr) {
|
RouteActivityType(String nm, String clr) {
|
||||||
this.name = nm;
|
this.name = nm;
|
||||||
this.color = clr;
|
this.color = clr;
|
||||||
}
|
}
|
||||||
|
@ -24,12 +39,31 @@ public enum RouteActivityType {
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RouteActivityType getOrCreateTypeFromName(String name) {
|
||||||
|
for (RouteActivityType rat : values) {
|
||||||
|
if (rat.name.equalsIgnoreCase(name)) {
|
||||||
|
return rat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return createType(name.toLowerCase(), DEFAULT_COLOR).icon(DEFAULT_ICON).reg();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RouteActivityTypeBuilder createType(String name, String color) {
|
||||||
|
RouteActivityTypeBuilder builder = new RouteActivityTypeBuilder();
|
||||||
|
builder.routeActivityType = new RouteActivityType(name, color);
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
public static RouteActivityType getTypeFromTags(String[] tags) {
|
public static RouteActivityType getTypeFromTags(String[] tags) {
|
||||||
RouteActivityType activityType = null;
|
RouteActivityType activityType = null;
|
||||||
for (String tg : tags) {
|
for (String tg : tags) {
|
||||||
RouteActivityType rat = RouteActivityType.convertFromOsmGPXTag(tg);
|
RouteActivityType rat = RouteActivityType.convertFromOsmGPXTag(tg);
|
||||||
if (rat != null) {
|
if (rat != null) {
|
||||||
if (activityType == null || activityType.ordinal() > rat.ordinal()) {
|
if (activityType == null || values.indexOf(activityType) > values.indexOf(rat)) {
|
||||||
activityType = rat;
|
activityType = rat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,4 +249,18 @@ public enum RouteActivityType {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class RouteActivityTypeBuilder {
|
||||||
|
|
||||||
|
private RouteActivityType routeActivityType;
|
||||||
|
|
||||||
|
public RouteActivityTypeBuilder icon(String icon) {
|
||||||
|
routeActivityType.icon = icon;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private RouteActivityType reg() {
|
||||||
|
values.add(routeActivityType);
|
||||||
|
return routeActivityType;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -202,8 +202,6 @@ public class EntityParser {
|
||||||
return amenitiesList;
|
return amenitiesList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static boolean checkAmenitiesToAdd(Amenity a, List<Amenity> amenitiesList){
|
private static boolean checkAmenitiesToAdd(Amenity a, List<Amenity> amenitiesList){
|
||||||
// check amenity for duplication
|
// check amenity for duplication
|
||||||
for(Amenity b : amenitiesList){
|
for(Amenity b : amenitiesList){
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<string name="shared_string_close">Κλείσιμο</string>
|
<string name="shared_string_close">Κλείσιμο</string>
|
||||||
<string name="shared_string_off">Ανενεργό</string>
|
<string name="shared_string_off">Ανενεργό</string>
|
||||||
<string name="shared_string_install">Εγκατάσταση</string>
|
<string name="shared_string_install">Εγκατάσταση</string>
|
||||||
<string name="shared_string_share">Διαμοιρασμός</string>
|
<string name="shared_string_share">Κοινοποίηση</string>
|
||||||
<string name="shared_string_back">Προηγούμενο</string>
|
<string name="shared_string_back">Προηγούμενο</string>
|
||||||
<string name="shared_string_continue">Συνέχεια</string>
|
<string name="shared_string_continue">Συνέχεια</string>
|
||||||
<string name="shared_string_cancel">Ακύρωση</string>
|
<string name="shared_string_cancel">Ακύρωση</string>
|
||||||
|
|
2
OsmAnd/.gitignore
vendored
2
OsmAnd/.gitignore
vendored
|
@ -39,8 +39,6 @@ mx_*
|
||||||
valgrind/
|
valgrind/
|
||||||
bin/
|
bin/
|
||||||
dist/
|
dist/
|
||||||
res/values/no_translate.xml
|
|
||||||
res/values/skip_translate.xml
|
|
||||||
assets/specialphrases/*
|
assets/specialphrases/*
|
||||||
assets/voice/*
|
assets/voice/*
|
||||||
assets/fonts/*
|
assets/fonts/*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:icon="@mipmap/icon_free"
|
android:icon="@mipmap/icon_free"
|
||||||
android:label="@string/app_name_free"
|
android:label="@string/app_name"
|
||||||
tools:replace="android:icon, android:label">
|
tools:replace="android:icon, android:label">
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:icon="@mipmap/icon_free"
|
android:icon="@mipmap/icon_free"
|
||||||
android:label="@string/app_name_free"
|
android:label="OsmAnd — Offline Maps & GPS Navigation"
|
||||||
tools:replace="android:icon, android:label">
|
tools:replace="android:icon, android:label">
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
|
|
|
@ -40,9 +40,6 @@
|
||||||
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
|
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
|
||||||
<uses-feature android:name="com.sec.feature.spen_usp" android:required="false"/>
|
<uses-feature android:name="com.sec.feature.spen_usp" android:required="false"/>
|
||||||
|
|
||||||
<uses-sdk android:targetSdkVersion="26"
|
|
||||||
tools:overrideLibrary="com.getkeepsafe.taptargetview, studio.carbonylgroup.textfieldboxes, android.support.customtabs"/>
|
|
||||||
|
|
||||||
<supports-screens android:resizeable="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true"
|
<supports-screens android:resizeable="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true"
|
||||||
android:xlargeScreens="true" android:anyDensity="true" />
|
android:xlargeScreens="true" android:anyDensity="true" />
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
<application
|
<application
|
||||||
android:icon="@mipmap/icon_nightly"
|
android:icon="@mipmap/icon_nightly"
|
||||||
tools:replace="android:icon">
|
tools:replace="android:icon">
|
||||||
<meta-data
|
|
||||||
android:name="com.facebook.sdk.ApplicationId"
|
|
||||||
android:value="fb792288460976727"/>
|
|
||||||
<activity
|
<activity
|
||||||
android:name="net.osmand.plus.activities.MapActivity"
|
android:name="net.osmand.plus.activities.MapActivity"
|
||||||
android:theme="@style/FirstSplashScreenNightlyFree"
|
android:theme="@style/FirstSplashScreenNightlyFree"
|
||||||
|
|
|
@ -106,15 +106,6 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task updateNoTranslate(type: Copy) {
|
|
||||||
from('.') {
|
|
||||||
include 'no_translate.xml'
|
|
||||||
filter {
|
|
||||||
line -> replaceNoTranslate(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
into 'res/values/'
|
|
||||||
}
|
|
||||||
|
|
||||||
task validateTranslate {
|
task validateTranslate {
|
||||||
println "Validating translations"
|
println "Validating translations"
|
||||||
|
@ -147,10 +138,6 @@ task collectVoiceAssets(type: Sync) {
|
||||||
include "**/*.js"
|
include "**/*.js"
|
||||||
}
|
}
|
||||||
|
|
||||||
task cleanNoTranslate(type: Delete) {
|
|
||||||
delete('res/values/no_translate.xml')
|
|
||||||
}
|
|
||||||
|
|
||||||
task collectFonts(type: Copy) {
|
task collectFonts(type: Copy) {
|
||||||
from "../../resources/fonts"
|
from "../../resources/fonts"
|
||||||
from "../../resources/rendering_styles/fonts"
|
from "../../resources/rendering_styles/fonts"
|
||||||
|
@ -262,7 +249,6 @@ task collectExternalResources {
|
||||||
copyMapShaderIcons,
|
copyMapShaderIcons,
|
||||||
copyMapPOIIcons,
|
copyMapPOIIcons,
|
||||||
copyLargePOIIcons,
|
copyLargePOIIcons,
|
||||||
updateNoTranslate,
|
|
||||||
validateTranslate,
|
validateTranslate,
|
||||||
copyWidgetIcons,
|
copyWidgetIcons,
|
||||||
copyWidgetIconsHdpi,
|
copyWidgetIconsHdpi,
|
||||||
|
|
|
@ -24,14 +24,11 @@ android {
|
||||||
// Build that doesn't include 3D OpenGL
|
// Build that doesn't include 3D OpenGL
|
||||||
legacy {
|
legacy {
|
||||||
dimension "coreversion"
|
dimension "coreversion"
|
||||||
|
resValue "string", "app_edition", ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def replaceNoTranslate(line) {
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
android.libraryVariants.all { variant ->
|
android.libraryVariants.all { variant ->
|
||||||
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
|
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
|
||||||
|
|
|
@ -36,9 +36,9 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
|
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
|
||||||
versionCode 390
|
versionCode 400
|
||||||
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
|
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
|
||||||
versionName "3.9.0"
|
versionName "4.0.0"
|
||||||
versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
|
versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
|
||||||
versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName
|
versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName
|
||||||
}
|
}
|
||||||
|
@ -105,31 +105,45 @@ android {
|
||||||
nightlyFree {
|
nightlyFree {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand.dev"
|
applicationId "net.osmand.dev"
|
||||||
|
resValue "string", "app_name", "OsmAnd Nightly"
|
||||||
|
resValue "string", "app_edition", System.getenv("APP_EDITION") ? System.getenv("APP_EDITION") : ""
|
||||||
// resConfig "en"
|
// resConfig "en"
|
||||||
}
|
}
|
||||||
androidFull {
|
androidFull {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand.plus"
|
applicationId "net.osmand.plus"
|
||||||
|
resValue "string", "app_name", "OsmAnd~"
|
||||||
|
resValue "string", "app_edition", System.getenv("APP_EDITION") ? System.getenv("APP_EDITION") : ""
|
||||||
}
|
}
|
||||||
gplayFree {
|
gplayFree {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand"
|
applicationId "net.osmand"
|
||||||
|
resValue "string", "app_name", "OsmAnd"
|
||||||
|
resValue "string", "app_edition", System.getenv("APP_EDITION") ? System.getenv("APP_EDITION") : ""
|
||||||
}
|
}
|
||||||
gplayFull {
|
gplayFull {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand.plus"
|
applicationId "net.osmand.plus"
|
||||||
|
resValue "string", "app_name", "OsmAnd+"
|
||||||
|
resValue "string", "app_edition", System.getenv("APP_EDITION") ? System.getenv("APP_EDITION") : ""
|
||||||
}
|
}
|
||||||
amazonFree {
|
amazonFree {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand"
|
applicationId "net.osmand"
|
||||||
|
resValue "string", "app_name", "OsmAnd"
|
||||||
|
resValue "string", "app_edition", ""
|
||||||
}
|
}
|
||||||
amazonFull {
|
amazonFull {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand.plus"
|
applicationId "net.osmand.plus"
|
||||||
|
resValue "string", "app_name", "OsmAnd+"
|
||||||
|
resValue "string", "app_edition", ""
|
||||||
}
|
}
|
||||||
huawei {
|
huawei {
|
||||||
dimension "version"
|
dimension "version"
|
||||||
applicationId "net.osmand.huawei"
|
applicationId "net.osmand.huawei"
|
||||||
|
resValue "string", "app_name", "OsmAnd"
|
||||||
|
resValue "string", "app_edition", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build that includes 3D OpenGL release
|
// Build that includes 3D OpenGL release
|
||||||
|
@ -153,19 +167,6 @@ android {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def replaceNoTranslate(line) {
|
|
||||||
if (line.contains("\"app_name\"") && System.getenv("TARGET_APP_NAME")) {
|
|
||||||
return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<")
|
|
||||||
}
|
|
||||||
if (line.contains("\"app_name_free\"") && System.getenv("TARGET_APP_NAME")) {
|
|
||||||
return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<")
|
|
||||||
}
|
|
||||||
if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) {
|
|
||||||
return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<")
|
|
||||||
}
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
|
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
|
||||||
|
|
8
OsmAnd/res/drawable/bottom_navigation_item_bg_dark.xml
Normal file
8
OsmAnd/res/drawable/bottom_navigation_item_bg_dark.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item android:drawable="@color/wikivoyage_card_bg_dark" android:state_selected="false" />
|
||||||
|
|
||||||
|
<item android:drawable="@drawable/navigation_item_active_bg_dark" android:state_selected="true" />
|
||||||
|
|
||||||
|
</selector>
|
8
OsmAnd/res/drawable/bottom_navigation_item_bg_light.xml
Normal file
8
OsmAnd/res/drawable/bottom_navigation_item_bg_light.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item android:drawable="@color/wikivoyage_card_bg_light" android:state_selected="false" />
|
||||||
|
|
||||||
|
<item android:drawable="@drawable/navigation_item_active_bg_light" android:state_selected="true" />
|
||||||
|
|
||||||
|
</selector>
|
15
OsmAnd/res/drawable/navigation_item_active_bg_dark.xml
Normal file
15
OsmAnd/res/drawable/navigation_item_active_bg_dark.xml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/active_color_primary_dark" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item android:top="2dp">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/wikivoyage_card_bg_dark" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</layer-list>
|
15
OsmAnd/res/drawable/navigation_item_active_bg_light.xml
Normal file
15
OsmAnd/res/drawable/navigation_item_active_bg_light.xml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/active_color_primary_light" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item android:top="2dp">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/wikivoyage_card_bg_light" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
</layer-list>
|
|
@ -6,6 +6,22 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:letterSpacing="@dimen/description_letter_spacing"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:minHeight="@dimen/default_desc_line_height"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:lineHeight="@dimen/default_desc_line_height"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="Amsterdam is the Netherlands' capital and financial, cultural and creative centre with more" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/recycler_overview"
|
android:id="@+id/recycler_overview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
android:layout_marginRight="@dimen/dialog_content_margin"
|
android:layout_marginRight="@dimen/dialog_content_margin"
|
||||||
android:layout_marginEnd="@dimen/dialog_content_margin"
|
android:layout_marginEnd="@dimen/dialog_content_margin"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
|
android:scrollbars="none"
|
||||||
android:focusableInTouchMode="false" />
|
android:focusableInTouchMode="false" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
|
|
@ -125,6 +125,49 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/back_button_container"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:background="?attr/flow_toolbar_bg"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/setting_list_item_small_height"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingStart="@dimen/content_padding_half"
|
||||||
|
android:paddingLeft="@dimen/content_padding_half"
|
||||||
|
android:paddingEnd="@dimen/content_padding_small"
|
||||||
|
android:paddingRight="@dimen/content_padding_small">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/back_button_icon"
|
||||||
|
android:layout_width="@dimen/standard_icon_size"
|
||||||
|
android:layout_height="@dimen/standard_icon_size"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:tint="?attr/active_color_basic"
|
||||||
|
osmand:srcCompat="@drawable/ic_arrow_back" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/back_button_text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="@string/shared_string_tracks" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:id="@+id/context_menu_toolbar_container"
|
android:id="@+id/context_menu_toolbar_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -206,7 +249,7 @@
|
||||||
android:layout_height="@dimen/context_menu_action_buttons_height"
|
android:layout_height="@dimen/context_menu_action_buttons_height"
|
||||||
android:layout_gravity="bottom"
|
android:layout_gravity="bottom"
|
||||||
android:background="?attr/wikivoyage_card_bg_color"
|
android:background="?attr/wikivoyage_card_bg_color"
|
||||||
osmand:itemBackground="?attr/wikivoyage_card_bg_color"
|
osmand:itemBackground="?attr/bottom_navigation_item_background"
|
||||||
osmand:itemIconTint="@color/bottom_navigation_color_selector_light"
|
osmand:itemIconTint="@color/bottom_navigation_color_selector_light"
|
||||||
osmand:itemTextColor="@color/bottom_navigation_color_selector_light"
|
osmand:itemTextColor="@color/bottom_navigation_color_selector_light"
|
||||||
osmand:labelVisibilityMode="labeled"
|
osmand:labelVisibilityMode="labeled"
|
||||||
|
|
|
@ -139,31 +139,83 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
|
||||||
android:paddingTop="@dimen/content_padding_half"
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
android:paddingBottom="@dimen/content_padding_small">
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/user_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/btn_border_bg"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/user_icon"
|
||||||
|
android:layout_width="@dimen/poi_icon_size"
|
||||||
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||||
|
android:contentDescription="@string/shared_string_icon"
|
||||||
|
tools:src="@drawable/ic_action_user_account_16" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/user_name"
|
android:id="@+id/user_name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/btn_border_bg_light"
|
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:paddingTop="@dimen/subHeaderPadding"
|
android:paddingTop="@dimen/subHeaderPadding"
|
||||||
android:paddingBottom="@dimen/subHeaderPadding"
|
android:paddingBottom="@dimen/subHeaderPadding"
|
||||||
android:paddingLeft="@dimen/bottom_sheet_content_padding_small"
|
android:paddingLeft="@dimen/content_padding_small_half"
|
||||||
android:paddingRight="@dimen/bottom_sheet_content_padding_small"
|
android:paddingRight="@dimen/content_padding_small_half"
|
||||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
android:textColor="?attr/active_color_basic"
|
android:textColor="?attr/active_color_basic"
|
||||||
android:textSize="@dimen/default_desc_text_size"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
android:drawablePadding="@dimen/content_padding_small_half"
|
|
||||||
android:drawableStart="@drawable/ic_action_user_account_16"
|
|
||||||
android:drawableLeft="@drawable/ic_action_user_account_16"
|
|
||||||
tools:drawableTint="?attr/wikivoyage_active_color"
|
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||||
tools:text="Lorem Ipsum" />
|
tools:text="@string/mapillary_menu_title_username" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/activity_type_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/btn_border_bg"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/activity_type_icon"
|
||||||
|
android:layout_width="@dimen/poi_icon_size"
|
||||||
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||||
|
android:contentDescription="@string/shared_string_icon"
|
||||||
|
tools:src="@drawable/ic_action_bicycle_dark" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/activity_type"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingTop="@dimen/subHeaderPadding"
|
||||||
|
android:paddingBottom="@dimen/subHeaderPadding"
|
||||||
|
android:paddingLeft="@dimen/content_padding_small_half"
|
||||||
|
android:paddingRight="@dimen/content_padding_small_half"
|
||||||
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
tools:text="@string/shared_string_profiles" />
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -172,7 +224,6 @@
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:visibility="invisible"
|
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="?attr/wikivoyage_card_divider_color" />
|
android:background="?attr/wikivoyage_card_divider_color" />
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
|
android:scrollbars="none"
|
||||||
android:textColor="@color/wikivoyage_secondary_text"
|
android:textColor="@color/wikivoyage_secondary_text"
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
android:textSize="@dimen/default_sub_text_size"
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
|
|
@ -359,7 +359,7 @@
|
||||||
<string name="osmand_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
<string name="osmand_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
||||||
<string name="osmand_plus_play_title_30_chars">أوسماند+ للخرائط و الملاحة</string>
|
<string name="osmand_plus_play_title_30_chars">أوسماند+ للخرائط و الملاحة</string>
|
||||||
<string name="osmand_plus_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
<string name="osmand_plus_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
||||||
<string name="filterpoi_activity">أنشئ مُرشِّح نقاط مهمة</string>
|
<string name="filterpoi_activity">إنشاء فلتر نقاط الاهتمام</string>
|
||||||
<string name="recalculate_route_to_your_location">نمط المواصلات:</string>
|
<string name="recalculate_route_to_your_location">نمط المواصلات:</string>
|
||||||
<string name="select_navigation_mode">وسائل النقل:</string>
|
<string name="select_navigation_mode">وسائل النقل:</string>
|
||||||
<string name="day_night_info_description">الشروق: %1$s
|
<string name="day_night_info_description">الشروق: %1$s
|
||||||
|
@ -1830,7 +1830,7 @@
|
||||||
<string name="osm_edit_commented_note">ملاحظة OSM معلق عليها</string>
|
<string name="osm_edit_commented_note">ملاحظة OSM معلق عليها</string>
|
||||||
<string name="rendering_attr_pisteGrooming_name">مسار زلق</string>
|
<string name="rendering_attr_pisteGrooming_name">مسار زلق</string>
|
||||||
<string name="world_ski_missing">لإظهار خرائط التزلج، يجب تحميل خريطة خاصة محلية.</string>
|
<string name="world_ski_missing">لإظهار خرائط التزلج، يجب تحميل خريطة خاصة محلية.</string>
|
||||||
<string name="rendering_attr_publicTransportMode_name">حافلة، ترامواي وغيرها</string>
|
<string name="rendering_attr_publicTransportMode_name">حافلة، عربة وغيرها</string>
|
||||||
<string name="osm_edit_created_note">إنشاء ملاحظة OSM</string>
|
<string name="osm_edit_created_note">إنشاء ملاحظة OSM</string>
|
||||||
<string name="osn_add_dialog_error">حدث استثناء: لم يتم إنشاء الملاحظة.</string>
|
<string name="osn_add_dialog_error">حدث استثناء: لم يتم إنشاء الملاحظة.</string>
|
||||||
<string name="osn_close_dialog_error">حدث استثناء: لم يتم غلق الملاحظة.</string>
|
<string name="osn_close_dialog_error">حدث استثناء: لم يتم غلق الملاحظة.</string>
|
||||||
|
@ -1962,8 +1962,7 @@
|
||||||
\nليست هناك حاجة لتحميل خريطة خاصة،الرؤية يتم إنشاؤها من خلال خرائطنا المحلية.
|
\nليست هناك حاجة لتحميل خريطة خاصة،الرؤية يتم إنشاؤها من خلال خرائطنا المحلية.
|
||||||
\n
|
\n
|
||||||
\nهذه الرؤية يمكن التراجع عنها إما عن طريق تعطيلها هنا، أو تغيير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة.</string>
|
\nهذه الرؤية يمكن التراجع عنها إما عن طريق تعطيلها هنا، أو تغيير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة.</string>
|
||||||
<string name="create_poi_link_to_osm_doc">
|
<string name="create_poi_link_to_osm_doc"><u>Online OSM</u> تصنيف الخريطة مع الصور.</string>
|
||||||
<u>Online OSM</u> تصنيف الخريطة مع الصور.</string>
|
|
||||||
<string name="background_service_wait_int_descr">تعيين الحد الأقصى لوقت الانتظار لكل إصلاح موقع في الخلفية.</string>
|
<string name="background_service_wait_int_descr">تعيين الحد الأقصى لوقت الانتظار لكل إصلاح موقع في الخلفية.</string>
|
||||||
<string name="background_service_wait_int">الانتظار الأقصى للإصلاح</string>
|
<string name="background_service_wait_int">الانتظار الأقصى للإصلاح</string>
|
||||||
<string name="voice_data_not_supported">إصدار غير معتمد من البيانات الصوتية</string>
|
<string name="voice_data_not_supported">إصدار غير معتمد من البيانات الصوتية</string>
|
||||||
|
@ -2072,7 +2071,7 @@
|
||||||
<string name="rendering_value_fine_name">اللون والسمك</string>
|
<string name="rendering_value_fine_name">اللون والسمك</string>
|
||||||
<string name="route_roundabout_short">خذ المخرج %1$d ثم واصل</string>
|
<string name="route_roundabout_short">خذ المخرج %1$d ثم واصل</string>
|
||||||
<string name="search_map_hint">المدينة أو المنطقة</string>
|
<string name="search_map_hint">المدينة أو المنطقة</string>
|
||||||
<string name="wiki_around">مقالات ويكيبيديا قريبة</string>
|
<string name="wiki_around">مقالات ويكيبيديا القريبة</string>
|
||||||
<string name="routing_attr_allow_motorway_name">استخدام الطرق السريعة</string>
|
<string name="routing_attr_allow_motorway_name">استخدام الطرق السريعة</string>
|
||||||
<string name="routing_attr_allow_motorway_description">السماح للطرق السريعة.</string>
|
<string name="routing_attr_allow_motorway_description">السماح للطرق السريعة.</string>
|
||||||
<string name="lang_sr_latn">الصربية (اللاتينية)</string>
|
<string name="lang_sr_latn">الصربية (اللاتينية)</string>
|
||||||
|
@ -2219,18 +2218,19 @@
|
||||||
<string name="select_gpx_folder">حدد مجلد المسار</string>
|
<string name="select_gpx_folder">حدد مجلد المسار</string>
|
||||||
<string name="shared_string_gpx_tracks">المسارات</string>
|
<string name="shared_string_gpx_tracks">المسارات</string>
|
||||||
<string name="shared_string_time">الوقت</string>
|
<string name="shared_string_time">الوقت</string>
|
||||||
<string name="osmand_plus_extended_description_part8">التغطية التقريبية للخريطة و جودتها :
|
<string name="osmand_plus_extended_description_part8">التغطية التقريبية للخريطة و جودتها:
|
||||||
\n• أوروبا الغربية : ****
|
\n • أوروبا الغربية: ****
|
||||||
\n• أوروبا الشرقية : ***
|
\n • أوروبا الشرقية: ***
|
||||||
\n• روسيا : ***
|
\n • روسيا: ***
|
||||||
\n• أمريكا الشمالية : ***
|
\n • أمريكا الشمالية: ***
|
||||||
\n• امريكا الجنوبية : **
|
\n • امريكا الجنوبية: **
|
||||||
\n• آسيا : **
|
\n • آسيا: **
|
||||||
\n• اليابان وكوريا : ***
|
\n • اليابان وكوريا: ***
|
||||||
\n• الشرق الأوسط : **
|
\n • الشرق الأوسط : **
|
||||||
\n• إفريقيا : **
|
\n • إفريقيا: **
|
||||||
\n• أنتاركتيكا : *
|
\n • أنتاركتيكا: *
|
||||||
\n معظم البلدان في جميع أنحاء العالم متاحة للتنزيل ! من أفغانستان إلى زيمبابوي، من أستراليا إلى الولايات المتحدة الأمريكية. الأرجنتين، البرازيل، كندا، فرنسا، ألمانيا، المكسيك، المملكة المتحدة، إسبانيا
|
\n معظم البلدان في جميع أنحاء العالم متاحة للتنزيل
|
||||||
|
\n من أفغانستان إلى زيمبابوي، من أستراليا إلى الولايات المتحدة الأمريكية. الأرجنتين، البرازيل، كندا، فرنسا، ألمانيا، المكسيك، المملكة المتحدة، أسبانيا , …
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="restart_search">إعادة البحث</string>
|
<string name="restart_search">إعادة البحث</string>
|
||||||
<string name="osmand_extended_description_part7">المساهمة في OSM
|
<string name="osmand_extended_description_part7">المساهمة في OSM
|
||||||
|
@ -2372,12 +2372,13 @@
|
||||||
\n
|
\n
|
||||||
\n بعض الميزات الرئيسية:</string>
|
\n بعض الميزات الرئيسية:</string>
|
||||||
<string name="osmand_plus_extended_description_part2">الملاحة
|
<string name="osmand_plus_extended_description_part2">الملاحة
|
||||||
\n• يعمل على الإنترنت (سريع) أو في وضع غير متصل (لا رسوم تجوال خارج الوطن)
|
\n • يعمل على الإنترنت (سريع) أو في وضع غير متصل (لا رسوم تجوال خارج الوطن)
|
||||||
\n• توجيه صوتي بالتفصيل (الأصوات المسجلة أو مدرجة)
|
\n • توجيه صوتي بالتفصيل (الأصوات المسجلة أو مدرجة)
|
||||||
\n• موجه مسار اختياري، عرض اسم الشارع، والوقت المقدر للوصول
|
\n • موجه مسار اختياري، عرض اسم الشارع، والوقت المقدر للوصول
|
||||||
\n• يدعم نقاط وسيطة خلال مسارك
|
\n • يدعم نقاط وسيطة خلال مسارك
|
||||||
\n• إعادة تلقائية للتوجيه كلما انحرفت عن الطريق
|
\n • إعادة تلقائية للتوجيه كلما انحرفت عن الطريق
|
||||||
\n• البحث عن الأماكن حسب العنوان، النوع (مثل: مطعم، فندق، محطة وقود، متحف)،أو حسب الإحداثيات الجغرافية</string>
|
\n • البحث عن الأماكن حسب العنوان، النوع (مثل: مطعم، فندق، محطة وقود، متحف)،أو حسب الإحداثيات الجغرافية
|
||||||
|
\n</string>
|
||||||
<string name="osmand_plus_extended_description_part3">عرض الخريطة
|
<string name="osmand_plus_extended_description_part3">عرض الخريطة
|
||||||
\n• عرض موقعك والتوجيه
|
\n• عرض موقعك والتوجيه
|
||||||
\n• محاذاة اختيارية للصورة وفق البوصلة أو توجيه الحركة
|
\n• محاذاة اختيارية للصورة وفق البوصلة أو توجيه الحركة
|
||||||
|
@ -2418,7 +2419,8 @@
|
||||||
<string name="quick_action_duplicates">اسم الاختصار السريع المحدد قيد الاستخدام، لقد تم تغييره إلى %1$s لتجنب التكرار.</string>
|
<string name="quick_action_duplicates">اسم الاختصار السريع المحدد قيد الاستخدام، لقد تم تغييره إلى %1$s لتجنب التكرار.</string>
|
||||||
<string name="quick_action_page_list_descr">الضغط على زر الإجراء سيطبق أحد الأنماط من القائمة أدناه.</string>
|
<string name="quick_action_page_list_descr">الضغط على زر الإجراء سيطبق أحد الأنماط من القائمة أدناه.</string>
|
||||||
<string name="route_points_category_name">تنقلاتك على هذا الطريق</string>
|
<string name="route_points_category_name">تنقلاتك على هذا الطريق</string>
|
||||||
<string name="navigate_point_olc_info_area">OLC الصالحة بالكامل\nتمثل المنطقة: %1$s x %2$s</string>
|
<string name="navigate_point_olc_info_area">الصالحة بالكامل OLC
|
||||||
|
\nيمثل المنطقة: %1$s x %2$s</string>
|
||||||
<string name="wrong_user_name">اسم المستخدم خاطئ</string>
|
<string name="wrong_user_name">اسم المستخدم خاطئ</string>
|
||||||
<string name="shared_string_to">إلى</string>
|
<string name="shared_string_to">إلى</string>
|
||||||
<string name="mapillary_menu_date_from">مِن</string>
|
<string name="mapillary_menu_date_from">مِن</string>
|
||||||
|
@ -2616,7 +2618,7 @@
|
||||||
<string name="south_abbreviation">ج</string>
|
<string name="south_abbreviation">ج</string>
|
||||||
<string name="north_abbreviation">ش</string>
|
<string name="north_abbreviation">ش</string>
|
||||||
<string name="optional_point_name">اسم النقطة</string>
|
<string name="optional_point_name">اسم النقطة</string>
|
||||||
<string name="transport_nearby_routes_within">الطرق القريبة التي في الداخل</string>
|
<string name="transport_nearby_routes_within">الطرق الداخلية المجاورة</string>
|
||||||
<string name="enter_the_file_name">أدخل اسم الملف.</string>
|
<string name="enter_the_file_name">أدخل اسم الملف.</string>
|
||||||
<string name="map_import_error">خطأ أثناء استرجاع الخريطة</string>
|
<string name="map_import_error">خطأ أثناء استرجاع الخريطة</string>
|
||||||
<string name="map_imported_successfully">تمت عملية استيراد الخريطة</string>
|
<string name="map_imported_successfully">تمت عملية استيراد الخريطة</string>
|
||||||
|
@ -3335,7 +3337,7 @@
|
||||||
<string name="routing_attr_allow_expert_name">السماح بطرق المتخصصين</string>
|
<string name="routing_attr_allow_expert_name">السماح بطرق المتخصصين</string>
|
||||||
<string name="routing_attr_allow_expert_description">طرق صعبة للغاية ، مع عقبات خطيرة والمناطق المحيطة بها.</string>
|
<string name="routing_attr_allow_expert_description">طرق صعبة للغاية ، مع عقبات خطيرة والمناطق المحيطة بها.</string>
|
||||||
<string name="routing_attr_allow_skating_only_name">السماح بالتزلج على الطرق فقط</string>
|
<string name="routing_attr_allow_skating_only_name">السماح بالتزلج على الطرق فقط</string>
|
||||||
<string name="routing_attr_allow_skating_only_description">الطريق مصممة خصيصا بحرية أو التزلج على الجليد.</string>
|
<string name="routing_attr_allow_skating_only_description">طرق مصممة للأسلوب الحر أو التزلج فقط بدون المسارات الكلاسيكية.</string>
|
||||||
<string name="routing_attr_allow_classic_only_name">السماح للطرق الكلاسيكية فقط</string>
|
<string name="routing_attr_allow_classic_only_name">السماح للطرق الكلاسيكية فقط</string>
|
||||||
<string name="routing_attr_allow_classic_only_description">تم إعداد الطرق للأسلوب الكلاسيكي فقط دون مسارات التزلج. يشمل ذلك الطرق التي يتم إعدادها بواسطة عربة ثلجية أصغر مع زحلقة مرنة ومسارات مصنوعة يدوياً بواسطة المتزلجين.</string>
|
<string name="routing_attr_allow_classic_only_description">تم إعداد الطرق للأسلوب الكلاسيكي فقط دون مسارات التزلج. يشمل ذلك الطرق التي يتم إعدادها بواسطة عربة ثلجية أصغر مع زحلقة مرنة ومسارات مصنوعة يدوياً بواسطة المتزلجين.</string>
|
||||||
<string name="routing_attr_difficulty_preference_name">الصعوبة المفضلة</string>
|
<string name="routing_attr_difficulty_preference_name">الصعوبة المفضلة</string>
|
||||||
|
@ -3841,7 +3843,7 @@
|
||||||
<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>
|
||||||
<string name="attach_to_the_roads">إرفاق الطرق</string>
|
<string name="attach_to_the_roads">إرفاق بالطرق</string>
|
||||||
<string name="delete_address">حذف عنوان</string>
|
<string name="delete_address">حذف عنوان</string>
|
||||||
<string name="add_address">إضافة عنوان</string>
|
<string name="add_address">إضافة عنوان</string>
|
||||||
<string name="access_hint_enter_address">أدخل العنوان</string>
|
<string name="access_hint_enter_address">أدخل العنوان</string>
|
||||||
|
@ -3864,7 +3866,7 @@
|
||||||
<string name="open_saved_track">فتح المسار المحفوظ</string>
|
<string name="open_saved_track">فتح المسار المحفوظ</string>
|
||||||
<string name="shared_string_is_saved">محفوظ</string>
|
<string name="shared_string_is_saved">محفوظ</string>
|
||||||
<string name="simplified_track">مسار مبسط</string>
|
<string name="simplified_track">مسار مبسط</string>
|
||||||
<string name="simplified_track_description">سيتم حفظ خط التوجيه فقط، وسيتم حذف نقاط الطريق.</string>
|
<string name="simplified_track_description">سيتم حفظ خط الطريق فقط، وسيتم حذف نقاط المسار.</string>
|
||||||
<string name="shared_string_file_name">اسم الملف</string>
|
<string name="shared_string_file_name">اسم الملف</string>
|
||||||
<string name="one_point_error">الرجاء إضافة نقطتين على الأقل.</string>
|
<string name="one_point_error">الرجاء إضافة نقطتين على الأقل.</string>
|
||||||
<string name="shared_string_redo">إعادة</string>
|
<string name="shared_string_redo">إعادة</string>
|
||||||
|
@ -4074,4 +4076,26 @@
|
||||||
<string name="uploading_count">رفع %1$d من %2$d</string>
|
<string name="uploading_count">رفع %1$d من %2$d</string>
|
||||||
<string name="uploaded_count">تم رفع %1$d من %2$d</string>
|
<string name="uploaded_count">تم رفع %1$d من %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">تحديد التعديلات للتحميل</string>
|
<string name="toast_select_edits_for_upload">تحديد التعديلات للتحميل</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">التضاريس / الانحدار / الخطوط المحيطية</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews هو مشروع يحركه المجتمع حول الأماكن العامة مثل المطاعم والفنادق والمتاحف ونقاط الطريق. يقوم بجمع جميع المعلومات العامة المتعلقة بهم مثل الصور والتعليقات والروابط إلى ارتباط الأنظمة الأخرى OpenStreetMap و Wikipedia.
|
||||||
|
\n
|
||||||
|
\nجميع بيانات OpenPlaceReview مفتوحة ومتاحة للجميع: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nيمكنك قراءة المزيد على: http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">استخدام test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">الدخول إلى OpenPlaceReviews</string>
|
||||||
|
<string name="activity_type_water_name">ماء</string>
|
||||||
|
<string name="activity_type_winter_name">شتاء</string>
|
||||||
|
<string name="activity_type_snowmobile_name">الثلج</string>
|
||||||
|
<string name="activity_type_riding_name">ركوب</string>
|
||||||
|
<string name="activity_type_racing_name">سباق</string>
|
||||||
|
<string name="activity_type_mountainbike_name">دراجة جبلية</string>
|
||||||
|
<string name="activity_type_cycling_name">دراجة</string>
|
||||||
|
<string name="activity_type_hiking_name">مشي</string>
|
||||||
|
<string name="activity_type_running_name">الجري</string>
|
||||||
|
<string name="activity_type_walking_name">مشي</string>
|
||||||
|
<string name="activity_type_offroad_name">الطرق الوعرة</string>
|
||||||
|
<string name="activity_type_motorbike_name">دراجة نارية</string>
|
||||||
|
<string name="activity_type_car_name">سيارة</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3601,7 +3601,7 @@
|
||||||
<string name="poi_vehicle_military">Přístup vozidel: vojenské</string>
|
<string name="poi_vehicle_military">Přístup vozidel: vojenské</string>
|
||||||
<string name="poi_vehicle_delivery">Přístup vozidel: zásobování</string>
|
<string name="poi_vehicle_delivery">Přístup vozidel: zásobování</string>
|
||||||
<string name="poi_vehicle_forestry">Přístup vozidel: lesnictví</string>
|
<string name="poi_vehicle_forestry">Přístup vozidel: lesnictví</string>
|
||||||
<string name="poi_motorcar_yes">Přístup aut:</string>
|
<string name="poi_motorcar_yes">Přístup aut: ano</string>
|
||||||
<string name="poi_motorcar_private">Přístup aut: soukromý</string>
|
<string name="poi_motorcar_private">Přístup aut: soukromý</string>
|
||||||
<string name="poi_motorcar_no">Přístup aut: ne</string>
|
<string name="poi_motorcar_no">Přístup aut: ne</string>
|
||||||
<string name="poi_motorcar_destination">Přístup aut: cíl</string>
|
<string name="poi_motorcar_destination">Přístup aut: cíl</string>
|
||||||
|
@ -3835,4 +3835,50 @@
|
||||||
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Neimigrační víza</string>
|
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Neimigrační víza</string>
|
||||||
<string name="poi_consulate_filter">Konzulát</string>
|
<string name="poi_consulate_filter">Konzulát</string>
|
||||||
<string name="poi_embassy_filter">Ambasáda</string>
|
<string name="poi_embassy_filter">Ambasáda</string>
|
||||||
|
<string name="poi_mobile_money_agent">Mobilní směnárna</string>
|
||||||
|
<string name="poi_diplomatic_liaison">Prostředník</string>
|
||||||
|
<string name="poi_liaison_filter">Prostředník</string>
|
||||||
|
<string name="poi_wildlife_crossing_bat_tunnel">Netopýří tunel</string>
|
||||||
|
<string name="poi_wildlife_crossing_bat_bridge">Netopýří most</string>
|
||||||
|
<string name="poi_wildlife_crossing">Ekodukt</string>
|
||||||
|
<string name="poi_swimming_area">Plovárna</string>
|
||||||
|
<string name="poi_lavoir">Veřejná prádelna</string>
|
||||||
|
<string name="poi_waste_transfer_station">Překladiště odpadů</string>
|
||||||
|
<string name="poi_weightbridge">Mostní váha</string>
|
||||||
|
<string name="poi_ranger_station">Stanice rangera</string>
|
||||||
|
<string name="poi_water_source_lake">Jezero</string>
|
||||||
|
<string name="poi_water_source_river">Řeka</string>
|
||||||
|
<string name="poi_water_source_well">Studna</string>
|
||||||
|
<string name="poi_water_source_powered_pump">Poháněné čerpadlo</string>
|
||||||
|
<string name="poi_water_source_water_tank">Vodní nádrž</string>
|
||||||
|
<string name="poi_water_source_tap">Kohoutek</string>
|
||||||
|
<string name="poi_water_source_water_works">Zásobování vodou</string>
|
||||||
|
<string name="poi_water_source_tube_well">Trubková studna</string>
|
||||||
|
<string name="poi_vaccination_covid19">Očkování: COVID19</string>
|
||||||
|
<string name="poi_health_specialty_vaccination_yes">Očkování</string>
|
||||||
|
<string name="poi_lifeguard_base">Záchranářská základna</string>
|
||||||
|
<string name="poi_siren">Siréna</string>
|
||||||
|
<string name="poi_nurse">Zdravotní sestra</string>
|
||||||
|
<string name="poi_diplomatic_services_citizen_services_no">Ne</string>
|
||||||
|
<string name="poi_diplomatic_services_citizen_services_yes">Ano</string>
|
||||||
|
<string name="poi_diplomatic_services_immigrant_visas_no">Ne</string>
|
||||||
|
<string name="poi_diplomatic_services_immigrant_visas_yes">Ano</string>
|
||||||
|
<string name="poi_diplomatic_services_non_immigrant_visas_no">Ne</string>
|
||||||
|
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Ano</string>
|
||||||
|
<string name="poi_liaison_subnational">Podnárodní</string>
|
||||||
|
<string name="poi_liaison_representative_office">Reprezentační kancelář</string>
|
||||||
|
<string name="poi_liaison_liaison_office">Kancelář</string>
|
||||||
|
<string name="poi_consulate_honorary_consul">Honorární konzul</string>
|
||||||
|
<string name="poi_consulate_consulate_general">Generální konzulát</string>
|
||||||
|
<string name="poi_consulate_consular_office">Kancelář konzula</string>
|
||||||
|
<string name="poi_consulate_consular_agency">Konzulární zastupitelstvo</string>
|
||||||
|
<string name="poi_consulate_yes">Vedená konzulem</string>
|
||||||
|
<string name="poi_embassy_residence">Rezidence</string>
|
||||||
|
<string name="poi_embassy_nunciature">Nunciatura</string>
|
||||||
|
<string name="poi_embassy_mission">Mise</string>
|
||||||
|
<string name="poi_embassy_interests_section">Zájmová sekce</string>
|
||||||
|
<string name="poi_embassy_high_commission">Vysoký komisař</string>
|
||||||
|
<string name="poi_embassy_delegation">Delegace</string>
|
||||||
|
<string name="poi_embassy_branch_embassy">Pobočka</string>
|
||||||
|
<string name="poi_embassy_yes">Vedená velvyslancem</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3425,7 +3425,7 @@
|
||||||
<string name="gpx_direction_arrows">Směrové šipky</string>
|
<string name="gpx_direction_arrows">Směrové šipky</string>
|
||||||
<string name="plan_route_last_edited">Naposledy upraveno</string>
|
<string name="plan_route_last_edited">Naposledy upraveno</string>
|
||||||
<string name="plan_route_import_track">Importovat trasu</string>
|
<string name="plan_route_import_track">Importovat trasu</string>
|
||||||
<string name="plan_route_open_existing_track">Otevřít existující trasu</string>
|
<string name="plan_route_open_existing_track">Otevřít existující stopu</string>
|
||||||
<string name="plan_route_create_new_route">Vytvořit novou trasu</string>
|
<string name="plan_route_create_new_route">Vytvořit novou trasu</string>
|
||||||
<string name="plan_route_select_track_file_for_open">Vyberte stopu k otevření.</string>
|
<string name="plan_route_select_track_file_for_open">Vyberte stopu k otevření.</string>
|
||||||
<string name="shared_string_done">Hotovo</string>
|
<string name="shared_string_done">Hotovo</string>
|
||||||
|
@ -3442,10 +3442,10 @@
|
||||||
<string name="quick_action_add_gpx">Přidat mezicíl</string>
|
<string name="quick_action_add_gpx">Přidat mezicíl</string>
|
||||||
<string name="map_widget_monitoring">Záznam trasy</string>
|
<string name="map_widget_monitoring">Záznam trasy</string>
|
||||||
<string name="marker_save_as_track">Uložit jako soubor trasy</string>
|
<string name="marker_save_as_track">Uložit jako soubor trasy</string>
|
||||||
<string name="follow_track">Sledovat trasu</string>
|
<string name="follow_track">Sledovat stopu</string>
|
||||||
<string name="follow_track_descr">Zvolte soubor trasy, kterou chcete sledovat</string>
|
<string name="follow_track_descr">Zvolte soubor trasy, kterou chcete sledovat</string>
|
||||||
<string name="import_track_descr">Zvolte soubor stopy, kterou chcete sledovat, nebo jej importujte ze svého zařízení.</string>
|
<string name="import_track_descr">Zvolte soubor stopy, kterou chcete sledovat, nebo jej importujte ze svého zařízení.</string>
|
||||||
<string name="select_another_track">Zvolit jinou trasu</string>
|
<string name="select_another_track">Zvolit jinou stopu</string>
|
||||||
<string name="navigate_to_track_descr">Navigovat z mé polohy k trase</string>
|
<string name="navigate_to_track_descr">Navigovat z mé polohy k trase</string>
|
||||||
<string name="pass_whole_track_descr">Bod trasy pro navigování</string>
|
<string name="pass_whole_track_descr">Bod trasy pro navigování</string>
|
||||||
<string name="start_of_the_track">Začátek trasy</string>
|
<string name="start_of_the_track">Začátek trasy</string>
|
||||||
|
@ -3490,7 +3490,7 @@
|
||||||
<string name="save_track_to_gpx_globally">Ukládat trasu do GPX souboru</string>
|
<string name="save_track_to_gpx_globally">Ukládat trasu do GPX souboru</string>
|
||||||
<string name="shared_string_gpx_route">Trasa ze stopy</string>
|
<string name="shared_string_gpx_route">Trasa ze stopy</string>
|
||||||
<string name="empty_state_my_tracks">Přidat soubory stop</string>
|
<string name="empty_state_my_tracks">Přidat soubory stop</string>
|
||||||
<string name="simplified_track">Zjednodušená trasa</string>
|
<string name="simplified_track">Zjednodušená stopa</string>
|
||||||
<string name="simplified_track_description">Uloží se pouze linie trasy, mezicíle budou odstraněny.</string>
|
<string name="simplified_track_description">Uloží se pouze linie trasy, mezicíle budou odstraněny.</string>
|
||||||
<string name="shared_string_file_name">Název souboru</string>
|
<string name="shared_string_file_name">Název souboru</string>
|
||||||
<string name="number_of_gpx_files_selected_pattern">%s vybraných souborů stop</string>
|
<string name="number_of_gpx_files_selected_pattern">%s vybraných souborů stop</string>
|
||||||
|
@ -3505,7 +3505,7 @@
|
||||||
<string name="only_selected_segment_recalc">Pouze vybraný úsek bude přepočítán pomocí vybraného profilu.</string>
|
<string name="only_selected_segment_recalc">Pouze vybraný úsek bude přepočítán pomocí vybraného profilu.</string>
|
||||||
<string name="all_next_segments_will_be_recalc">Všechny následující úseky budou přepočítány pomocí vybraného profilu.</string>
|
<string name="all_next_segments_will_be_recalc">Všechny následující úseky budou přepočítány pomocí vybraného profilu.</string>
|
||||||
<string name="all_previous_segments_will_be_recalc">Všechny předcházející úseky budou přepočítány pomocí vybraného profilu.</string>
|
<string name="all_previous_segments_will_be_recalc">Všechny předcházející úseky budou přepočítány pomocí vybraného profilu.</string>
|
||||||
<string name="open_saved_track">Otevřít uloženou trasu</string>
|
<string name="open_saved_track">Otevřít uloženou stopu</string>
|
||||||
<string name="shared_string_is_saved">je uloženo</string>
|
<string name="shared_string_is_saved">je uloženo</string>
|
||||||
<string name="one_point_error">Přidejte prosím alespoň dva body.</string>
|
<string name="one_point_error">Přidejte prosím alespoň dva body.</string>
|
||||||
<string name="shared_string_redo">Znovu</string>
|
<string name="shared_string_redo">Znovu</string>
|
||||||
|
@ -3967,7 +3967,7 @@
|
||||||
<string name="select_folder">Zvolte složku</string>
|
<string name="select_folder">Zvolte složku</string>
|
||||||
<string name="select_folder_descr">Zvolte složku nebo vytvořte novou</string>
|
<string name="select_folder_descr">Zvolte složku nebo vytvořte novou</string>
|
||||||
<string name="shared_string_empty">Prázdné</string>
|
<string name="shared_string_empty">Prázdné</string>
|
||||||
<string name="analyze_by_intervals">Analyzovat podle intervalů (rozdělit interval)</string>
|
<string name="analyze_by_intervals">Analyzovat rozdělené intervaly</string>
|
||||||
<string name="upload_to_openstreetmap">Nahrát do OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Nahrát do OpenStreetMap</string>
|
||||||
<string name="edit_track">Editovat stopu</string>
|
<string name="edit_track">Editovat stopu</string>
|
||||||
<string name="rename_track">Přejmenovat stopu</string>
|
<string name="rename_track">Přejmenovat stopu</string>
|
||||||
|
@ -4011,4 +4011,13 @@
|
||||||
<string name="uploading_count">Nahrávám %1$d z %2$d</string>
|
<string name="uploading_count">Nahrávám %1$d z %2$d</string>
|
||||||
<string name="uploaded_count">Nahráno %1$d z %2$d</string>
|
<string name="uploaded_count">Nahráno %1$d z %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Vyberte úpravy pro nahrání</string>
|
<string name="toast_select_edits_for_upload">Vyberte úpravy pro nahrání</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Stínované svahy / Sklon svahů / Vrstevnice</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews je komunitní projekt o veřejných místech, jako jsou restaurace, hotely, muzea a další. Shromažďuje o nich veškeré veřejné informace, např. fotografie, hodnocení, odkazy do dalších systémů jako OpenStreetMap či Wikipedie.
|
||||||
|
\n
|
||||||
|
\nVšechna data OpenPlaceReviews jsou otevřená a přístupná každému: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nPřečtěte si více na http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Použít test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Přihlásit se do OpenPlaceReviews</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3694,7 +3694,7 @@
|
||||||
<string name="quick_action_showhide_mapillary_title">Mapillary ein-/ausblenden</string>
|
<string name="quick_action_showhide_mapillary_title">Mapillary ein-/ausblenden</string>
|
||||||
<string name="quick_action_mapillary_hide">Mapillary ausblenden</string>
|
<string name="quick_action_mapillary_hide">Mapillary ausblenden</string>
|
||||||
<string name="quick_action_mapillary_show">Mapillary anzeigen</string>
|
<string name="quick_action_mapillary_show">Mapillary anzeigen</string>
|
||||||
<string name="quick_action_showhide_mapillary_descr">Eine Umschaltfläche zum ein- oder ausblenden der Mapillary-Layer auf der Karte.</string>
|
<string name="quick_action_showhide_mapillary_descr">Eine Umschaltfläche zum Ein- oder Ausblenden des Mapillary-Layers auf der Karte.</string>
|
||||||
<string name="uninstall_speed_cameras">Blitzer deinstallieren</string>
|
<string name="uninstall_speed_cameras">Blitzer deinstallieren</string>
|
||||||
<string name="shared_string_legal">Rechtliches</string>
|
<string name="shared_string_legal">Rechtliches</string>
|
||||||
<string name="speed_camera_pois">Blitzer-POIs</string>
|
<string name="speed_camera_pois">Blitzer-POIs</string>
|
||||||
|
@ -4013,4 +4013,13 @@
|
||||||
<string name="uploading_count">Lade %1$d von %2$d hoch</string>
|
<string name="uploading_count">Lade %1$d von %2$d hoch</string>
|
||||||
<string name="uploaded_count">%1$d von %2$d hochgeladen</string>
|
<string name="uploaded_count">%1$d von %2$d hochgeladen</string>
|
||||||
<string name="toast_select_edits_for_upload">Bearbeitungen zum Hochladen auswählen</string>
|
<string name="toast_select_edits_for_upload">Bearbeitungen zum Hochladen auswählen</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Relief / Hangneigung / Höhenlinien</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews ist ein von der Gemeinschaft betriebenes Projekt über öffentliche Orte wie Restaurants, Hotels, Museen, Wegpunkte. Es sammelt alle öffentlichen Informationen über sie wie Fotos, Bewertungen, Links zu anderen Systemen, Link OpenStreetMap, Wikipedia.
|
||||||
|
\n
|
||||||
|
\nAlle OpenPlaceReview-Daten sind offen und für jedermann zugänglich: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nMehr Informationen finden Sie unter: http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">test.openplacereviews.org verwenden</string>
|
||||||
|
<string name="login_open_place_reviews">Anmelden bei OpenPlaceReviews</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1212,7 +1212,7 @@
|
||||||
<string name="poi_description">Περιγραφή</string>
|
<string name="poi_description">Περιγραφή</string>
|
||||||
<string name="poi_phone">Τηλέφωνο</string>
|
<string name="poi_phone">Τηλέφωνο</string>
|
||||||
<string name="poi_website">Ιστότοπος</string>
|
<string name="poi_website">Ιστότοπος</string>
|
||||||
<string name="poi_email">Ηλ. διεύθυνση</string>
|
<string name="poi_email">Ηλεκτρονικό ταχυδρομείο</string>
|
||||||
<string name="poi_fax">Τηλεομοιότυπο (φαξ)</string>
|
<string name="poi_fax">Τηλεομοιότυπο (φαξ)</string>
|
||||||
<string name="facebook">Facebook</string>
|
<string name="facebook">Facebook</string>
|
||||||
<string name="twitter">Twitter</string>
|
<string name="twitter">Twitter</string>
|
||||||
|
|
|
@ -267,7 +267,7 @@
|
||||||
<string name="offline_edition">Επεξεργασία χωρίς διαδίκτυο</string>
|
<string name="offline_edition">Επεξεργασία χωρίς διαδίκτυο</string>
|
||||||
<string name="offline_edition_descr">Χρήση πάντα της επεξεργασίας χωρίς διαδίκτυο.</string>
|
<string name="offline_edition_descr">Χρήση πάντα της επεξεργασίας χωρίς διαδίκτυο.</string>
|
||||||
<string name="update_poi_does_not_change_indexes">Οι αλλαγές στα ΣΕ μέσω της εφαρμογής δεν επηρεάζουν τα ληφθέντα αρχεία χάρτη, οι αλλαγές αποθηκεύονται ως αρχείο στη συσκευή σας.</string>
|
<string name="update_poi_does_not_change_indexes">Οι αλλαγές στα ΣΕ μέσω της εφαρμογής δεν επηρεάζουν τα ληφθέντα αρχεία χάρτη, οι αλλαγές αποθηκεύονται ως αρχείο στη συσκευή σας.</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>
|
||||||
<string name="local_openstreetmap_upload">Αποστολή επεξεργασίας στο OSM</string>
|
<string name="local_openstreetmap_upload">Αποστολή επεξεργασίας στο OSM</string>
|
||||||
|
@ -778,7 +778,7 @@
|
||||||
<string name="context_menu_item_update_map">Ενημέρωση χάρτη</string>
|
<string name="context_menu_item_update_map">Ενημέρωση χάρτη</string>
|
||||||
<string name="context_menu_item_create_poi">Δημιουργία ΣΕ</string>
|
<string name="context_menu_item_create_poi">Δημιουργία ΣΕ</string>
|
||||||
<string name="shared_string_yes">Ναι</string>
|
<string name="shared_string_yes">Ναι</string>
|
||||||
<string name="shared_string_cancel">Ακύρωση</string>
|
<string name="shared_string_cancel">Άκυρο</string>
|
||||||
<string name="shared_string_apply">Εφαρμογή</string>
|
<string name="shared_string_apply">Εφαρμογή</string>
|
||||||
<string name="shared_string_no">Όχι</string>
|
<string name="shared_string_no">Όχι</string>
|
||||||
<string name="add_favorite_dialog_top_text">Εισαγωγή ονόματος αγαπημένου</string>
|
<string name="add_favorite_dialog_top_text">Εισαγωγή ονόματος αγαπημένου</string>
|
||||||
|
@ -813,7 +813,7 @@
|
||||||
<string name="edit_filter_delete_dialog_title">Διαγραφή αυτού του φίλτρου;</string>
|
<string name="edit_filter_delete_dialog_title">Διαγραφή αυτού του φίλτρου;</string>
|
||||||
<string name="edit_filter_delete_message">Το φίλτρο \'%1$s\' διαγράφηκε</string>
|
<string name="edit_filter_delete_message">Το φίλτρο \'%1$s\' διαγράφηκε</string>
|
||||||
<string name="edit_filter_create_message">Το φίλτρο \'%1$s\' δημιουργήθηκε</string>
|
<string name="edit_filter_create_message">Το φίλτρο \'%1$s\' δημιουργήθηκε</string>
|
||||||
<string name="email">ηλ. διεύθυνση</string>
|
<string name="email">ηλεκτρονικό ταχυδρομείο</string>
|
||||||
<string name="intermediate_point_too_far">Ο ενδιάμεσος προορισμός %1$s είναι πολύ μακριά από τον πλησιέστερο δρόμο.</string>
|
<string name="intermediate_point_too_far">Ο ενδιάμεσος προορισμός %1$s είναι πολύ μακριά από τον πλησιέστερο δρόμο.</string>
|
||||||
<string name="arrived_at_intermediate_point">Φτάσατε στον ενδιάμεσο προορισμό σας</string>
|
<string name="arrived_at_intermediate_point">Φτάσατε στον ενδιάμεσο προορισμό σας</string>
|
||||||
<string name="context_menu_item_intermediate_point">Προσθήκη ως ενδιάμεσου προορισμού</string>
|
<string name="context_menu_item_intermediate_point">Προσθήκη ως ενδιάμεσου προορισμού</string>
|
||||||
|
@ -1175,7 +1175,7 @@
|
||||||
<string name="keep_informing_never">Μόνο χειροκίνητα (πατήστε το βέλος)</string>
|
<string name="keep_informing_never">Μόνο χειροκίνητα (πατήστε το βέλος)</string>
|
||||||
<string name="keep_informing">Επανάληψη οδηγιών πλοήγησης</string>
|
<string name="keep_informing">Επανάληψη οδηγιών πλοήγησης</string>
|
||||||
<string name="import_file_favourites">Αποθήκευση δεδομένων ως αρχείο GPX ή εισαγωγή σημείων διαδρομής στα \'Αγαπημένα\';</string>
|
<string name="import_file_favourites">Αποθήκευση δεδομένων ως αρχείο GPX ή εισαγωγή σημείων διαδρομής στα \'Αγαπημένα\';</string>
|
||||||
<string name="shared_string_share">Διαμοιρασμός</string>
|
<string name="shared_string_share">Κοινοποίηση</string>
|
||||||
<string name="navigation_intent_invalid">Μη έγκυρη μορφή: %s</string>
|
<string name="navigation_intent_invalid">Μη έγκυρη μορφή: %s</string>
|
||||||
<string name="stop_navigation_service">Διακοπή</string>
|
<string name="stop_navigation_service">Διακοπή</string>
|
||||||
<string name="sleep_mode_stop_dialog">Διακοπή λειτουργίας παρασκηνίου του GPS;</string>
|
<string name="sleep_mode_stop_dialog">Διακοπή λειτουργίας παρασκηνίου του GPS;</string>
|
||||||
|
@ -1270,7 +1270,7 @@
|
||||||
<string name="dash_download_new_one">Λήψη Νέου Χάρτη</string>
|
<string name="dash_download_new_one">Λήψη Νέου Χάρτη</string>
|
||||||
<string name="map_locale">Γλώσσα χάρτη</string>
|
<string name="map_locale">Γλώσσα χάρτη</string>
|
||||||
<string name="rendering_attr_roadStyle_name">Μορφή δρόμου</string>
|
<string name="rendering_attr_roadStyle_name">Μορφή δρόμου</string>
|
||||||
<string name="rendering_value_default_name">Προκαθορισμένο</string>
|
<string name="rendering_value_default_name">Προεπιλογή</string>
|
||||||
<string name="rendering_value_orange_name">Πορτοκαλί</string>
|
<string name="rendering_value_orange_name">Πορτοκαλί</string>
|
||||||
<string name="traffic_warning_railways">Διασταύρωση σιδηροτροχιάς</string>
|
<string name="traffic_warning_railways">Διασταύρωση σιδηροτροχιάς</string>
|
||||||
<string name="show_railway_warnings">Διασταυρώσεις σιδηροτροχιάς</string>
|
<string name="show_railway_warnings">Διασταυρώσεις σιδηροτροχιάς</string>
|
||||||
|
@ -1467,7 +1467,7 @@
|
||||||
<string name="track_segments">Τμήματα διαδρομής</string>
|
<string name="track_segments">Τμήματα διαδρομής</string>
|
||||||
<string name="track_points">Σημεία της διαδρομής</string>
|
<string name="track_points">Σημεία της διαδρομής</string>
|
||||||
<string name="location_on_map">Τοποθεσία:\n Γ. Πλ %1$s\n Γ. Μηκ %2$s</string>
|
<string name="location_on_map">Τοποθεσία:\n Γ. Πλ %1$s\n Γ. Μηκ %2$s</string>
|
||||||
<string name="rendering_value__name">Προκαθορισμένο</string>
|
<string name="rendering_value__name">Προεπιλογή</string>
|
||||||
<string name="print_route">Εκτύπωση διαδρομής</string>
|
<string name="print_route">Εκτύπωση διαδρομής</string>
|
||||||
<string name="osmand_parking_overdue">εκπρόθεσμο</string>
|
<string name="osmand_parking_overdue">εκπρόθεσμο</string>
|
||||||
<string name="simulate_your_location">Προσομοίωση της θέση σας</string>
|
<string name="simulate_your_location">Προσομοίωση της θέση σας</string>
|
||||||
|
@ -3013,7 +3013,7 @@
|
||||||
<string name="rendering_attr_showLez_description">Εμφάνιση στον χάρτη ζωνών για χαμηλή εκπομπή καυσαερίων. Δεν επηρεάζει τη δρομολόγηση.</string>
|
<string name="rendering_attr_showLez_description">Εμφάνιση στον χάρτη ζωνών για χαμηλή εκπομπή καυσαερίων. Δεν επηρεάζει τη δρομολόγηση.</string>
|
||||||
<string name="rendering_attr_showLez_name">Εμφάνιση ζωνών χαμηλής εκπομπής καυσαερίων</string>
|
<string name="rendering_attr_showLez_name">Εμφάνιση ζωνών χαμηλής εκπομπής καυσαερίων</string>
|
||||||
<string name="temporary_conditional_routing">Λάβετε υπόψη τους προσωρινούς περιορισμούς</string>
|
<string name="temporary_conditional_routing">Λάβετε υπόψη τους προσωρινούς περιορισμούς</string>
|
||||||
<string name="shared_string_default">Προεπιλεγμένο</string>
|
<string name="shared_string_default">Προεπιλογή</string>
|
||||||
<string name="app_mode_pickup_truck">Ημιφορτηγό</string>
|
<string name="app_mode_pickup_truck">Ημιφορτηγό</string>
|
||||||
<string name="day">Ημέρα</string>
|
<string name="day">Ημέρα</string>
|
||||||
<string name="days_2_4">Ημέρες</string>
|
<string name="days_2_4">Ημέρες</string>
|
||||||
|
@ -3385,7 +3385,7 @@
|
||||||
<string name="monitoring_min_accuracy_descr_recommendation">Σύσταση: Είναι δύσκολο να προβλεφθεί τι θα εγγραφεί και τι όχι, ίσως είναι καλύτερο να απενεργοποιήσετε αυτό το φίλτρο.</string>
|
<string name="monitoring_min_accuracy_descr_recommendation">Σύσταση: Είναι δύσκολο να προβλεφθεί τι θα εγγραφεί και τι όχι, ίσως είναι καλύτερο να απενεργοποιήσετε αυτό το φίλτρο.</string>
|
||||||
<string name="monitoring_min_accuracy_descr_remark">Παρατήρηση: Εάν το GPS είχε απενεργοποιηθεί αμέσως πριν μια εγγραφή, το πρώτο μετρούμενο σημείο μπορεί να έχει μειωμένη ακρίβεια, έτσι μπορεί να θέλουμε να περιμένουμε λιγάκι πριν την καταγραφή σημείου (ή να εγγράψουμε τα καλύτερα 3 διαδοχικά σημεία, κλπ.), αλλά αυτό δεν έχει ακόμα υλοποιηθεί.</string>
|
<string name="monitoring_min_accuracy_descr_remark">Παρατήρηση: Εάν το GPS είχε απενεργοποιηθεί αμέσως πριν μια εγγραφή, το πρώτο μετρούμενο σημείο μπορεί να έχει μειωμένη ακρίβεια, έτσι μπορεί να θέλουμε να περιμένουμε λιγάκι πριν την καταγραφή σημείου (ή να εγγράψουμε τα καλύτερα 3 διαδοχικά σημεία, κλπ.), αλλά αυτό δεν έχει ακόμα υλοποιηθεί.</string>
|
||||||
<string name="monitoring_min_distance_descr">Αυτό το φίλτρο αποφεύγει διπλά σημεία να εγγραφούν όταν έχει συμβεί πολύ λίγη ενεργή κίνηση, καθιστώντας καλύτερη τη χωροταξική εμφάνιση των ιχνών που δεν επεξεργάζονται αργότερα.</string>
|
<string name="monitoring_min_distance_descr">Αυτό το φίλτρο αποφεύγει διπλά σημεία να εγγραφούν όταν έχει συμβεί πολύ λίγη ενεργή κίνηση, καθιστώντας καλύτερη τη χωροταξική εμφάνιση των ιχνών που δεν επεξεργάζονται αργότερα.</string>
|
||||||
<string name="button_rate">Τιμή</string>
|
<string name="button_rate">Βαθμολόγηση</string>
|
||||||
<string name="monitoring_min_distance_descr_side_effect">Παράπλευρα αποτελέσματα: Περίοδοι σε ακινησία δεν καταγράφονται καθόλου ή μόνο με ένα σημείο καθεμιά. Μικρές (πραγματικός κόσμος) κινήσεις (π.χ. πλάγιες, για να σημειώσουν έξοδο στο ταξίδι σας) μπορεί να φιλτραριστούν. Το αρχείο σας περιέχει λιγότερες πληροφορίες για μετεπεξεργασία και έχει χειρότερα στατιστικά φιλτράροντας προφανώς περιττά σημεία κατά τον χρόνο εγγραφής, ενώ δυνητικά διατηρεί παράσιτα που προκαλούνται από κακή λήψη ή επιπτώσεις κυκλωμάτων GPS.</string>
|
<string name="monitoring_min_distance_descr_side_effect">Παράπλευρα αποτελέσματα: Περίοδοι σε ακινησία δεν καταγράφονται καθόλου ή μόνο με ένα σημείο καθεμιά. Μικρές (πραγματικός κόσμος) κινήσεις (π.χ. πλάγιες, για να σημειώσουν έξοδο στο ταξίδι σας) μπορεί να φιλτραριστούν. Το αρχείο σας περιέχει λιγότερες πληροφορίες για μετεπεξεργασία και έχει χειρότερα στατιστικά φιλτράροντας προφανώς περιττά σημεία κατά τον χρόνο εγγραφής, ενώ δυνητικά διατηρεί παράσιτα που προκαλούνται από κακή λήψη ή επιπτώσεις κυκλωμάτων GPS.</string>
|
||||||
<string name="monitoring_min_distance_descr_recommendation">Σύσταση: Ρύθμιση 5 μέτρων μπορεί να λειτουργήσει καλά για σας, εάν δεν χρειάζεστε να πιάσετε λεπτομέρειες πιο ακριβείς από αυτό και δεν θέλετε να πάρετε δεδομένα σε ακινησία.</string>
|
<string name="monitoring_min_distance_descr_recommendation">Σύσταση: Ρύθμιση 5 μέτρων μπορεί να λειτουργήσει καλά για σας, εάν δεν χρειάζεστε να πιάσετε λεπτομέρειες πιο ακριβείς από αυτό και δεν θέλετε να πάρετε δεδομένα σε ακινησία.</string>
|
||||||
<string name="live_monitoring_time_buffer">Ενδιάμεσος χρόνος</string>
|
<string name="live_monitoring_time_buffer">Ενδιάμεσος χρόνος</string>
|
||||||
|
|
|
@ -3881,4 +3881,14 @@
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">Ponto por vespertoj</string>
|
<string name="poi_wildlife_crossing_bat_bridge">Ponto por vespertoj</string>
|
||||||
<string name="poi_wildlife_crossing">Trairejo por sovaĝaj bestoj</string>
|
<string name="poi_wildlife_crossing">Trairejo por sovaĝaj bestoj</string>
|
||||||
<string name="poi_swimming_area">Naĝejo natura</string>
|
<string name="poi_swimming_area">Naĝejo natura</string>
|
||||||
|
<string name="poi_piste_status_closed">Stato de skivojo: fermita</string>
|
||||||
|
<string name="poi_piste_status_open">Stato de skivojo: malfermita</string>
|
||||||
|
<string name="poi_patrolled_no">Kontrolata: ne</string>
|
||||||
|
<string name="poi_patrolled_yes">Kontrolata: jes</string>
|
||||||
|
<string name="poi_gladed_yes">Senarbigita: jes</string>
|
||||||
|
<string name="poi_piste_name">Nomo de skivojo</string>
|
||||||
|
<string name="poi_piste_ski_jump">Skisaltejo</string>
|
||||||
|
<string name="poi_mobile_library">Movebla biblioteko (haltloko)</string>
|
||||||
|
<string name="poi_summit_register_no">Pint‑taglibro: ne</string>
|
||||||
|
<string name="poi_summit_register_yes">Pint‑taglibro: jes</string>
|
||||||
</resources>
|
</resources>
|
|
@ -654,7 +654,7 @@
|
||||||
<string name="select_index_file_to_download">Trovis nenion. Se vi ne povas trovi vian regionon, vi povas fari ĝin mem (rigardu https://osmand.net).</string>
|
<string name="select_index_file_to_download">Trovis nenion. Se vi ne povas trovi vian regionon, vi povas fari ĝin mem (rigardu https://osmand.net).</string>
|
||||||
<string name="none_selected_gpx">Unue elektu GPX‑dosieron per frapetadi.</string>
|
<string name="none_selected_gpx">Unue elektu GPX‑dosieron per frapetadi.</string>
|
||||||
<string name="local_index_select_gpx_file">Elektu kurson</string>
|
<string name="local_index_select_gpx_file">Elektu kurson</string>
|
||||||
<string name="gpx_split_interval">Intertempo de divido</string>
|
<string name="gpx_split_interval">Fragmento</string>
|
||||||
<string name="sort_by_distance">Ordigi laŭ distanco</string>
|
<string name="sort_by_distance">Ordigi laŭ distanco</string>
|
||||||
<string name="sort_by_name">Ordigi laŭ nomo</string>
|
<string name="sort_by_name">Ordigi laŭ nomo</string>
|
||||||
<string name="plugin_touringview_name">Turisma map-vido</string>
|
<string name="plugin_touringview_name">Turisma map-vido</string>
|
||||||
|
@ -2405,7 +2405,7 @@
|
||||||
<string name="mapillary_action_descr">Kontribui viajn strat-nivelajn vidaĵojn pri tiu ĉi loko al Mapillary.</string>
|
<string name="mapillary_action_descr">Kontribui viajn strat-nivelajn vidaĵojn pri tiu ĉi loko al Mapillary.</string>
|
||||||
<string name="plugin_mapillary_descr">Strat-nivelaj fotoj por ĉiuj. Esplori lokojn, kunlabori kaj foti la mondon.</string>
|
<string name="plugin_mapillary_descr">Strat-nivelaj fotoj por ĉiuj. Esplori lokojn, kunlabori kaj foti la mondon.</string>
|
||||||
<string name="online_photos">Enretaj fotoj</string>
|
<string name="online_photos">Enretaj fotoj</string>
|
||||||
<string name="no_photos_descr">Neniuj fotoj tie ĉi.</string>
|
<string name="no_photos_descr">Neniu foto tie ĉi.</string>
|
||||||
<string name="shared_string_install">Instali</string>
|
<string name="shared_string_install">Instali</string>
|
||||||
<string name="improve_coverage_mapillary">Pliigi fotan atingon de Mapillary</string>
|
<string name="improve_coverage_mapillary">Pliigi fotan atingon de Mapillary</string>
|
||||||
<string name="improve_coverage_install_mapillary_desc">Instalu la aplikaĵon Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo.</string>
|
<string name="improve_coverage_install_mapillary_desc">Instalu la aplikaĵon Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo.</string>
|
||||||
|
@ -3967,7 +3967,7 @@
|
||||||
<string name="select_folder">Elekti dosierujon</string>
|
<string name="select_folder">Elekti dosierujon</string>
|
||||||
<string name="select_folder_descr">Elekti dosierujon aŭ krei novan</string>
|
<string name="select_folder_descr">Elekti dosierujon aŭ krei novan</string>
|
||||||
<string name="shared_string_empty">Malplena</string>
|
<string name="shared_string_empty">Malplena</string>
|
||||||
<string name="analyze_by_intervals">Analizi laŭ intertempoj (dividoj)</string>
|
<string name="analyze_by_intervals">Analizi laŭ fragmentoj</string>
|
||||||
<string name="upload_to_openstreetmap">Alŝuti al OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Alŝuti al OpenStreetMap</string>
|
||||||
<string name="edit_track">Redakti spuron</string>
|
<string name="edit_track">Redakti spuron</string>
|
||||||
<string name="rename_track">Renomi spuron</string>
|
<string name="rename_track">Renomi spuron</string>
|
||||||
|
@ -4011,4 +4011,26 @@
|
||||||
<string name="uploading_count">Sendado de %1$d el %2$d</string>
|
<string name="uploading_count">Sendado de %1$d el %2$d</string>
|
||||||
<string name="uploaded_count">Sendis %1$d el %2$d</string>
|
<string name="uploaded_count">Sendis %1$d el %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Elektu redaktojn por sendi</string>
|
<string name="toast_select_edits_for_upload">Elektu redaktojn por sendi</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Nivelombrumo / dekliveco / nivelkurboj</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews estas komunuma projekto pri publikaj lokoj, kiel restoracioj, hoteloj, muzeoj, rekoniloj, ktp. Ĝi kolektas diversajn publikajn informojn pri tiuj punktoj: fotojn, opiniojn, ligilojn al OpenStreetMap kaj Vikipedio.
|
||||||
|
\n
|
||||||
|
\nĈiuj OpenPlaceReview‑datumoj estas malfermaj kaj disponeblaj por ĉiu: http://openplacereviews.org/data
|
||||||
|
\n
|
||||||
|
\nPliaj informoj ĉe http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Uzi test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Ensaluti al OpenPlaceReviews</string>
|
||||||
|
<string name="activity_type_water_name">Akvo</string>
|
||||||
|
<string name="activity_type_winter_name">Vintro</string>
|
||||||
|
<string name="activity_type_snowmobile_name">Motorsledo</string>
|
||||||
|
<string name="activity_type_riding_name">Rajdado</string>
|
||||||
|
<string name="activity_type_racing_name">Kurkonkurso</string>
|
||||||
|
<string name="activity_type_mountainbike_name">Montbiciklo</string>
|
||||||
|
<string name="activity_type_cycling_name">Biciklado</string>
|
||||||
|
<string name="activity_type_hiking_name">Marŝado</string>
|
||||||
|
<string name="activity_type_running_name">Kurado</string>
|
||||||
|
<string name="activity_type_walking_name">Piedirado</string>
|
||||||
|
<string name="activity_type_offroad_name">Ekstervoje</string>
|
||||||
|
<string name="activity_type_motorbike_name">Motorciklo</string>
|
||||||
|
<string name="activity_type_car_name">Aŭto</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2723,7 +2723,7 @@
|
||||||
<string name="poi_aquaculture_mussels">Acuicultura: mejillones</string>
|
<string name="poi_aquaculture_mussels">Acuicultura: mejillones</string>
|
||||||
<string name="poi_min_age">Edad mínima</string>
|
<string name="poi_min_age">Edad mínima</string>
|
||||||
<string name="poi_organic_yes">Sí</string>
|
<string name="poi_organic_yes">Sí</string>
|
||||||
<string name="poi_organic_no">No</string>
|
<string name="poi_organic_no">Productos orgánicos: no</string>
|
||||||
<string name="poi_organic_only">Únicamente</string>
|
<string name="poi_organic_only">Únicamente</string>
|
||||||
<string name="poi_traffic_mirror">Espejo de tráfico</string>
|
<string name="poi_traffic_mirror">Espejo de tráfico</string>
|
||||||
<string name="poi_diplomatic_consulate">Consulado</string>
|
<string name="poi_diplomatic_consulate">Consulado</string>
|
||||||
|
|
|
@ -774,7 +774,7 @@
|
||||||
<string name="osmand_plus_short_description_80_chars">Visor y navegador móvil global de mapas OSM con y sin conexión</string>
|
<string name="osmand_plus_short_description_80_chars">Visor y navegador móvil global de mapas OSM con y sin conexión</string>
|
||||||
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions, y en español, Guía de Navegación Automatizada de OSM)
|
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions, y en español, Guía de Navegación Automatizada de OSM)
|
||||||
\n
|
\n
|
||||||
\nOsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
\n OsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
||||||
\n
|
\n
|
||||||
\n OsmAnd+ es la versión de pago de la aplicación, comprándola ayudas al proyecto, financias el desarrollo de nuevas funciones, y recibes las últimas actualizaciones.
|
\n OsmAnd+ es la versión de pago de la aplicación, comprándola ayudas al proyecto, financias el desarrollo de nuevas funciones, y recibes las últimas actualizaciones.
|
||||||
\n
|
\n
|
||||||
|
@ -1222,8 +1222,7 @@
|
||||||
<string name="osmand_net_previously_installed">Todos los datos sin conexión en la versión vieja de OsmAnd son compatibles con la nueva versión, pero los puntos de Favoritos deben exportarse desde la versión vieja y luego, importarse en la nueva.</string>
|
<string name="osmand_net_previously_installed">Todos los datos sin conexión en la versión vieja de OsmAnd son compatibles con la nueva versión, pero los puntos de Favoritos deben exportarse desde la versión vieja y luego, importarse en la nueva.</string>
|
||||||
<string name="build_installed">Compilación {0} instalada ({1}).</string>
|
<string name="build_installed">Compilación {0} instalada ({1}).</string>
|
||||||
<string name="downloading_build">Descargando compilación…</string>
|
<string name="downloading_build">Descargando compilación…</string>
|
||||||
<string name="install_selected_build">¿Instalar OsmAnd?
|
<string name="install_selected_build">¿Instalar OsmAnd {0}\?
|
||||||
\nVersión: {0}
|
|
||||||
\nFecha: {1}
|
\nFecha: {1}
|
||||||
\nTamaño: {2} MB</string>
|
\nTamaño: {2} MB</string>
|
||||||
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
|
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
|
||||||
|
@ -2063,7 +2062,7 @@
|
||||||
<string name="shared_string_notifications">Notificaciones</string>
|
<string name="shared_string_notifications">Notificaciones</string>
|
||||||
<string name="gpx_no_tracks_title">Sin archivos de trazas aún</string>
|
<string name="gpx_no_tracks_title">Sin archivos de trazas aún</string>
|
||||||
<string name="gpx_no_tracks_title_folder">También puedes añadir archivos de trazas a la carpeta</string>
|
<string name="gpx_no_tracks_title_folder">También puedes añadir archivos de trazas a la carpeta</string>
|
||||||
<string name="gpx_add_track">Añadir GPX</string>
|
<string name="gpx_add_track">Añadir más…</string>
|
||||||
<string name="shared_string_appearance">Aspecto</string>
|
<string name="shared_string_appearance">Aspecto</string>
|
||||||
<string name="rendering_value_fine_name">Muy fino</string>
|
<string name="rendering_value_fine_name">Muy fino</string>
|
||||||
<string name="route_calculation">Cálculo de la ruta</string>
|
<string name="route_calculation">Cálculo de la ruta</string>
|
||||||
|
@ -3732,8 +3731,8 @@
|
||||||
<string name="add_hidden_group_info">El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s».</string>
|
<string name="add_hidden_group_info">El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s».</string>
|
||||||
<string name="track_show_start_finish_icons">Mostrar los iconos de inicio y fin</string>
|
<string name="track_show_start_finish_icons">Mostrar los iconos de inicio y fin</string>
|
||||||
<string name="select_track_width">Elegir la anchura</string>
|
<string name="select_track_width">Elegir la anchura</string>
|
||||||
<string name="gpx_split_interval_descr">Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza.</string>
|
<string name="gpx_split_interval_descr">Elige el intervalo de la traza en el que se mostrarán las marcas con la distancia o el tiempo.</string>
|
||||||
<string name="gpx_split_interval_none_descr">Marca la opción de división deseada: por tiempo o por distancia.</string>
|
<string name="gpx_split_interval_none_descr">Elige la opción de división deseada: por tiempo o por distancia.</string>
|
||||||
<string name="shared_string_custom">Personalizado</string>
|
<string name="shared_string_custom">Personalizado</string>
|
||||||
<string name="gpx_direction_arrows">Flechas de dirección</string>
|
<string name="gpx_direction_arrows">Flechas de dirección</string>
|
||||||
<string name="track_coloring_solid">Sólido</string>
|
<string name="track_coloring_solid">Sólido</string>
|
||||||
|
@ -3970,7 +3969,7 @@
|
||||||
<string name="select_folder">Elegir carpeta</string>
|
<string name="select_folder">Elegir carpeta</string>
|
||||||
<string name="select_folder_descr">Elegir carpeta o añadir una nueva</string>
|
<string name="select_folder_descr">Elegir carpeta o añadir una nueva</string>
|
||||||
<string name="shared_string_empty">Vacío</string>
|
<string name="shared_string_empty">Vacío</string>
|
||||||
<string name="analyze_by_intervals">Analizar por intervalos (intervalo de división)</string>
|
<string name="analyze_by_intervals">Analizar intervalos divididos</string>
|
||||||
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
|
||||||
<string name="edit_track">Editar traza</string>
|
<string name="edit_track">Editar traza</string>
|
||||||
<string name="rename_track">Renombrar traza</string>
|
<string name="rename_track">Renombrar traza</string>
|
||||||
|
@ -4014,4 +4013,13 @@
|
||||||
<string name="uploading_count">Subiendo %1$d de %2$d</string>
|
<string name="uploading_count">Subiendo %1$d de %2$d</string>
|
||||||
<string name="uploaded_count">Se subieron %1$d de %2$d</string>
|
<string name="uploaded_count">Se subieron %1$d de %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Marcar ediciones a subir</string>
|
<string name="toast_select_edits_for_upload">Marcar ediciones a subir</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Sombreado / Pendiente / Curvas de nivel</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews es un proyecto impulsado por la comunidad sobre lugares públicos como restaurantes, hoteles, museos, puntos de referencia. Recoge toda la información pública sobre ellos como fotos, reseñas, enlaces a otros servicios como OpenStreetMap y Wikipedia.
|
||||||
|
\n
|
||||||
|
\nTodos los datos de OpenPlaceReviews son abiertos y están disponibles para todos: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nPuedes leer más en: https://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Usar test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Acceder a OpenPlaceReviews</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2382,7 +2382,7 @@
|
||||||
<string name="store_tracks_in_monthly_directories">Enregistrer les traces dans des dossiers mensuels</string>
|
<string name="store_tracks_in_monthly_directories">Enregistrer les traces dans des dossiers mensuels</string>
|
||||||
<string name="store_tracks_in_monthly_directories_descrp">Enregistrer les traces dans des sous-dossiers organisés par mois (par exemple 2018-01).</string>
|
<string name="store_tracks_in_monthly_directories_descrp">Enregistrer les traces dans des sous-dossiers organisés par mois (par exemple 2018-01).</string>
|
||||||
<string name="of">%1$d de %2$d</string>
|
<string name="of">%1$d de %2$d</string>
|
||||||
<string name="moving_time">Durée de déplacement</string>
|
<string name="moving_time">Durée de mouvement</string>
|
||||||
<string name="min_max">Min / Max</string>
|
<string name="min_max">Min / Max</string>
|
||||||
<string name="rendering_value_translucent_pink_name">Rose translucide</string>
|
<string name="rendering_value_translucent_pink_name">Rose translucide</string>
|
||||||
<string name="quick_action_resume_pause_navigation">Suspendre / Reprendre la Navigation</string>
|
<string name="quick_action_resume_pause_navigation">Suspendre / Reprendre la Navigation</string>
|
||||||
|
@ -3981,7 +3981,7 @@
|
||||||
<string name="message_name_is_already_exists">Ce nom existe déjà</string>
|
<string name="message_name_is_already_exists">Ce nom existe déjà</string>
|
||||||
<string name="routing_engine_vehicle_type_hgv">Poids lourd</string>
|
<string name="routing_engine_vehicle_type_hgv">Poids lourd</string>
|
||||||
<string name="announcement_time_passing">Durée</string>
|
<string name="announcement_time_passing">Durée</string>
|
||||||
<string name="analyze_by_intervals">Analyser par intervalles (fractionner)</string>
|
<string name="analyze_by_intervals">Analyser par intervalles de fractionnement</string>
|
||||||
<string name="announcement_time_intervals">Intervalles de temps et de distance</string>
|
<string name="announcement_time_intervals">Intervalles de temps et de distance</string>
|
||||||
<string name="announcement_time_descr">Le délai d\'annonce des alertes vocales dépend du type d\'annonce, de la vitesse actuelle et du type de navigation.</string>
|
<string name="announcement_time_descr">Le délai d\'annonce des alertes vocales dépend du type d\'annonce, de la vitesse actuelle et du type de navigation.</string>
|
||||||
<string name="announcement_time_title">Délai de l\'annonce</string>
|
<string name="announcement_time_title">Délai de l\'annonce</string>
|
||||||
|
@ -4001,4 +4001,17 @@
|
||||||
<string name="uploaded_count">%1$d sur %2$d envoyé</string>
|
<string name="uploaded_count">%1$d sur %2$d envoyé</string>
|
||||||
<string name="upload_photo">Envoi en cours</string>
|
<string name="upload_photo">Envoi en cours</string>
|
||||||
<string name="upload_photo_completed">Envoi terminé</string>
|
<string name="upload_photo_completed">Envoi terminé</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Ombrage du relief / Pente / Courbes de niveaux</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Utilisez test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Se connecter à OpenPlaceReviews</string>
|
||||||
|
<string name="activity_type_water_name">Eau</string>
|
||||||
|
<string name="activity_type_winter_name">Hiver</string>
|
||||||
|
<string name="activity_type_snowmobile_name">Motoneige</string>
|
||||||
|
<string name="activity_type_cycling_name">Vélo</string>
|
||||||
|
<string name="activity_type_mountainbike_name">VTT</string>
|
||||||
|
<string name="activity_type_hiking_name">Randonnée</string>
|
||||||
|
<string name="activity_type_running_name">Course à pied</string>
|
||||||
|
<string name="activity_type_walking_name">Marche</string>
|
||||||
|
<string name="activity_type_car_name">Voiture</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3998,4 +3998,35 @@ Lon %2$s</string>
|
||||||
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
||||||
<string name="message_server_error">Erro do servidor: %1$s</string>
|
<string name="message_server_error">Erro do servidor: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">O nome xa existe</string>
|
<string name="message_name_is_already_exists">O nome xa existe</string>
|
||||||
|
<string name="analyze_by_intervals">Analizar intres divididos</string>
|
||||||
|
<string name="upload_to_openstreetmap">Subir ao OpenStreetMap</string>
|
||||||
|
<string name="edit_track">Editar pista</string>
|
||||||
|
<string name="rename_track">Renomear pista</string>
|
||||||
|
<string name="change_folder">Mudar cartafol</string>
|
||||||
|
<string name="shared_string_sec">seg</string>
|
||||||
|
<string name="announcement_time_passing">Pasando</string>
|
||||||
|
<string name="announcement_time_approach">Aproximación</string>
|
||||||
|
<string name="announcement_time_prepare_long">Longa preparación</string>
|
||||||
|
<string name="announcement_time_prepare">Preparar</string>
|
||||||
|
<string name="announcement_time_off_route">Fóra da ruta</string>
|
||||||
|
<string name="delete_online_routing_engine">Eliminar este motor de navegación en liña\?</string>
|
||||||
|
<string name="context_menu_read_full">Ler completo</string>
|
||||||
|
<string name="context_menu_edit_descr">Editar descrición</string>
|
||||||
|
<string name="delete_waypoints">Eliminar puntos de referencia</string>
|
||||||
|
<string name="copy_to_map_markers">Copiar ás marcaxes do mapa</string>
|
||||||
|
<string name="copy_to_map_favorites">Copiar aos favoritos</string>
|
||||||
|
<string name="upload_photo">Subindo</string>
|
||||||
|
<string name="upload_photo_completed">Subida completa</string>
|
||||||
|
<string name="uploading_count">Subindo %1$d de %2$d</string>
|
||||||
|
<string name="uploaded_count">Subíronse %1$d de %2$d</string>
|
||||||
|
<string name="toast_select_edits_for_upload">Seleccionar edicións para subir</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Sombras do relevo / Pendentes / Curvas de nivel</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">O OpenPlaceReviews é un proxecto impulsado pola comunidade sobre lugares públicos como restaurantes, hoteis, museos, puntos de referencia. Recolle toda a información pública sobre eles como imaxes, recesións, ligazóns a outros servizos como OpenStreetMap e Wikipedia.
|
||||||
|
\n
|
||||||
|
\nTodos os datos do OpenPlaceReviews son abertos e están dispoñíbeis para todos: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nPodes ler máis en: https://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Empregar test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Iniciar sesión ao OpenPlaceReviews</string>
|
||||||
</resources>
|
</resources>
|
|
@ -54,7 +54,7 @@
|
||||||
<string name="poi_service_tyres">Autógumi-szerelő</string>
|
<string name="poi_service_tyres">Autógumi-szerelő</string>
|
||||||
<string name="poi_car_wash">Autómosó</string>
|
<string name="poi_car_wash">Autómosó</string>
|
||||||
<string name="poi_fuel">Benzinkút;Töltőállomás;Gázolajtöltő-állomás</string>
|
<string name="poi_fuel">Benzinkút;Töltőállomás;Gázolajtöltő-állomás</string>
|
||||||
<string name="poi_electricity_combined_charging">Elektromos töltőállomás</string>
|
<string name="poi_electricity_combined_charging">Elektromos töltőállomás;Elektromos autó töltése;Villanyautó töltése;Elektromos töltőpont</string>
|
||||||
<string name="poi_compressed_air">Sűrített levegő</string>
|
<string name="poi_compressed_air">Sűrített levegő</string>
|
||||||
<string name="poi_parking">Parkoló</string>
|
<string name="poi_parking">Parkoló</string>
|
||||||
<string name="poi_motorcycle_parking">Motorkerékpár-parkoló</string>
|
<string name="poi_motorcycle_parking">Motorkerékpár-parkoló</string>
|
||||||
|
@ -3879,4 +3879,14 @@
|
||||||
<string name="poi_wildlife_crossing_bat_tunnel">Denevéralagút</string>
|
<string name="poi_wildlife_crossing_bat_tunnel">Denevéralagút</string>
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">Denevérhíd</string>
|
<string name="poi_wildlife_crossing_bat_bridge">Denevérhíd</string>
|
||||||
<string name="poi_wildlife_crossing">Vadátjáró</string>
|
<string name="poi_wildlife_crossing">Vadátjáró</string>
|
||||||
|
<string name="poi_summit_register_no">Csúcsnapló nincs</string>
|
||||||
|
<string name="poi_summit_register_yes">Csúcsnapló van</string>
|
||||||
|
<string name="poi_patrolled_no">Hegyi mentő nincs</string>
|
||||||
|
<string name="poi_patrolled_yes">Hegyi mentő van</string>
|
||||||
|
<string name="poi_gladed_yes">Erdei pálya</string>
|
||||||
|
<string name="poi_mobile_library">Mozgó könyvtár tartózkodási helye</string>
|
||||||
|
<string name="poi_piste_status_closed">Pálya állapota: zárva</string>
|
||||||
|
<string name="poi_piste_status_open">Pálya állapota: nyitva</string>
|
||||||
|
<string name="poi_piste_name">Pálya neve</string>
|
||||||
|
<string name="poi_piste_ski_jump">Síugrósánc</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3881,4 +3881,14 @@
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">Brú fyrir leðurblökur</string>
|
<string name="poi_wildlife_crossing_bat_bridge">Brú fyrir leðurblökur</string>
|
||||||
<string name="poi_wildlife_crossing">Þverun villtra dýra</string>
|
<string name="poi_wildlife_crossing">Þverun villtra dýra</string>
|
||||||
<string name="poi_swimming_area">Sundsvæði</string>
|
<string name="poi_swimming_area">Sundsvæði</string>
|
||||||
|
<string name="poi_mobile_library">Stæði fyrir bókabíl</string>
|
||||||
|
<string name="poi_summit_register_no">Skráning á tind: nei</string>
|
||||||
|
<string name="poi_summit_register_yes">Skráning á tind: já</string>
|
||||||
|
<string name="poi_piste_status_closed">Staða brautar: lokuð</string>
|
||||||
|
<string name="poi_piste_status_open">Staða brautar: opin</string>
|
||||||
|
<string name="poi_patrolled_no">Eftirlit: nei</string>
|
||||||
|
<string name="poi_patrolled_yes">Eftirlit: já</string>
|
||||||
|
<string name="poi_gladed_yes">Skafið: já</string>
|
||||||
|
<string name="poi_piste_name">Heiti brautar</string>
|
||||||
|
<string name="poi_piste_ski_jump">Skíðastökk</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3972,7 +3972,7 @@
|
||||||
<string name="select_folder">Veldu möppu</string>
|
<string name="select_folder">Veldu möppu</string>
|
||||||
<string name="select_folder_descr">Veldu möppu eða bættu við nýrri</string>
|
<string name="select_folder_descr">Veldu möppu eða bættu við nýrri</string>
|
||||||
<string name="shared_string_empty">Tómt</string>
|
<string name="shared_string_empty">Tómt</string>
|
||||||
<string name="analyze_by_intervals">Greina eftir millibilum (uppskipting millibila)</string>
|
<string name="analyze_by_intervals">Greina eftir uppskiptingu millibila</string>
|
||||||
<string name="upload_to_openstreetmap">Senda inn í OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Senda inn í OpenStreetMap</string>
|
||||||
<string name="edit_track">Breyta ferli</string>
|
<string name="edit_track">Breyta ferli</string>
|
||||||
<string name="rename_track">Endurnefna feril</string>
|
<string name="rename_track">Endurnefna feril</string>
|
||||||
|
@ -4005,4 +4005,32 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">Fjallahjól</string>
|
<string name="routing_engine_vehicle_type_mtb">Fjallahjól</string>
|
||||||
<string name="message_server_error">Villa í netþjóni: %1$s</string>
|
<string name="message_server_error">Villa í netþjóni: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Nafnið er þegar til staðar</string>
|
<string name="message_name_is_already_exists">Nafnið er þegar til staðar</string>
|
||||||
|
<string name="delete_online_routing_engine">Eyða þessari leiðagerð á netinu\?</string>
|
||||||
|
<string name="context_menu_read_full">Lesa óstytt</string>
|
||||||
|
<string name="context_menu_edit_descr">Breyta lýsingu</string>
|
||||||
|
<string name="delete_waypoints">Eyða ferilpunktum</string>
|
||||||
|
<string name="copy_to_map_markers">Afrita í kortamerki</string>
|
||||||
|
<string name="copy_to_map_favorites">Afrita í eftirlæti</string>
|
||||||
|
<string name="upload_photo">Sendi inn</string>
|
||||||
|
<string name="upload_photo_completed">Innsendingu er lokið</string>
|
||||||
|
<string name="uploading_count">Sendi inn %1$d af %2$d</string>
|
||||||
|
<string name="uploaded_count">Sent inn %1$d af %2$d</string>
|
||||||
|
<string name="toast_select_edits_for_upload">Veldu breytingar til að senda inn</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Hæðaskygging / Halli / Hæðarlínur</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Nota test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Skrá inn á OpenPlaceReviews</string>
|
||||||
|
<string name="activity_type_water_name">Vatn</string>
|
||||||
|
<string name="activity_type_winter_name">Vetur</string>
|
||||||
|
<string name="activity_type_snowmobile_name">Vélsleðar</string>
|
||||||
|
<string name="activity_type_riding_name">Útreiðar</string>
|
||||||
|
<string name="activity_type_racing_name">Kappakstur</string>
|
||||||
|
<string name="activity_type_mountainbike_name">Fjallahjól</string>
|
||||||
|
<string name="activity_type_cycling_name">Hjólreiðar</string>
|
||||||
|
<string name="activity_type_hiking_name">Gönguferðir</string>
|
||||||
|
<string name="activity_type_running_name">Hlaup</string>
|
||||||
|
<string name="activity_type_walking_name">Gangandi</string>
|
||||||
|
<string name="activity_type_offroad_name">Utanvegaakstur</string>
|
||||||
|
<string name="activity_type_motorbike_name">Vélhjól</string>
|
||||||
|
<string name="activity_type_car_name">Akandi</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3925,4 +3925,37 @@
|
||||||
\n"</string>
|
\n"</string>
|
||||||
<string name="plan_route_join_segments">Unisci segmenti</string>
|
<string name="plan_route_join_segments">Unisci segmenti</string>
|
||||||
<string name="plan_route_split_before">Spezza</string>
|
<string name="plan_route_split_before">Spezza</string>
|
||||||
|
<string name="announcement_time_arrive">Arrivo a destinazione</string>
|
||||||
|
<string name="shared_string_turn">Svolta</string>
|
||||||
|
<string name="start_recording">Avvia registrazione</string>
|
||||||
|
<string name="show_track_on_map">Mostra il percorso sulla mappa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Sedia a rotelle</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Escursionismo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">A piedi</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Mezzi pesanti</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Camion</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Scooter</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Bici da corsa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
|
<string name="message_server_error">Errore del server: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">Il nome esiste già</string>
|
||||||
|
<string name="delete_online_routing_engine">Eliminare questo motore di routing online\?</string>
|
||||||
|
<string name="context_menu_edit_descr">Modifica descrizione</string>
|
||||||
|
<string name="delete_waypoints">Elimina i waypoint</string>
|
||||||
|
<string name="copy_to_map_markers">Aggiungi ai marcatori</string>
|
||||||
|
<string name="copy_to_map_favorites">Copia nei preferiti</string>
|
||||||
|
<string name="upload_photo">Caricamento</string>
|
||||||
|
<string name="upload_photo_completed">Caricamento completato</string>
|
||||||
|
<string name="uploading_count">Carico %1$d di %2$d</string>
|
||||||
|
<string name="uploaded_count">Caricati %1$d di %2$d</string>
|
||||||
|
<string name="toast_select_edits_for_upload">Seleziona le modifiche per il caricamento</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Hillshade / Pendenza / Linee di contorno</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews è un progetto community-driven su luoghi pubblici come ristoranti, hotel, musei, waypoint. Raccoglie tutte le informazioni pubbliche su di essi come foto, recensioni, link ad altri sistemi che collegano OpenStreetMap, Wikipedia.
|
||||||
|
\n
|
||||||
|
\nTutti i dati di OpenPlaceReview sono aperti e disponibili a tutti: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nPer maggiori informazioni: http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">Usa test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">Accedi a OpenPlaceReviews</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3970,7 +3970,7 @@
|
||||||
<string name="select_folder">בחירת תקינה</string>
|
<string name="select_folder">בחירת תקינה</string>
|
||||||
<string name="select_folder_descr">נא לבחור תיקייה או להוסיף אחת חדשה</string>
|
<string name="select_folder_descr">נא לבחור תיקייה או להוסיף אחת חדשה</string>
|
||||||
<string name="shared_string_empty">ריק</string>
|
<string name="shared_string_empty">ריק</string>
|
||||||
<string name="analyze_by_intervals">ניתוח לפי מרווחים (פיצול מרווחים)</string>
|
<string name="analyze_by_intervals">ניתוח מרווחי פיצול</string>
|
||||||
<string name="upload_to_openstreetmap">העלאה ל־OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">העלאה ל־OpenStreetMap</string>
|
||||||
<string name="edit_track">עריכת מסלול</string>
|
<string name="edit_track">עריכת מסלול</string>
|
||||||
<string name="rename_track">שינוי שם מסלול</string>
|
<string name="rename_track">שינוי שם מסלול</string>
|
||||||
|
@ -4013,4 +4013,14 @@
|
||||||
<string name="uploading_count">נשלחות %1$d מתוך %2$d</string>
|
<string name="uploading_count">נשלחות %1$d מתוך %2$d</string>
|
||||||
<string name="uploaded_count">נשלחו %1$d מתוך %2$d</string>
|
<string name="uploaded_count">נשלחו %1$d מתוך %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">נא לבחור עריכות לשליחה</string>
|
<string name="toast_select_edits_for_upload">נא לבחור עריכות לשליחה</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">להשתמש ב־test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">כניסה ל־OpenPlaceReviews</string>
|
||||||
|
<string name="announcement_time_descr">זמן ההכרזה של ההנחיות הקוליות השונות תלוי בסוג ההכרזה, במהירות הניווט הנוכחית ובמהירות הניווט כבררת מחדל.</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">הצללה / מדרון / קווי מתאר</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews הוא מיזם בהובלת הקהילה בנוגע למקומות ציבוריים כגון מסעדות, מלונות, מוזיאונים ונקודות דרך. הוא אוסף מידע ציבורי עליהם כגון תמונות, סקירות, קישורים למערכות אחרות שמקושרות ל־OpenStreetMap, ויקיפדיה.
|
||||||
|
\n
|
||||||
|
\nכל הנתונים של OpenPlaceReview הם פתוחים וזמינים לציבור הרחב: http://openplacereviews.org/data.
|
||||||
|
\n
|
||||||
|
\nניתן לקרוא עוד באתר: http://openplacereviews.org</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3881,4 +3881,14 @@
|
||||||
<string name="poi_wildlife_crossing_bat_tunnel">Túnel para morcego</string>
|
<string name="poi_wildlife_crossing_bat_tunnel">Túnel para morcego</string>
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">Ponte para morcego</string>
|
<string name="poi_wildlife_crossing_bat_bridge">Ponte para morcego</string>
|
||||||
<string name="poi_wildlife_crossing">Travessia de vida selvagem</string>
|
<string name="poi_wildlife_crossing">Travessia de vida selvagem</string>
|
||||||
|
<string name="poi_mobile_library">Posição de parada da biblioteca móvel</string>
|
||||||
|
<string name="poi_summit_register_no">Registro de conferência: não</string>
|
||||||
|
<string name="poi_summit_register_yes">Registro de conferência: sim</string>
|
||||||
|
<string name="poi_piste_status_closed">Status da pista: fechada</string>
|
||||||
|
<string name="poi_piste_status_open">Status da pista: aberta</string>
|
||||||
|
<string name="poi_patrolled_no">Patrulhado: não</string>
|
||||||
|
<string name="poi_patrolled_yes">Patrulhado: sim</string>
|
||||||
|
<string name="poi_gladed_yes">Satisfeito: sim</string>
|
||||||
|
<string name="poi_piste_name">Nome da pista</string>
|
||||||
|
<string name="poi_piste_ski_jump">Salto de esqui</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3782,7 +3782,7 @@
|
||||||
<string name="plan_route_change_route_type_before">Alterar o tipo de rota antes</string>
|
<string name="plan_route_change_route_type_before">Alterar o tipo de rota antes</string>
|
||||||
<string name="plan_route_change_route_type_after">Alterar o tipo de rota após</string>
|
<string name="plan_route_change_route_type_after">Alterar o tipo de rota após</string>
|
||||||
<string name="simplified_track">Trilha simplificada</string>
|
<string name="simplified_track">Trilha simplificada</string>
|
||||||
<string name="simplified_track_description">Apenas a linha da rota será salva, os waypoints serão excluídos.</string>
|
<string name="simplified_track_description">Apenas a linha da rota será salva, os pontos de passagem serão excluídos.</string>
|
||||||
<string name="shared_string_file_name">Nome do arquivo</string>
|
<string name="shared_string_file_name">Nome do arquivo</string>
|
||||||
<string name="number_of_gpx_files_selected_pattern">%s arquivos de trilha selecionados</string>
|
<string name="number_of_gpx_files_selected_pattern">%s arquivos de trilha selecionados</string>
|
||||||
<string name="disable_recording_once_app_killed_descrp">O registro de trilhas fará uma pausa quando o aplicativo for encerrado (por meio de aplicativos recentes). (A indicação de segundo plano do OsmAnd desaparece da barra de notificação do Android.)</string>
|
<string name="disable_recording_once_app_killed_descrp">O registro de trilhas fará uma pausa quando o aplicativo for encerrado (por meio de aplicativos recentes). (A indicação de segundo plano do OsmAnd desaparece da barra de notificação do Android.)</string>
|
||||||
|
@ -3962,7 +3962,7 @@
|
||||||
<string name="select_folder">Selecione a pasta</string>
|
<string name="select_folder">Selecione a pasta</string>
|
||||||
<string name="select_folder_descr">Selecione a pasta ou adicione uma nova</string>
|
<string name="select_folder_descr">Selecione a pasta ou adicione uma nova</string>
|
||||||
<string name="shared_string_empty">Vazio</string>
|
<string name="shared_string_empty">Vazio</string>
|
||||||
<string name="analyze_by_intervals">Analisar por intervalos (intervalo de divisão)</string>
|
<string name="analyze_by_intervals">Analisar intervalos de divisão</string>
|
||||||
<string name="upload_to_openstreetmap">Carregar para OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Carregar para OpenStreetMap</string>
|
||||||
<string name="edit_track">Editar trilha</string>
|
<string name="edit_track">Editar trilha</string>
|
||||||
<string name="rename_track">Renomear trilha</string>
|
<string name="rename_track">Renomear trilha</string>
|
||||||
|
@ -4006,4 +4006,5 @@
|
||||||
<string name="uploading_count">Carregando %1$d de %2$d</string>
|
<string name="uploading_count">Carregando %1$d de %2$d</string>
|
||||||
<string name="uploaded_count">Carregado %1$d de %2$d</string>
|
<string name="uploaded_count">Carregado %1$d de %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Selecione as edições para carregamento</string>
|
<string name="toast_select_edits_for_upload">Selecione as edições para carregamento</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Sombras de relevo / Encostas / Curvas de nível</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3878,4 +3878,5 @@
|
||||||
<string name="poi_waste_transfer_station">Станция перекачки отходов</string>
|
<string name="poi_waste_transfer_station">Станция перекачки отходов</string>
|
||||||
<string name="poi_ranger_station">Станция рейнджеров</string>
|
<string name="poi_ranger_station">Станция рейнджеров</string>
|
||||||
<string name="poi_swimming_area">Место для купания</string>
|
<string name="poi_swimming_area">Место для купания</string>
|
||||||
|
<string name="poi_wildlife_crossing">Экодук</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3992,4 +3992,13 @@
|
||||||
<string name="uploading_count">Отправка %1$d из %2$d</string>
|
<string name="uploading_count">Отправка %1$d из %2$d</string>
|
||||||
<string name="uploaded_count">Отправлено %1$d из %2$d</string>
|
<string name="uploaded_count">Отправлено %1$d из %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Выберите правки для отправки</string>
|
<string name="toast_select_edits_for_upload">Выберите правки для отправки</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Рельеф / Уклон/ Контурные линии</string>
|
||||||
|
<string name="shared_string_vehicle">Транспортное средство</string>
|
||||||
|
<string name="routing_engine_vehicle_type_bike">Велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Электрический велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Горный велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Шоссейный велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Обычный велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Гоночный велосипед</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">Горный велосипед</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2415,7 +2415,7 @@
|
||||||
<string name="distance_moving">Vzdialenosť opravená</string>
|
<string name="distance_moving">Vzdialenosť opravená</string>
|
||||||
<string name="shared_string_permissions">Povolenia</string>
|
<string name="shared_string_permissions">Povolenia</string>
|
||||||
<string name="import_gpx_failed_descr">Nepodarilo sa naimportovať súbor. Prosím zabezpečte, že OsmAnd má oprávnenie čítať súbor.</string>
|
<string name="import_gpx_failed_descr">Nepodarilo sa naimportovať súbor. Prosím zabezpečte, že OsmAnd má oprávnenie čítať súbor.</string>
|
||||||
<string name="map_widget_ruler_control">Polomerové pravítko</string>
|
<string name="map_widget_ruler_control">Kruhové pravítko</string>
|
||||||
<string name="shared_string_reset">Resetovať</string>
|
<string name="shared_string_reset">Resetovať</string>
|
||||||
<string name="shared_string_reload">Znovu načítať</string>
|
<string name="shared_string_reload">Znovu načítať</string>
|
||||||
<string name="mapillary_menu_descr_tile_cache">Znovu načítať dlaždice pre získanie aktuálnych dát.</string>
|
<string name="mapillary_menu_descr_tile_cache">Znovu načítať dlaždice pre získanie aktuálnych dát.</string>
|
||||||
|
@ -3580,7 +3580,7 @@
|
||||||
<string name="tracker_item">Stopovanie OsmAnd</string>
|
<string name="tracker_item">Stopovanie OsmAnd</string>
|
||||||
<string name="mapillary_item">OsmAnd + Mapillary</string>
|
<string name="mapillary_item">OsmAnd + Mapillary</string>
|
||||||
<string name="quick_action_item">Rýchla akcia</string>
|
<string name="quick_action_item">Rýchla akcia</string>
|
||||||
<string name="radius_ruler_item">Polomerové pravítko</string>
|
<string name="radius_ruler_item">Kruhové pravítko</string>
|
||||||
<string name="measure_distance_item">Merať vzdialenosť</string>
|
<string name="measure_distance_item">Merať vzdialenosť</string>
|
||||||
<string name="travel_item">Cestovanie (Wikivoyage a Wikipédia)</string>
|
<string name="travel_item">Cestovanie (Wikivoyage a Wikipédia)</string>
|
||||||
<string name="map_markers_item">Mapové značky</string>
|
<string name="map_markers_item">Mapové značky</string>
|
||||||
|
@ -3962,7 +3962,7 @@
|
||||||
<string name="select_folder">Zvoľte priečinok</string>
|
<string name="select_folder">Zvoľte priečinok</string>
|
||||||
<string name="select_folder_descr">Zvoľte priečinok alebo pridajte nový</string>
|
<string name="select_folder_descr">Zvoľte priečinok alebo pridajte nový</string>
|
||||||
<string name="shared_string_empty">Prázdne</string>
|
<string name="shared_string_empty">Prázdne</string>
|
||||||
<string name="analyze_by_intervals">Analyzovať podľa intervalov (rozdeliť interval)</string>
|
<string name="analyze_by_intervals">Analyzovať rozdelené intervaly</string>
|
||||||
<string name="upload_to_openstreetmap">Nahrať do OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Nahrať do OpenStreetMap</string>
|
||||||
<string name="edit_track">Upraviť stopu</string>
|
<string name="edit_track">Upraviť stopu</string>
|
||||||
<string name="rename_track">Premenovať stopu</string>
|
<string name="rename_track">Premenovať stopu</string>
|
||||||
|
@ -4006,4 +4006,5 @@
|
||||||
<string name="uploading_count">Odosiela sa %1$d z %2$d</string>
|
<string name="uploading_count">Odosiela sa %1$d z %2$d</string>
|
||||||
<string name="uploaded_count">Odoslané %1$d z %2$d</string>
|
<string name="uploaded_count">Odoslané %1$d z %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Zvoľte úpravy na odoslanie</string>
|
<string name="toast_select_edits_for_upload">Zvoľte úpravy na odoslanie</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Tieňované svahy / Sklony svahov / Vrstevnice</string>
|
||||||
</resources>
|
</resources>
|
|
@ -502,7 +502,7 @@
|
||||||
<string name="poi_climbing">Tırmanma</string>
|
<string name="poi_climbing">Tırmanma</string>
|
||||||
<string name="poi_cricket">Kriket</string>
|
<string name="poi_cricket">Kriket</string>
|
||||||
<string name="poi_croquet">Kroket</string>
|
<string name="poi_croquet">Kroket</string>
|
||||||
<string name="poi_cycling">Bisiklete binme</string>
|
<string name="poi_cycling">Bisiklet sürme</string>
|
||||||
<string name="poi_diving">Dalış</string>
|
<string name="poi_diving">Dalış</string>
|
||||||
<string name="poi_scuba_diving">Tüplü dalış</string>
|
<string name="poi_scuba_diving">Tüplü dalış</string>
|
||||||
<string name="poi_dog_racing">Köpek yarışı</string>
|
<string name="poi_dog_racing">Köpek yarışı</string>
|
||||||
|
|
|
@ -2227,7 +2227,7 @@
|
||||||
<string name="marker_save_as_track_descr">İşaretleyicilerinizi şu GPX dosyasına aktarın:</string>
|
<string name="marker_save_as_track_descr">İşaretleyicilerinizi şu GPX dosyasına aktarın:</string>
|
||||||
<string name="show_arrows_on_the_map">Haritada yön gösterici okları göster</string>
|
<string name="show_arrows_on_the_map">Haritada yön gösterici okları göster</string>
|
||||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd seçilmiş profil için rotalı noktalara bağlanacak.</string>
|
<string name="measurement_tool_snap_to_road_descr">OsmAnd seçilmiş profil için rotalı noktalara bağlanacak.</string>
|
||||||
<string name="none_point_error">Lütfen en az bir nokta ekleyiniz.</string>
|
<string name="none_point_error">Lütfen en az bir nokta ekleyin.</string>
|
||||||
<string name="measurement_tool_action_bar">Haritayı görüntüle ve nokta ekle</string>
|
<string name="measurement_tool_action_bar">Haritayı görüntüle ve nokta ekle</string>
|
||||||
<string name="store_tracks_in_monthly_directories">Kaydedilmiş izlenen yolları aylık klasörlerde depola</string>
|
<string name="store_tracks_in_monthly_directories">Kaydedilmiş izlenen yolları aylık klasörlerde depola</string>
|
||||||
<string name="mapillary_menu_filter_description">Resimleri göndericiye, tarihe ya da türüne göre filtreleyin. Sadece yakın mesafe yakınlaştırmasında etkin.</string>
|
<string name="mapillary_menu_filter_description">Resimleri göndericiye, tarihe ya da türüne göre filtreleyin. Sadece yakın mesafe yakınlaştırmasında etkin.</string>
|
||||||
|
@ -3738,7 +3738,7 @@
|
||||||
<string name="track_coloring_solid">Koyu</string>
|
<string name="track_coloring_solid">Koyu</string>
|
||||||
<string name="plan_route_last_edited">Son düzenleme</string>
|
<string name="plan_route_last_edited">Son düzenleme</string>
|
||||||
<string name="plan_route_import_track">Yolu içe aktar</string>
|
<string name="plan_route_import_track">Yolu içe aktar</string>
|
||||||
<string name="plan_route_open_existing_track">Mevcut yolu aç</string>
|
<string name="plan_route_open_existing_track">Var olan yolu aç</string>
|
||||||
<string name="plan_route_create_new_route">Yeni güzergah oluştur</string>
|
<string name="plan_route_create_new_route">Yeni güzergah oluştur</string>
|
||||||
<string name="plan_route_select_track_file_for_open">Açmak için bir yol dosyası seçin.</string>
|
<string name="plan_route_select_track_file_for_open">Açmak için bir yol dosyası seçin.</string>
|
||||||
<string name="shared_string_done">Bitti</string>
|
<string name="shared_string_done">Bitti</string>
|
||||||
|
@ -3968,7 +3968,7 @@
|
||||||
<string name="select_folder">Klasör seç</string>
|
<string name="select_folder">Klasör seç</string>
|
||||||
<string name="select_folder_descr">Klasör seçin veya yeni bir tane ekleyin</string>
|
<string name="select_folder_descr">Klasör seçin veya yeni bir tane ekleyin</string>
|
||||||
<string name="shared_string_empty">Boş</string>
|
<string name="shared_string_empty">Boş</string>
|
||||||
<string name="analyze_by_intervals">Aralıklara göre analiz et (bölme aralığı)</string>
|
<string name="analyze_by_intervals">Bölünmüş aralıkları analiz et</string>
|
||||||
<string name="upload_to_openstreetmap">OpenStreetMap\'e yükle</string>
|
<string name="upload_to_openstreetmap">OpenStreetMap\'e yükle</string>
|
||||||
<string name="edit_track">Yolu düzenle</string>
|
<string name="edit_track">Yolu düzenle</string>
|
||||||
<string name="rename_track">Yolu yeniden adlandır</string>
|
<string name="rename_track">Yolu yeniden adlandır</string>
|
||||||
|
@ -4012,4 +4012,26 @@
|
||||||
<string name="uploading_count">%1$d / %2$d karşıya yükleniyor</string>
|
<string name="uploading_count">%1$d / %2$d karşıya yükleniyor</string>
|
||||||
<string name="uploaded_count">%1$d / %2$d karşıya yüklendi</string>
|
<string name="uploaded_count">%1$d / %2$d karşıya yüklendi</string>
|
||||||
<string name="toast_select_edits_for_upload">Karşıya yüklenecek düzenlemeleri seçin</string>
|
<string name="toast_select_edits_for_upload">Karşıya yüklenecek düzenlemeleri seçin</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">tepe gölgesi / yamaç / eş yükselti eğrileri</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews, restoranlar, oteller, müzeler, ara noktalar gibi halka açık yerler hakkında topluluk tarafından yürütülen bir projedir. Fotoğraflar, yorumlar, OpenStreetMap, Wikipedia gibi diğer sistemlere bağlantılar gibi onlar hakkındaki tüm halka açık bilgileri toplar.
|
||||||
|
\n
|
||||||
|
\nTüm OpenPlaceReview verileri açık ve herkes tarafından kullanılabilir: http://openplacereviews.org/data
|
||||||
|
\n
|
||||||
|
\nDaha fazlasını şu adresten okuyabilirsiniz: http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">test.openplacereviews.org adresini kullan</string>
|
||||||
|
<string name="login_open_place_reviews">OpenPlaceReviews\'te oturum aç</string>
|
||||||
|
<string name="activity_type_water_name">Su</string>
|
||||||
|
<string name="activity_type_winter_name">Kış</string>
|
||||||
|
<string name="activity_type_snowmobile_name">Kar arabası</string>
|
||||||
|
<string name="activity_type_riding_name">Binme</string>
|
||||||
|
<string name="activity_type_racing_name">Yarış</string>
|
||||||
|
<string name="activity_type_mountainbike_name">Dağ bisikleti</string>
|
||||||
|
<string name="activity_type_cycling_name">Bisiklet sürme</string>
|
||||||
|
<string name="activity_type_hiking_name">Yürüyüş</string>
|
||||||
|
<string name="activity_type_running_name">Koşma</string>
|
||||||
|
<string name="activity_type_walking_name">Yürüme</string>
|
||||||
|
<string name="activity_type_offroad_name">Arazi</string>
|
||||||
|
<string name="activity_type_motorbike_name">Motosiklet</string>
|
||||||
|
<string name="activity_type_car_name">Araba</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3881,4 +3881,10 @@
|
||||||
<string name="poi_wildlife_crossing_bat_tunnel">Тунель кажанів</string>
|
<string name="poi_wildlife_crossing_bat_tunnel">Тунель кажанів</string>
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">Міст кажанів</string>
|
<string name="poi_wildlife_crossing_bat_bridge">Міст кажанів</string>
|
||||||
<string name="poi_wildlife_crossing">Переправа диких тварин</string>
|
<string name="poi_wildlife_crossing">Переправа диких тварин</string>
|
||||||
|
<string name="poi_piste_status_closed">Стан траси: зачинена</string>
|
||||||
|
<string name="poi_piste_status_open">Стан траси: відчинена</string>
|
||||||
|
<string name="poi_patrolled_no">Патрулюється: ні</string>
|
||||||
|
<string name="poi_patrolled_yes">Патрулюється: так</string>
|
||||||
|
<string name="poi_piste_name">Назва траси</string>
|
||||||
|
<string name="poi_piste_ski_jump">Cтрибки на лижах</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2971,7 +2971,7 @@
|
||||||
<string name="app_mode_skiing">Лижі</string>
|
<string name="app_mode_skiing">Лижі</string>
|
||||||
<string name="base_profile_descr_ski">Лижі</string>
|
<string name="base_profile_descr_ski">Лижі</string>
|
||||||
<string name="show_compass_ruler">Показати компас-лінійку</string>
|
<string name="show_compass_ruler">Показати компас-лінійку</string>
|
||||||
<string name="hide_compass_ruler">Приховати компас-лінійку</string>
|
<string name="hide_compass_ruler">Сховати компас-лінійку</string>
|
||||||
<string name="select_icon_profile_dialog_title">Оберіть значок</string>
|
<string name="select_icon_profile_dialog_title">Оберіть значок</string>
|
||||||
<string name="settings_routing_mode_string">Режим: %s</string>
|
<string name="settings_routing_mode_string">Режим: %s</string>
|
||||||
<string name="settings_derived_routing_mode_string">Користувацький режим, похідний від: %s</string>
|
<string name="settings_derived_routing_mode_string">Користувацький режим, похідний від: %s</string>
|
||||||
|
@ -2988,7 +2988,7 @@
|
||||||
<string name="profile_alert_need_save_title">Зберегти зміни</string>
|
<string name="profile_alert_need_save_title">Зберегти зміни</string>
|
||||||
<string name="profile_alert_need_save_msg">Спочатку збережіть зміни в профілі</string>
|
<string name="profile_alert_need_save_msg">Спочатку збережіть зміни в профілі</string>
|
||||||
<string name="profile_alert_delete_title">Видалити профіль</string>
|
<string name="profile_alert_delete_title">Видалити профіль</string>
|
||||||
<string name="profile_alert_delete_msg">Ви дійсно хочете видалити профіль %s\?</string>
|
<string name="profile_alert_delete_msg">Ви дійсно хочете видалити профіль «%s»</string>
|
||||||
<string name="select_base_profile_dialog_title">Виберіть профіль для початку</string>
|
<string name="select_base_profile_dialog_title">Виберіть профіль для початку</string>
|
||||||
<string name="process_downloading_service">Служба завантаження OsmAnd</string>
|
<string name="process_downloading_service">Служба завантаження OsmAnd</string>
|
||||||
<string name="shared_string_color_magenta">Пурпуровий</string>
|
<string name="shared_string_color_magenta">Пурпуровий</string>
|
||||||
|
@ -3302,7 +3302,7 @@
|
||||||
<string name="added_profiles_descr">Профілі, додані втулком</string>
|
<string name="added_profiles_descr">Профілі, додані втулком</string>
|
||||||
<string name="shared_string_turn_off">Вимкнути</string>
|
<string name="shared_string_turn_off">Вимкнути</string>
|
||||||
<string name="new_plugin_added">Нова втулка додана</string>
|
<string name="new_plugin_added">Нова втулка додана</string>
|
||||||
<string name="join_segments">Приєднати частки</string>
|
<string name="join_segments">Об’єднати сегменти</string>
|
||||||
<string name="add_new_profile_q">Додати новий профіль \'%1$s\'\?</string>
|
<string name="add_new_profile_q">Додати новий профіль \'%1$s\'\?</string>
|
||||||
<string name="save_heading">Зберегти заголовок</string>
|
<string name="save_heading">Зберегти заголовок</string>
|
||||||
<string name="save_heading_descr">Зберегти заголовок для кожної точки треку під час запису.</string>
|
<string name="save_heading_descr">Зберегти заголовок для кожної точки треку під час запису.</string>
|
||||||
|
@ -3736,7 +3736,7 @@
|
||||||
<string name="track_coloring_solid">Суцільний</string>
|
<string name="track_coloring_solid">Суцільний</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>
|
||||||
<string name="plan_route_create_new_route">Створити новий маршрут</string>
|
<string name="plan_route_create_new_route">Створити новий маршрут</string>
|
||||||
<string name="plan_route_select_track_file_for_open">Виберіть який файл з треком відкрити.</string>
|
<string name="plan_route_select_track_file_for_open">Виберіть який файл з треком відкрити.</string>
|
||||||
<string name="shared_string_done">Готово</string>
|
<string name="shared_string_done">Готово</string>
|
||||||
|
@ -3966,7 +3966,7 @@
|
||||||
<string name="select_folder">Вибрати теку</string>
|
<string name="select_folder">Вибрати теку</string>
|
||||||
<string name="select_folder_descr">Виберіть теку або додайте нову</string>
|
<string name="select_folder_descr">Виберіть теку або додайте нову</string>
|
||||||
<string name="shared_string_empty">Порожньо</string>
|
<string name="shared_string_empty">Порожньо</string>
|
||||||
<string name="analyze_by_intervals">Аналіз за інтервалами (розділений інтервал)</string>
|
<string name="analyze_by_intervals">Аналізувати розділені інтервали</string>
|
||||||
<string name="upload_to_openstreetmap">Відвантажити на OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">Відвантажити на OpenStreetMap</string>
|
||||||
<string name="edit_track">Редагувати трек</string>
|
<string name="edit_track">Редагувати трек</string>
|
||||||
<string name="rename_track">Перейменувати трек</string>
|
<string name="rename_track">Перейменувати трек</string>
|
||||||
|
@ -4010,4 +4010,5 @@
|
||||||
<string name="uploading_count">Вивантаження %1$d з %2$d</string>
|
<string name="uploading_count">Вивантаження %1$d з %2$d</string>
|
||||||
<string name="uploaded_count">Вивантажено %1$d з %2$d</string>
|
<string name="uploaded_count">Вивантажено %1$d з %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">Виберіть зміни для вивантаження</string>
|
<string name="toast_select_edits_for_upload">Виберіть зміни для вивантаження</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">Рельєф місцевості / Схили / Горизонталі</string>
|
||||||
</resources>
|
</resources>
|
|
@ -35,7 +35,7 @@
|
||||||
<string name="avoid_motorway">避開高速路</string>
|
<string name="avoid_motorway">避開高速路</string>
|
||||||
<string name="auto_zoom_map">自动缩放地图</string>
|
<string name="auto_zoom_map">自动缩放地图</string>
|
||||||
<string name="recalculate_route_to_your_location">運輸方式:</string>
|
<string name="recalculate_route_to_your_location">運輸方式:</string>
|
||||||
<string name="select_navigation_mode">選擇傳輸模式</string>
|
<string name="select_navigation_mode">运输模式:</string>
|
||||||
<string name="map_widget_renderer">地图风格</string>
|
<string name="map_widget_renderer">地图风格</string>
|
||||||
<string name="map_widget_fluorescent">熒光路線</string>
|
<string name="map_widget_fluorescent">熒光路線</string>
|
||||||
<string name="map_widget_show_ruler">統治者</string>
|
<string name="map_widget_show_ruler">統治者</string>
|
||||||
|
@ -430,9 +430,9 @@
|
||||||
<string name="local_indexes_cat_srtm">等高线数据</string>
|
<string name="local_indexes_cat_srtm">等高线数据</string>
|
||||||
<string name="av_def_action_video">录制视频</string>
|
<string name="av_def_action_video">录制视频</string>
|
||||||
<string name="av_def_action_audio">录制音频</string>
|
<string name="av_def_action_audio">录制音频</string>
|
||||||
<string name="av_widget_action_descr">选择缺省窗体动作。</string>
|
<string name="av_widget_action_descr">默认小部件操作:</string>
|
||||||
<string name="av_widget_action">缺省窗体动作</string>
|
<string name="av_widget_action">缺省窗体动作</string>
|
||||||
<string name="av_video_format_descr">选择视频输出格式。</string>
|
<string name="av_video_format_descr">视频输出格式:</string>
|
||||||
<string name="av_video_format">视频输出格式</string>
|
<string name="av_video_format">视频输出格式</string>
|
||||||
<string name="av_use_external_recorder_descr">使用系统程序录制视频。</string>
|
<string name="av_use_external_recorder_descr">使用系统程序录制视频。</string>
|
||||||
<string name="av_use_external_camera_descr">使用系统程序拍照</string>
|
<string name="av_use_external_camera_descr">使用系统程序拍照</string>
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
<string name="map_widget_mini_route">路线小地图</string>
|
<string name="map_widget_mini_route">路线小地图</string>
|
||||||
<string name="bg_service_interval">设置唤醒间隔:</string>
|
<string name="bg_service_interval">设置唤醒间隔:</string>
|
||||||
<string name="continue_follow_previous_route_auto">上次导航未完成。是否继续?(%1$s 秒)</string>
|
<string name="continue_follow_previous_route_auto">上次导航未完成。是否继续?(%1$s 秒)</string>
|
||||||
<string name="select_animate_speedup">选择模拟导航速度</string>
|
<string name="select_animate_speedup">路线模拟速度:</string>
|
||||||
<string name="global_app_allocated_memory_descr">已分配内存 %1$s MB (Android 限制 %2$s MB,Dalvik %3$s MB)。</string>
|
<string name="global_app_allocated_memory_descr">已分配内存 %1$s MB (Android 限制 %2$s MB,Dalvik %3$s MB)。</string>
|
||||||
<string name="shared_location">分享位置</string>
|
<string name="shared_location">分享位置</string>
|
||||||
<string name="osmand_parking_lim_text">有时间限制</string>
|
<string name="osmand_parking_lim_text">有时间限制</string>
|
||||||
|
@ -555,7 +555,7 @@
|
||||||
<string name="animate_route">开始模拟导航</string>
|
<string name="animate_route">开始模拟导航</string>
|
||||||
<string name="file_can_not_be_renamed">文件无法重命名。</string>
|
<string name="file_can_not_be_renamed">文件无法重命名。</string>
|
||||||
<string name="file_with_name_already_exists">同名文件已存在。</string>
|
<string name="file_with_name_already_exists">同名文件已存在。</string>
|
||||||
<string name="poi_query_by_name_matches_categories">找到多个满足查询的POI类别:</string>
|
<string name="poi_query_by_name_matches_categories">找到了几个相关的 POI 类别。</string>
|
||||||
<string name="data_to_search_poi_not_available">用于搜索POI的本地数据不存在。</string>
|
<string name="data_to_search_poi_not_available">用于搜索POI的本地数据不存在。</string>
|
||||||
<string name="poi_filter_by_name">按名称搜索</string>
|
<string name="poi_filter_by_name">按名称搜索</string>
|
||||||
<string name="old_poi_file_should_be_deleted">兴趣点数据文件 \'%1$s\' 是多余的,可以删除。</string>
|
<string name="old_poi_file_should_be_deleted">兴趣点数据文件 \'%1$s\' 是多余的,可以删除。</string>
|
||||||
|
@ -2020,7 +2020,7 @@
|
||||||
<string name="first_time_msg">感谢您使用 OsmAnd。对于此应用程序的许多功能,您需要一些地区的离线数据,您可以透过\'设置\' -> \'管理地图文件\'来下载。之后您可浏览地图、位置的地址、查看兴趣点以及寻找大众运输工具。</string>
|
<string name="first_time_msg">感谢您使用 OsmAnd。对于此应用程序的许多功能,您需要一些地区的离线数据,您可以透过\'设置\' -> \'管理地图文件\'来下载。之后您可浏览地图、位置的地址、查看兴趣点以及寻找大众运输工具。</string>
|
||||||
<string name="basemap_was_selected_to_download">底图为某些特别的应用功能必需使用的,并且缺省为下载。</string>
|
<string name="basemap_was_selected_to_download">底图为某些特别的应用功能必需使用的,并且缺省为下载。</string>
|
||||||
<string name="prefs_plugins_descr">启动插件的高级设置和更多的附加功能。</string>
|
<string name="prefs_plugins_descr">启动插件的高级设置和更多的附加功能。</string>
|
||||||
<string name="play_commands_of_currently_selected_voice">用所选择的语音播放指令</string>
|
<string name="play_commands_of_currently_selected_voice">通过播放通知选择语音和测试:</string>
|
||||||
<string name="back_to_location">回到目前位置</string>
|
<string name="back_to_location">回到目前位置</string>
|
||||||
<string name="direction_style_sidewise">横向(8 个扇区)</string>
|
<string name="direction_style_sidewise">横向(8 个扇区)</string>
|
||||||
<string name="direction_style_clockwise">顺时针(12 个扇区)</string>
|
<string name="direction_style_clockwise">顺时针(12 个扇区)</string>
|
||||||
|
@ -2663,7 +2663,7 @@
|
||||||
<string name="shared_string_travel_book">旅游书</string>
|
<string name="shared_string_travel_book">旅游书</string>
|
||||||
<string name="download_images">下载图片</string>
|
<string name="download_images">下载图片</string>
|
||||||
<string name="rendering_value_black_name">黑色</string>
|
<string name="rendering_value_black_name">黑色</string>
|
||||||
<string name="rendering_attr_surface_wood_name">木</string>
|
<string name="rendering_attr_surface_wood_name">木头</string>
|
||||||
<string name="app_mode_subway">地铁</string>
|
<string name="app_mode_subway">地铁</string>
|
||||||
<string name="app_mode_horse">骑马</string>
|
<string name="app_mode_horse">骑马</string>
|
||||||
<string name="shared_string_color_magenta">品红色</string>
|
<string name="shared_string_color_magenta">品红色</string>
|
||||||
|
@ -2674,7 +2674,7 @@
|
||||||
<string name="points_of_interests">兴趣点(POI)</string>
|
<string name="points_of_interests">兴趣点(POI)</string>
|
||||||
<string name="shared_string_capacity">容量</string>
|
<string name="shared_string_capacity">容量</string>
|
||||||
<string name="rendering_attr_surface_metal_name">金属</string>
|
<string name="rendering_attr_surface_metal_name">金属</string>
|
||||||
<string name="rendering_attr_highway_class_path_name">路径</string>
|
<string name="rendering_attr_highway_class_path_name">走道</string>
|
||||||
<string name="app_mode_helicopter">直升机</string>
|
<string name="app_mode_helicopter">直升机</string>
|
||||||
<string name="app_mode_skiing">滑雪</string>
|
<string name="app_mode_skiing">滑雪</string>
|
||||||
<string name="base_profile_descr_ski">滑雪</string>
|
<string name="base_profile_descr_ski">滑雪</string>
|
||||||
|
@ -2839,7 +2839,7 @@
|
||||||
<string name="show_closed_notes">显示关闭的注记</string>
|
<string name="show_closed_notes">显示关闭的注记</string>
|
||||||
<string name="osm_edit_closed_note">关闭的OSM注记</string>
|
<string name="osm_edit_closed_note">关闭的OSM注记</string>
|
||||||
<string name="add_online_source">添加在线资源</string>
|
<string name="add_online_source">添加在线资源</string>
|
||||||
<string name="rendering_attr_highway_class_bridleway_name"/>
|
<string name="rendering_attr_highway_class_bridleway_name">驮道</string>
|
||||||
<string name="rendering_attr_surface_gravel_name">砾石</string>
|
<string name="rendering_attr_surface_gravel_name">砾石</string>
|
||||||
<string name="rendering_attr_surface_sett_name">比利时石砌路</string>
|
<string name="rendering_attr_surface_sett_name">比利时石砌路</string>
|
||||||
<string name="routing_attr_allow_expert_name">允许专家路线</string>
|
<string name="routing_attr_allow_expert_name">允许专家路线</string>
|
||||||
|
@ -3068,7 +3068,7 @@
|
||||||
<string name="expire_time">到期时间</string>
|
<string name="expire_time">到期时间</string>
|
||||||
<string name="tiles_storage_descr">选择如何储存下载的数据。</string>
|
<string name="tiles_storage_descr">选择如何储存下载的数据。</string>
|
||||||
<string name="export_import_quick_actions_with_profiles_promo">你可以在应用配置中导入导出快捷操作。</string>
|
<string name="export_import_quick_actions_with_profiles_promo">你可以在应用配置中导入导出快捷操作。</string>
|
||||||
<string name="delete_all_actions_message_q">你确定要删除%d快捷操作吗?</string>
|
<string name="delete_all_actions_message_q">你确定要不可撤销地删除 %d 快捷操作吗?</string>
|
||||||
<string name="speed_cameras_legal_descr">在某些国家或地区,使用测速摄像头提示应用是非法的。
|
<string name="speed_cameras_legal_descr">在某些国家或地区,使用测速摄像头提示应用是非法的。
|
||||||
\n
|
\n
|
||||||
\n你需要根据你所在的国家的法律作出选择。
|
\n你需要根据你所在的国家的法律作出选择。
|
||||||
|
@ -3124,4 +3124,79 @@
|
||||||
<string name="context_menu_item_add_waypoint">添加轨迹航点</string>
|
<string name="context_menu_item_add_waypoint">添加轨迹航点</string>
|
||||||
<string name="save_track_to_gpx_globally">将轨迹记录到GPX文件</string>
|
<string name="save_track_to_gpx_globally">将轨迹记录到GPX文件</string>
|
||||||
<string name="disable_recording_once_app_killed_descrp">当应用程序被杀死时,跟踪日志将被暂停(通过最近的应用程序)。(OsmAnd背景指示会从Android通知栏中消失)。</string>
|
<string name="disable_recording_once_app_killed_descrp">当应用程序被杀死时,跟踪日志将被暂停(通过最近的应用程序)。(OsmAnd背景指示会从Android通知栏中消失)。</string>
|
||||||
|
<string name="add_online_routing_engine">添加在线路线引擎</string>
|
||||||
|
<string name="edit_online_routing_engine">编辑在线路线引擎</string>
|
||||||
|
<string name="shared_string_subtype">子类型</string>
|
||||||
|
<string name="shared_string_vehicle">车辆</string>
|
||||||
|
<string name="shared_string_api_key">API 密钥</string>
|
||||||
|
<string name="shared_string_server_url">服务器 URL</string>
|
||||||
|
<string name="shared_string_enter_param">输入参数</string>
|
||||||
|
<string name="keep_it_empty_if_not">否则请保持空白</string>
|
||||||
|
<string name="test_route_calculation">测试路线计算</string>
|
||||||
|
<string name="routing_engine_vehicle_type_driving">驾驶</string>
|
||||||
|
<string name="routing_engine_vehicle_type_car">汽车</string>
|
||||||
|
<string name="copy_address">复制地址</string>
|
||||||
|
<string name="online_routing_engine">在线路线引擎</string>
|
||||||
|
<string name="online_routing_engines">在线路线引擎</string>
|
||||||
|
<string name="shared_string_folders">文件夹</string>
|
||||||
|
<string name="select_folder">选择文件夹</string>
|
||||||
|
<string name="select_folder_descr">选择文件夹或添加新文件夹</string>
|
||||||
|
<string name="upload_to_openstreetmap">上传到 OpenStreetMap</string>
|
||||||
|
<string name="edit_track">编辑轨迹</string>
|
||||||
|
<string name="rename_track">重命名轨迹</string>
|
||||||
|
<string name="change_folder">更改文件夹</string>
|
||||||
|
<string name="shared_string_sec">秒</string>
|
||||||
|
<string name="announcement_time_passing">通过</string>
|
||||||
|
<string name="announcement_time_prepare_long">长时间准备</string>
|
||||||
|
<string name="announcement_time_prepare">准备</string>
|
||||||
|
<string name="announcement_time_off_route">偏离路线</string>
|
||||||
|
<string name="announcement_time_arrive">到达目的地</string>
|
||||||
|
<string name="shared_string_turn">转弯</string>
|
||||||
|
<string name="announcement_time_intervals">时间和距离间隔</string>
|
||||||
|
<string name="announcement_time_descr">不同语音提示的公告时间取决于提示类型、当前导航速度和默认导航速度。</string>
|
||||||
|
<string name="announcement_time_title">公告时间</string>
|
||||||
|
<string name="start_recording">开始录制</string>
|
||||||
|
<string name="show_track_on_map">在地图上显示轨迹</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">轮椅</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">徒步</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">步行</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">电动自行车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">山地自行车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">公路自行车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">重型货车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">小型卡车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">卡车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">踏板车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">竞速自行车</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">山地车</string>
|
||||||
|
<string name="message_server_error">服务器错误:%1$s</string>
|
||||||
|
<string name="delete_online_routing_engine">删除这个在线路线引擎?</string>
|
||||||
|
<string name="message_name_is_already_exists">名字已经存在</string>
|
||||||
|
<string name="context_menu_read_full">阅读全文</string>
|
||||||
|
<string name="context_menu_edit_descr">编辑描述</string>
|
||||||
|
<string name="delete_waypoints">删除航点</string>
|
||||||
|
<string name="copy_to_map_markers">复制到地图标记</string>
|
||||||
|
<string name="copy_to_map_favorites">复制到收藏</string>
|
||||||
|
<string name="upload_photo">上传中</string>
|
||||||
|
<string name="upload_photo_completed">上传完成</string>
|
||||||
|
<string name="uploading_count">正在上传 %1$d,共 %2$d</string>
|
||||||
|
<string name="toast_select_edits_for_upload">选择要上传的编辑</string>
|
||||||
|
<string name="uploaded_count">已上传 %1$d,共 %2$d</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">山体阴影/斜坡/等高线</string>
|
||||||
|
<string name="open_place_reviews_plugin_description">OpenPlaceReviews 是一个社区驱动的项目,关于公共场所,如餐馆,酒店,博物馆,航点。它收集了所有关于它们的公共信息,如照片、评论、链接到其他系统的 OpenStreetMap、维基百科。
|
||||||
|
\n
|
||||||
|
\n所有 OpenPlaceReview 的数据都是开放的,所有人都可以使用:http://openplacereviews.org/data。
|
||||||
|
\n
|
||||||
|
\n你可以在以下网站阅读更多信息:http://openplacereviews.org</string>
|
||||||
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
<string name="opr_use_dev_url">使用 test.openplacereviews.org</string>
|
||||||
|
<string name="login_open_place_reviews">登录 OpenPlaceReviews</string>
|
||||||
|
<string name="activity_type_winter_name">冬季</string>
|
||||||
|
<string name="activity_type_snowmobile_name">雪地摩托</string>
|
||||||
|
<string name="activity_type_riding_name">骑行</string>
|
||||||
|
<string name="activity_type_cycling_name">骑车</string>
|
||||||
|
<string name="activity_type_hiking_name">健行</string>
|
||||||
|
<string name="activity_type_running_name">跑步</string>
|
||||||
|
<string name="activity_type_walking_name">步行</string>
|
||||||
|
<string name="activity_type_motorbike_name">摩托车</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3881,4 +3881,14 @@
|
||||||
<string name="poi_wildlife_crossing_bat_tunnel">蝙蝠隧道</string>
|
<string name="poi_wildlife_crossing_bat_tunnel">蝙蝠隧道</string>
|
||||||
<string name="poi_wildlife_crossing_bat_bridge">蝙蝠橋</string>
|
<string name="poi_wildlife_crossing_bat_bridge">蝙蝠橋</string>
|
||||||
<string name="poi_wildlife_crossing">野生動物穿越</string>
|
<string name="poi_wildlife_crossing">野生動物穿越</string>
|
||||||
|
<string name="poi_mobile_library">行動圖書館停放位置</string>
|
||||||
|
<string name="poi_summit_register_no">峰頂紀錄:否</string>
|
||||||
|
<string name="poi_summit_register_yes">峰頂紀錄:是</string>
|
||||||
|
<string name="poi_piste_status_closed">滑雪道狀態:關閉</string>
|
||||||
|
<string name="poi_piste_status_open">滑雪道狀態:開放</string>
|
||||||
|
<string name="poi_patrolled_no">巡邏:否</string>
|
||||||
|
<string name="poi_patrolled_yes">巡邏:是</string>
|
||||||
|
<string name="poi_gladed_yes">林間空地:是</string>
|
||||||
|
<string name="poi_piste_name">滑雪道名稱</string>
|
||||||
|
<string name="poi_piste_ski_jump">跳台滑雪</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3960,7 +3960,7 @@
|
||||||
<string name="select_folder">選取資料夾</string>
|
<string name="select_folder">選取資料夾</string>
|
||||||
<string name="select_folder_descr">選取資料夾或新增</string>
|
<string name="select_folder_descr">選取資料夾或新增</string>
|
||||||
<string name="shared_string_empty">空</string>
|
<string name="shared_string_empty">空</string>
|
||||||
<string name="analyze_by_intervals">按時間間隔分析(分割時間間隔)</string>
|
<string name="analyze_by_intervals">分析分割間隔</string>
|
||||||
<string name="upload_to_openstreetmap">上傳到 OpenStreetMap</string>
|
<string name="upload_to_openstreetmap">上傳到 OpenStreetMap</string>
|
||||||
<string name="edit_track">編輯軌跡</string>
|
<string name="edit_track">編輯軌跡</string>
|
||||||
<string name="rename_track">重新命名軌跡</string>
|
<string name="rename_track">重新命名軌跡</string>
|
||||||
|
@ -4004,4 +4004,5 @@
|
||||||
<string name="uploading_count">正在上傳 %1$d,共 %2$d</string>
|
<string name="uploading_count">正在上傳 %1$d,共 %2$d</string>
|
||||||
<string name="uploaded_count">已上傳 %1$d,共 %2$d</string>
|
<string name="uploaded_count">已上傳 %1$d,共 %2$d</string>
|
||||||
<string name="toast_select_edits_for_upload">選取要上傳的檔案</string>
|
<string name="toast_select_edits_for_upload">選取要上傳的檔案</string>
|
||||||
|
<string name="hillshade_slope_contour_lines">地形陰影/斜坡/等高線</string>
|
||||||
</resources>
|
</resources>
|
|
@ -142,6 +142,7 @@
|
||||||
<attr name="text_input_background" format="reference"/>
|
<attr name="text_input_background" format="reference"/>
|
||||||
<attr name="image_help_announcement_time" format="reference"/>
|
<attr name="image_help_announcement_time" format="reference"/>
|
||||||
<attr name="switch_button_active" format="reference" />
|
<attr name="switch_button_active" format="reference" />
|
||||||
|
<attr name="bottom_navigation_item_background" format="reference" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<declare-styleable name="PagerSlidingTabStrip">
|
<declare-styleable name="PagerSlidingTabStrip">
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">OsmAnd~</string>
|
<!-- Part of build.gradle -->
|
||||||
<string name="app_name_free">OsmAnd Nightly</string>
|
<!-- <string name="app_name">OsmAnd~</string> -->
|
||||||
|
<!-- <string name="app_edition"></string> -->
|
||||||
<!-- string name="app_version_suffix"></string -->
|
<!-- string name="app_version_suffix"></string -->
|
||||||
|
|
||||||
<!-- Not translatable -->
|
<!-- Not translatable -->
|
||||||
|
@ -9,11 +10,7 @@
|
||||||
<string name="srtm_plugin_price">€2,99</string>
|
<string name="srtm_plugin_price">€2,99</string>
|
||||||
<string name="sea_depth_maps_price">€1,39</string>
|
<string name="sea_depth_maps_price">€1,39</string>
|
||||||
<string name="osm_live">OsmAnd Live</string>
|
<string name="osm_live">OsmAnd Live</string>
|
||||||
<string name="ga_api_key">UA-28342846-2</string>
|
|
||||||
<string name="ga_dispatchPeriod">10</string>
|
|
||||||
<string name="ga_debug">true</string>
|
|
||||||
<string name="openstreetmap_copyright"><a href="https://www.openstreetmap.org/copyright">© OpenStreetMap</a></string>
|
<string name="openstreetmap_copyright"><a href="https://www.openstreetmap.org/copyright">© OpenStreetMap</a></string>
|
||||||
<string name="app_edition"></string>
|
|
||||||
<string name="support_email">support@osmand.net</string>
|
<string name="support_email">support@osmand.net</string>
|
||||||
<string name="preferred_locale_no_translate">Display language</string>
|
<string name="preferred_locale_no_translate">Display language</string>
|
||||||
<string name="system_locale_no_translate">Device language</string>
|
<string name="system_locale_no_translate">Device language</string>
|
|
@ -17,6 +17,19 @@
|
||||||
<string name="track_recording_title">Track recording stopped</string>
|
<string name="track_recording_title">Track recording stopped</string>
|
||||||
<string name="track_recording_save_and_stop">Save and stop recording</string>
|
<string name="track_recording_save_and_stop">Save and stop recording</string>
|
||||||
<string name="track_recording_stop_without_saving">Stop without saving</string>
|
<string name="track_recording_stop_without_saving">Stop without saving</string>
|
||||||
|
<string name="activity_type_car_name">Car</string>
|
||||||
|
<string name="activity_type_motorbike_name">Motorbike</string>
|
||||||
|
<string name="activity_type_offroad_name">Off-road</string>
|
||||||
|
<string name="activity_type_walking_name">Walking</string>
|
||||||
|
<string name="activity_type_running_name">Running</string>
|
||||||
|
<string name="activity_type_hiking_name">Hiking</string>
|
||||||
|
<string name="activity_type_cycling_name">Cycling</string>
|
||||||
|
<string name="activity_type_mountainbike_name">Mountainbike</string>
|
||||||
|
<string name="activity_type_racing_name">Racing</string>
|
||||||
|
<string name="activity_type_riding_name">Riding</string>
|
||||||
|
<string name="activity_type_snowmobile_name">Snowmobile</string>
|
||||||
|
<string name="activity_type_winter_name">Winter</string>
|
||||||
|
<string name="activity_type_water_name">Water</string>
|
||||||
<string name="login_open_place_reviews">Login to OpenPlaceReviews</string>
|
<string name="login_open_place_reviews">Login to OpenPlaceReviews</string>
|
||||||
<string name="opr_use_dev_url">Use test.openplacereviews.org</string>
|
<string name="opr_use_dev_url">Use test.openplacereviews.org</string>
|
||||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
|
|
|
@ -249,6 +249,7 @@
|
||||||
<item name="text_input_background">@color/text_input_background_light</item>
|
<item name="text_input_background">@color/text_input_background_light</item>
|
||||||
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_day</item>
|
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_day</item>
|
||||||
<item name="switch_button_active">@color/switch_button_active_light</item>
|
<item name="switch_button_active">@color/switch_button_active_light</item>
|
||||||
|
<item name="bottom_navigation_item_background">@drawable/bottom_navigation_item_bg_light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
|
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
|
||||||
|
@ -547,6 +548,7 @@
|
||||||
<item name="text_input_background">@color/text_input_background_dark</item>
|
<item name="text_input_background">@color/text_input_background_dark</item>
|
||||||
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_night</item>
|
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_night</item>
|
||||||
<item name="switch_button_active">@color/switch_button_active_dark</item>
|
<item name="switch_button_active">@color/switch_button_active_dark</item>
|
||||||
|
<item name="bottom_navigation_item_background">@drawable/bottom_navigation_item_bg_dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="FreeVersionBanner" parent="OsmandDarkTheme">
|
<style name="FreeVersionBanner" parent="OsmandDarkTheme">
|
||||||
|
|
|
@ -951,6 +951,12 @@ public class AndroidUtils {
|
||||||
return value != null ? value : propertyValue;
|
return value != null ? value : propertyValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getActivityTypeStringPropertyName(Context ctx, String propertyName, String defValue) {
|
||||||
|
String value = getStringByProperty(ctx, "activity_type_" + propertyName + "_name");
|
||||||
|
return value != null ? value : defValue;
|
||||||
|
}
|
||||||
|
|
||||||
private static String getStringByProperty(@NonNull Context ctx, @NonNull String property) {
|
private static String getStringByProperty(@NonNull Context ctx, @NonNull String property) {
|
||||||
try {
|
try {
|
||||||
Field field = R.string.class.getField(property);
|
Field field = R.string.class.getField(property);
|
||||||
|
|
|
@ -209,9 +209,10 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SelectedGpxFile getSelectedGPXFile(WptPt point) {
|
public SelectedGpxFile getSelectedGPXFile(WptPt point) {
|
||||||
for (SelectedGpxFile g : selectedGPXFiles) {
|
for (SelectedGpxFile selectedGpxFile : selectedGPXFiles) {
|
||||||
if (g.getGpxFile().containsPoint(point)) {
|
GPXFile gpxFile = selectedGpxFile.getGpxFile();
|
||||||
return g;
|
if (gpxFile.containsPoint(point) || gpxFile.containsRoutePoint(point)) {
|
||||||
|
return selectedGpxFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -136,10 +136,10 @@ import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
import net.osmand.plus.settings.datastorage.DataStorageFragment;
|
||||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
||||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
|
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
|
||||||
import net.osmand.plus.settings.fragments.ConfigureProfileFragment;
|
import net.osmand.plus.settings.fragments.ConfigureProfileFragment;
|
||||||
import net.osmand.plus.settings.datastorage.DataStorageFragment;
|
|
||||||
import net.osmand.plus.track.TrackAppearanceFragment;
|
import net.osmand.plus.track.TrackAppearanceFragment;
|
||||||
import net.osmand.plus.track.TrackMenuFragment;
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.AddGpxPointBottomSheetHelper.NewGpxPoint;
|
import net.osmand.plus.views.AddGpxPointBottomSheetHelper.NewGpxPoint;
|
||||||
|
@ -1664,6 +1664,12 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
getMapView().refreshMap();
|
getMapView().refreshMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void refreshMapComplete() {
|
||||||
|
getMyApplication().getResourceManager().getRenderer().clearCache();
|
||||||
|
updateMapSettings();
|
||||||
|
getMapView().refreshMap(true);
|
||||||
|
}
|
||||||
|
|
||||||
public View getLayout() {
|
public View getLayout() {
|
||||||
return getWindow().getDecorView().findViewById(android.R.id.content);
|
return getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package net.osmand.plus.base;
|
package net.osmand.plus.base;
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
|
import android.animation.Animator.AnimatorListener;
|
||||||
import android.animation.AnimatorListenerAdapter;
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
@ -884,10 +885,28 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
updateMainViewLayout(posY);
|
updateMainViewLayout(posY);
|
||||||
}
|
}
|
||||||
if (animated) {
|
if (animated) {
|
||||||
mainView.animate().y(posY)
|
animateMainView(posY, needCloseMenu, previousMenuState, newMenuState);
|
||||||
.setDuration(ANIMATION_DURATION)
|
} else {
|
||||||
.setInterpolator(new DecelerateInterpolator())
|
if (needCloseMenu && isHideable()) {
|
||||||
.setListener(new AnimatorListenerAdapter() {
|
dismiss();
|
||||||
|
} else {
|
||||||
|
mainView.setY(posY);
|
||||||
|
updateMainViewLayout(posY);
|
||||||
|
if (previousMenuState != 0 && newMenuState != 0 && previousMenuState != newMenuState) {
|
||||||
|
doAfterMenuStateChange(previousMenuState, newMenuState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ContextMenuFragmentListener listener = this.listener;
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onContextMenuYPosChanged(this, posY, needMapAdjust, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return posY;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void animateMainView(final int posY, final boolean needCloseMenu, final int previousMenuState, final int newMenuState) {
|
||||||
|
animateView(mainView, posY, new AnimatorListenerAdapter() {
|
||||||
|
|
||||||
boolean canceled = false;
|
boolean canceled = false;
|
||||||
|
|
||||||
|
@ -909,30 +928,14 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).start();
|
});
|
||||||
} else {
|
|
||||||
if (needCloseMenu && isHideable()) {
|
|
||||||
dismiss();
|
|
||||||
} else {
|
|
||||||
mainView.setY(posY);
|
|
||||||
updateMainViewLayout(posY);
|
|
||||||
if (previousMenuState != 0 && newMenuState != 0 && previousMenuState != newMenuState) {
|
|
||||||
doAfterMenuStateChange(previousMenuState, newMenuState);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ContextMenuFragmentListener listener = this.listener;
|
|
||||||
if (listener != null) {
|
|
||||||
listener.onContextMenuYPosChanged(this, posY, needMapAdjust, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return posY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void animateView(@NonNull View view, int y) {
|
public void animateView(@NonNull View view, int y, @Nullable AnimatorListener listener) {
|
||||||
view.animate().y(y)
|
view.animate().y(y)
|
||||||
.setDuration(ANIMATION_DURATION)
|
.setDuration(ANIMATION_DURATION)
|
||||||
.setInterpolator(new DecelerateInterpolator())
|
.setInterpolator(new DecelerateInterpolator())
|
||||||
|
.setListener(listener)
|
||||||
.start();
|
.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ public abstract class ContextMenuScrollFragment extends ContextMenuFragment impl
|
||||||
if (mapControlsView != null) {
|
if (mapControlsView != null) {
|
||||||
int zoomY = y - getMapControlsHeight();
|
int zoomY = y - getMapControlsHeight();
|
||||||
if (animated) {
|
if (animated) {
|
||||||
fragment.animateView(mapControlsView, zoomY);
|
fragment.animateView(mapControlsView, zoomY, null);
|
||||||
} else {
|
} else {
|
||||||
mapControlsView.setY(zoomY);
|
mapControlsView.setY(zoomY);
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,7 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInformationListener {
|
public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInformationListener {
|
||||||
private static final org.apache.commons.logging.Log LOG =
|
private static final org.apache.commons.logging.Log LOG =
|
||||||
PlatformUtil.getLog(DashboardOnMap.class);
|
PlatformUtil.getLog(DashboardOnMap.class);
|
||||||
|
@ -777,7 +778,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
|
||||||
plugin.registerLayers(mapActivity);
|
plugin.registerLayers(mapActivity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
} else if (visibleType == DashboardType.WIKIPEDIA) {
|
} else if (visibleType == DashboardType.WIKIPEDIA) {
|
||||||
refreshContent(true);
|
refreshContent(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,11 +261,6 @@ public class ConfigureMapMenu {
|
||||||
app.getAidlApi().registerLayerContextMenu(adapter, activity);
|
app.getAidlApi().registerLayerContextMenu(adapter, activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void refreshMapComplete(final MapActivity activity) {
|
|
||||||
activity.getMyApplication().getResourceManager().getRenderer().clearCache();
|
|
||||||
activity.updateMapSettings();
|
|
||||||
activity.getMapView().refreshMap(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createRenderingAttributeItems(List<RenderingRuleProperty> customRules,
|
private void createRenderingAttributeItems(List<RenderingRuleProperty> customRules,
|
||||||
final ContextMenuAdapter adapter, final MapActivity activity,
|
final ContextMenuAdapter adapter, final MapActivity activity,
|
||||||
|
@ -347,7 +342,7 @@ public class ConfigureMapMenu {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
int which = (int) v.getTag();
|
int which = (int) v.getTag();
|
||||||
view.getSettings().DAYNIGHT_MODE.set(DayNightMode.values()[which]);
|
view.getSettings().DAYNIGHT_MODE.set(DayNightMode.values()[which]);
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
activity.getDashboard().refreshContent(true);
|
activity.getDashboard().refreshContent(true);
|
||||||
// adapter.getItem(pos).setDescription(s, getDayNightDescr(activity));
|
// adapter.getItem(pos).setDescription(s, getDayNightDescr(activity));
|
||||||
// ad.notifyDataSetInvalidated();
|
// ad.notifyDataSetInvalidated();
|
||||||
|
@ -466,7 +461,7 @@ public class ConfigureMapMenu {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
int which = (int) v.getTag();
|
int which = (int) v.getTag();
|
||||||
view.getSettings().TEXT_SCALE.set(txtValues[which]);
|
view.getSettings().TEXT_SCALE.set(txtValues[which]);
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
adapter.getItem(pos).setDescription(getScale(activity));
|
adapter.getItem(pos).setDescription(getScale(activity));
|
||||||
ad.notifyDataSetInvalidated();
|
ad.notifyDataSetInvalidated();
|
||||||
}
|
}
|
||||||
|
@ -568,7 +563,7 @@ public class ConfigureMapMenu {
|
||||||
int index = dlg.getListView().getCheckedItemPosition();
|
int index = dlg.getListView().getCheckedItemPosition();
|
||||||
view.getSettings().MAP_PREFERRED_LOCALE.set(
|
view.getSettings().MAP_PREFERRED_LOCALE.set(
|
||||||
txtIds[index]);
|
txtIds[index]);
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
String localeDescr = txtIds[index];
|
String localeDescr = txtIds[index];
|
||||||
localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity
|
localeDescr = localeDescr == null || localeDescr.isEmpty() ? activity
|
||||||
.getString(R.string.local_map_names) : localeDescr;
|
.getString(R.string.local_map_names) : localeDescr;
|
||||||
|
@ -712,7 +707,7 @@ public class ConfigureMapMenu {
|
||||||
}
|
}
|
||||||
adapter.getItem(pos).setColorRes(ContextMenuItem.INVALID_ID);
|
adapter.getItem(pos).setColorRes(ContextMenuItem.INVALID_ID);
|
||||||
a.notifyDataSetInvalidated();
|
a.notifyDataSetInvalidated();
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
activity.getMapLayers().updateLayers(activity.getMapView());
|
activity.getMapLayers().updateLayers(activity.getMapView());
|
||||||
} else {
|
} else {
|
||||||
if (UI_CATEGORY_DETAILS.equals(category)) {
|
if (UI_CATEGORY_DETAILS.equals(category)) {
|
||||||
|
@ -883,7 +878,7 @@ public class ConfigureMapMenu {
|
||||||
adapter.getItem(pos).setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
adapter.getItem(pos).setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
|
||||||
}
|
}
|
||||||
a.notifyDataSetInvalidated();
|
a.notifyDataSetInvalidated();
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
activity.getMapLayers().updateLayers(activity.getMapView());
|
activity.getMapLayers().updateLayers(activity.getMapView());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1041,7 +1036,7 @@ public class ConfigureMapMenu {
|
||||||
@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) {
|
||||||
pref.set(!pref.get());
|
pref.set(!pref.get());
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1096,7 +1091,7 @@ public class ConfigureMapMenu {
|
||||||
} else {
|
} else {
|
||||||
pref.set(p.getPossibleValues()[which - 1]);
|
pref.set(p.getPossibleValues()[which - 1]);
|
||||||
}
|
}
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
String description = AndroidUtils.getRenderingStringPropertyValue(activity, pref.get());
|
String description = AndroidUtils.getRenderingStringPropertyValue(activity, pref.get());
|
||||||
adapter.getItem(pos).setDescription(description);
|
adapter.getItem(pos).setDescription(description);
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,9 +228,9 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
|
||||||
}
|
}
|
||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
if (activity instanceof MapActivity) {
|
if (activity instanceof MapActivity) {
|
||||||
MapActivity a = (MapActivity) activity;
|
MapActivity mapActivity = (MapActivity) activity;
|
||||||
ConfigureMapMenu.refreshMapComplete(a);
|
mapActivity.refreshMapComplete();
|
||||||
a.getMapLayers().updateLayers(a.getMapView());
|
mapActivity.getMapLayers().updateLayers(mapActivity.getMapView());
|
||||||
}
|
}
|
||||||
super.onDismiss(dialog);
|
super.onDismiss(dialog);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin.OnMapSelectedCallback;
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin.OnMapSelectedCallback;
|
||||||
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin.RasterMapType;
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin.RasterMapType;
|
||||||
|
|
||||||
|
|
||||||
public class RasterMapMenu {
|
public class RasterMapMenu {
|
||||||
private static final String TAG = "RasterMapMenu";
|
private static final String TAG = "RasterMapMenu";
|
||||||
public static ContextMenuAdapter createListAdapter(final MapActivity mapActivity,
|
public static ContextMenuAdapter createListAdapter(final MapActivity mapActivity,
|
||||||
|
@ -105,12 +106,12 @@ public class RasterMapMenu {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
plugin.toggleUnderlayState(mapActivity, type, onMapSelectedCallback);
|
plugin.toggleUnderlayState(mapActivity, type, onMapSelectedCallback);
|
||||||
refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (itemId == R.string.show_polygons) {
|
} else if (itemId == R.string.show_polygons) {
|
||||||
hidePolygonsPref.set(!isChecked);
|
hidePolygonsPref.set(!isChecked);
|
||||||
refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
} else if (itemId == R.string.show_transparency_seekbar) {
|
} else if (itemId == R.string.show_transparency_seekbar) {
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.set(currentMapTypeSeekbarMode);
|
settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.set(currentMapTypeSeekbarMode);
|
||||||
|
@ -180,10 +181,4 @@ public class RasterMapMenu {
|
||||||
LayerTransparencySeekbarMode seekbarMode = app.getSettings().LAYER_TRANSPARENCY_SEEKBAR_MODE.get();
|
LayerTransparencySeekbarMode seekbarMode = app.getSettings().LAYER_TRANSPARENCY_SEEKBAR_MODE.get();
|
||||||
return seekbarMode == LayerTransparencySeekbarMode.UNDEFINED || seekbarMode == currentMapTypeSeekbarMode;
|
return seekbarMode == LayerTransparencySeekbarMode.UNDEFINED || seekbarMode == currentMapTypeSeekbarMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void refreshMapComplete(final MapActivity activity) {
|
|
||||||
activity.getMyApplication().getResourceManager().getRenderer().clearCache();
|
|
||||||
activity.updateMapSettings();
|
|
||||||
activity.getMapView().refreshMap(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,7 +140,7 @@ public class SelectMapStyleBottomSheetDialogFragment extends MenuBottomSheetDial
|
||||||
OsmandMapTileView view = mapActivity.getMapView();
|
OsmandMapTileView view = mapActivity.getMapView();
|
||||||
view.getSettings().RENDERER.set(selectedStyle);
|
view.getSettings().RENDERER.set(selectedStyle);
|
||||||
app.getRendererRegistry().setCurrentSelectedRender(loaded);
|
app.getRendererRegistry().setCurrentSelectedRender(loaded);
|
||||||
ConfigureMapMenu.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
mapActivity.getDashboard().refreshContent(true);
|
mapActivity.getDashboard().refreshContent(true);
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(mapActivity, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mapActivity, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show();
|
||||||
|
|
|
@ -593,7 +593,7 @@ public class GpxUiHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (activity instanceof MapActivity) {
|
if (activity instanceof MapActivity) {
|
||||||
ConfigureMapMenu.refreshMapComplete((MapActivity) activity);
|
((MapActivity) activity).refreshMapComplete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GPXFile currentGPX = null;
|
GPXFile currentGPX = null;
|
||||||
|
|
|
@ -42,6 +42,7 @@ import java.util.regex.Pattern;
|
||||||
import static net.osmand.plus.activities.TrackActivity.CURRENT_RECORDING;
|
import static net.osmand.plus.activities.TrackActivity.CURRENT_RECORDING;
|
||||||
import static net.osmand.plus.activities.TrackActivity.TRACK_FILE_NAME;
|
import static net.osmand.plus.activities.TrackActivity.TRACK_FILE_NAME;
|
||||||
import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener;
|
import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener;
|
||||||
|
import static net.osmand.plus.track.TrackMenuFragment.RETURN_SCREEN_NAME;
|
||||||
|
|
||||||
public class IntentHelper {
|
public class IntentHelper {
|
||||||
|
|
||||||
|
@ -256,8 +257,9 @@ public class IntentHelper {
|
||||||
}
|
}
|
||||||
if (intent.hasExtra(TrackMenuFragment.OPEN_TRACK_MENU)) {
|
if (intent.hasExtra(TrackMenuFragment.OPEN_TRACK_MENU)) {
|
||||||
String path = intent.getStringExtra(TRACK_FILE_NAME);
|
String path = intent.getStringExtra(TRACK_FILE_NAME);
|
||||||
|
String name = intent.getStringExtra(RETURN_SCREEN_NAME);
|
||||||
boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false);
|
boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false);
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, currentRecording, null);
|
TrackMenuFragment.showInstance(mapActivity, path, currentRecording, null, name);
|
||||||
mapActivity.setIntent(null);
|
mapActivity.setIntent(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class SelectedGpxMenuController extends MenuController {
|
||||||
LatLon latLon = new LatLon(wptPt.lat, wptPt.lon);
|
LatLon latLon = new LatLon(wptPt.lat, wptPt.lon);
|
||||||
SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile();
|
SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile();
|
||||||
String path = selectedGpxFile.getGpxFile().path;
|
String path = selectedGpxFile.getGpxFile().path;
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), latLon);
|
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), latLon, null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class WptPtMenuController extends MenuController {
|
||||||
SelectedGpxFile selectedGpxFile = selectionHelper.getSelectedGPXFile(wpt);
|
SelectedGpxFile selectedGpxFile = selectionHelper.getSelectedGPXFile(wpt);
|
||||||
if (selectedGpxFile != null) {
|
if (selectedGpxFile != null) {
|
||||||
String path = selectedGpxFile.getGpxFile().path;
|
String path = selectedGpxFile.getGpxFile().path;
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), new LatLon(wpt.lon, wpt.lat));
|
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), new LatLon(wpt.lon, wpt.lat), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
|
@ -66,6 +67,8 @@ public class TrackDetailsMenu {
|
||||||
@Nullable
|
@Nullable
|
||||||
private GpxDisplayItem gpxItem;
|
private GpxDisplayItem gpxItem;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
private SelectedGpxFile selectedGpxFile;
|
||||||
|
@Nullable
|
||||||
private TrackDetailsBarController toolbarController;
|
private TrackDetailsBarController toolbarController;
|
||||||
@Nullable
|
@Nullable
|
||||||
private TrkSegment segment;
|
private TrkSegment segment;
|
||||||
|
@ -101,6 +104,15 @@ public class TrackDetailsMenu {
|
||||||
this.gpxItem = gpxItem;
|
this.gpxItem = gpxItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public SelectedGpxFile getSelectedGpxFile() {
|
||||||
|
return selectedGpxFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedGpxFile(@NonNull SelectedGpxFile selectedGpxFile) {
|
||||||
|
this.selectedGpxFile = selectedGpxFile;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isVisible() {
|
public boolean isVisible() {
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
@ -539,7 +551,7 @@ public class TrackDetailsMenu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldShowXAxisPoints () {
|
public boolean shouldShowXAxisPoints() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -707,18 +719,19 @@ public class TrackDetailsMenu {
|
||||||
if (gpxItem.chartTypes != null && gpxItem.chartTypes.length > 0) {
|
if (gpxItem.chartTypes != null && gpxItem.chartTypes.length > 0) {
|
||||||
for (int i = 0; i < gpxItem.chartTypes.length; i++) {
|
for (int i = 0; i < gpxItem.chartTypes.length; i++) {
|
||||||
OrderedLineDataSet dataSet = null;
|
OrderedLineDataSet dataSet = null;
|
||||||
|
boolean withoutGaps = selectedGpxFile != null && (!selectedGpxFile.isJoinSegments() && gpxItem.isGeneralTrack());
|
||||||
switch (gpxItem.chartTypes[i]) {
|
switch (gpxItem.chartTypes[i]) {
|
||||||
case ALTITUDE:
|
case ALTITUDE:
|
||||||
dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis,
|
||||||
gpxItem.chartAxisType, false, true, false);
|
gpxItem.chartAxisType, false, true, withoutGaps);
|
||||||
break;
|
break;
|
||||||
case SPEED:
|
case SPEED:
|
||||||
dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis,
|
||||||
gpxItem.chartAxisType, gpxItem.chartTypes.length > 1, true, false);
|
gpxItem.chartAxisType, gpxItem.chartTypes.length > 1, true, withoutGaps);
|
||||||
break;
|
break;
|
||||||
case SLOPE:
|
case SLOPE:
|
||||||
dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis,
|
||||||
gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true, false);
|
gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true, withoutGaps);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dataSet != null) {
|
if (dataSet != null) {
|
||||||
|
|
|
@ -344,7 +344,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
FragmentActivity activity = getActivity();
|
FragmentActivity activity = getActivity();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
openTrack(activity, null, storeState());
|
openTrack(activity, null, storeState(), getString(R.string.shared_string_tracks));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1597,7 +1597,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
GpxInfo item = allGpxAdapter.getChild(groupPosition, childPosition);
|
GpxInfo item = allGpxAdapter.getChild(groupPosition, childPosition);
|
||||||
|
|
||||||
if (!selectionMode) {
|
if (!selectionMode) {
|
||||||
openTrack(getActivity(), item.file, storeState());
|
openTrack(getActivity(), item.file, storeState(), getString(R.string.shared_string_tracks));
|
||||||
} else {
|
} else {
|
||||||
if (!selectedItems.contains(item)) {
|
if (!selectedItems.contains(item)) {
|
||||||
selectedItems.add(item);
|
selectedItems.add(item);
|
||||||
|
|
|
@ -15,7 +15,6 @@ import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.dialogs.ConfigureMapMenu;
|
|
||||||
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.quickaction.QuickActionType;
|
import net.osmand.plus.quickaction.QuickActionType;
|
||||||
|
@ -92,7 +91,7 @@ public class MapStyleAction extends SwitchableAction<String> {
|
||||||
view.getSettings().RENDERER.set(params);
|
view.getSettings().RENDERER.set(params);
|
||||||
|
|
||||||
app.getRendererRegistry().setCurrentSelectedRender(loaded);
|
app.getRendererRegistry().setCurrentSelectedRender(loaded);
|
||||||
ConfigureMapMenu.refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
|
|
||||||
Toast.makeText(activity, activity.getString(R.string.quick_action_map_style_switch,
|
Toast.makeText(activity, activity.getString(R.string.quick_action_map_style_switch,
|
||||||
getTranslatedItemName(activity, params)), Toast.LENGTH_SHORT).show();
|
getTranslatedItemName(activity, params)), Toast.LENGTH_SHORT).show();
|
||||||
|
|
|
@ -15,20 +15,20 @@ import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.quickaction.QuickActionType;
|
import net.osmand.plus.quickaction.QuickActionType;
|
||||||
import net.osmand.plus.quickaction.SwitchableAction;
|
import net.osmand.plus.quickaction.SwitchableAction;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
private final static String KEY_UNDERLAYS = "underlays";
|
private final static String KEY_UNDERLAYS = "underlays";
|
||||||
|
@ -141,14 +141,9 @@ public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
settings.MAP_UNDERLAY.set(null);
|
settings.MAP_UNDERLAY.set(null);
|
||||||
activity.getMapLayers().getMapControlsLayer().hideTransparencyBar();
|
activity.getMapLayers().getMapControlsLayer().hideTransparencyBar();
|
||||||
settings.MAP_UNDERLAY_PREVIOUS.set(null);
|
settings.MAP_UNDERLAY_PREVIOUS.set(null);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
final CommonPreference<Boolean> hidePolygonsPref =
|
|
||||||
activity.getMyApplication().getSettings().getCustomRenderBooleanProperty("noPolygons");
|
|
||||||
hidePolygonsPref.set(hasUnderlay);
|
|
||||||
|
|
||||||
plugin.updateMapLayers(activity.getMapView(), settings.MAP_UNDERLAY, activity.getMapLayers());
|
plugin.updateMapLayers(activity.getMapView(), settings.MAP_UNDERLAY, activity.getMapLayers());
|
||||||
|
activity.refreshMapComplete();
|
||||||
Toast.makeText(activity, activity.getString(R.string.quick_action_map_underlay_switch,
|
Toast.makeText(activity, activity.getString(R.string.quick_action_map_underlay_switch,
|
||||||
getTranslatedItemName(activity, params)), Toast.LENGTH_SHORT).show();
|
getTranslatedItemName(activity, params)), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,17 +29,16 @@ import net.osmand.plus.ContextMenuItem;
|
||||||
import net.osmand.plus.DialogListItemAdapter;
|
import net.osmand.plus.DialogListItemAdapter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.Version;
|
import net.osmand.plus.Version;
|
||||||
import net.osmand.plus.activities.DownloadTilesDialog;
|
import net.osmand.plus.activities.DownloadTilesDialog;
|
||||||
import net.osmand.plus.mapsource.EditMapSourceDialogFragment;
|
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.MapActivityLayers;
|
import net.osmand.plus.activities.MapActivityLayers;
|
||||||
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
||||||
import net.osmand.plus.dialogs.RasterMapMenu;
|
import net.osmand.plus.mapsource.EditMapSourceDialogFragment;
|
||||||
import net.osmand.plus.quickaction.QuickActionType;
|
import net.osmand.plus.quickaction.QuickActionType;
|
||||||
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
import net.osmand.plus.views.MapTileLayer;
|
import net.osmand.plus.views.MapTileLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -66,6 +65,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
|
||||||
|
|
||||||
private MapTileLayer overlayLayer;
|
private MapTileLayer overlayLayer;
|
||||||
private MapTileLayer underlayLayer;
|
private MapTileLayer underlayLayer;
|
||||||
|
private StateChangedListener<String> underlayListener;
|
||||||
private StateChangedListener<Integer> overlayLayerListener;
|
private StateChangedListener<Integer> overlayLayerListener;
|
||||||
|
|
||||||
public OsmandRasterMapsPlugin(OsmandApplication app) {
|
public OsmandRasterMapsPlugin(OsmandApplication app) {
|
||||||
|
@ -103,6 +103,19 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
|
||||||
return "feature_articles/online-maps-plugin.html";
|
return "feature_articles/online-maps-plugin.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean init(@NonNull final OsmandApplication app, Activity activity) {
|
||||||
|
final CommonPreference<Boolean> hidePolygonsPref = settings.getCustomRenderBooleanProperty("noPolygons");
|
||||||
|
underlayListener = new StateChangedListener<String>() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(String change) {
|
||||||
|
hidePolygonsPref.set(settings.MAP_UNDERLAY.get() != null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
settings.MAP_UNDERLAY.addListener(underlayListener);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerLayers(MapActivity activity) {
|
public void registerLayers(MapActivity activity) {
|
||||||
createLayers();
|
createLayers();
|
||||||
|
@ -147,10 +160,10 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
|
||||||
mapView.removeLayer(underlayLayer);
|
mapView.removeLayer(underlayLayer);
|
||||||
underlayLayer.setMap(null);
|
underlayLayer.setMap(null);
|
||||||
}
|
}
|
||||||
if(settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.UNDERLAY &&
|
if (settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.UNDERLAY &&
|
||||||
underlayLayer.getMap() != null || underlayLayer.getMapTileAdapter() != null) {
|
underlayLayer.getMap() != null || underlayLayer.getMapTileAdapter() != null) {
|
||||||
layers.getMapControlsLayer().showTransparencyBar(settings.MAP_TRANSPARENCY, true);
|
layers.getMapControlsLayer().showTransparencyBar(settings.MAP_TRANSPARENCY, true);
|
||||||
} else if(settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.OVERLAY &&
|
} else if (settings.LAYER_TRANSPARENCY_SEEKBAR_MODE.get() == LayerTransparencySeekbarMode.OVERLAY &&
|
||||||
overlayLayer.getMap() != null || overlayLayer.getMapTileAdapter() != null) {
|
overlayLayer.getMap() != null || overlayLayer.getMapTileAdapter() != null) {
|
||||||
layers.getMapControlsLayer().showTransparencyBar(settings.MAP_OVERLAY_TRANSPARENCY, true);
|
layers.getMapControlsLayer().showTransparencyBar(settings.MAP_OVERLAY_TRANSPARENCY, true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -339,7 +352,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
|
||||||
|
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
|
|
||||||
RasterMapMenu.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,11 @@
|
||||||
package net.osmand.plus.render;
|
package net.osmand.plus.render;
|
||||||
|
|
||||||
import gnu.trove.iterator.TIntObjectIterator;
|
import android.content.Context;
|
||||||
import gnu.trove.list.TLongList;
|
import android.graphics.Bitmap;
|
||||||
import gnu.trove.list.array.TIntArrayList;
|
import android.graphics.Bitmap.Config;
|
||||||
import gnu.trove.list.array.TLongArrayList;
|
import android.os.Handler;
|
||||||
import gnu.trove.map.hash.TIntObjectHashMap;
|
import android.os.Looper;
|
||||||
import gnu.trove.set.TLongSet;
|
import android.widget.Toast;
|
||||||
import gnu.trove.set.hash.TLongHashSet;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.osmand.IProgress;
|
import net.osmand.IProgress;
|
||||||
import net.osmand.NativeLibrary.NativeSearchResult;
|
import net.osmand.NativeLibrary.NativeSearchResult;
|
||||||
|
@ -39,14 +24,14 @@ import net.osmand.data.QuadPointDouble;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.map.MapTileDownloader;
|
import net.osmand.map.MapTileDownloader;
|
||||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.development.OsmandDevelopmentPlugin;
|
import net.osmand.plus.development.OsmandDevelopmentPlugin;
|
||||||
import net.osmand.plus.render.OsmandRenderer.RenderingContext;
|
import net.osmand.plus.render.OsmandRenderer.RenderingContext;
|
||||||
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
|
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||||
import net.osmand.render.RenderingRuleProperty;
|
import net.osmand.render.RenderingRuleProperty;
|
||||||
import net.osmand.render.RenderingRuleSearchRequest;
|
import net.osmand.render.RenderingRuleSearchRequest;
|
||||||
|
@ -55,16 +40,31 @@ import net.osmand.render.RenderingRulesStorage;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.MapAlgorithms;
|
import net.osmand.util.MapAlgorithms;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import net.osmand.util.TransliterationHelper;
|
import net.osmand.util.TransliterationHelper;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
import android.content.Context;
|
import java.io.File;
|
||||||
import android.graphics.Bitmap;
|
import java.io.IOException;
|
||||||
import android.graphics.Bitmap.Config;
|
import java.text.MessageFormat;
|
||||||
import android.os.Handler;
|
import java.util.ArrayList;
|
||||||
import android.os.Looper;
|
import java.util.Arrays;
|
||||||
import android.widget.Toast;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import gnu.trove.iterator.TIntObjectIterator;
|
||||||
|
import gnu.trove.list.TLongList;
|
||||||
|
import gnu.trove.list.array.TIntArrayList;
|
||||||
|
import gnu.trove.list.array.TLongArrayList;
|
||||||
|
import gnu.trove.map.hash.TIntObjectHashMap;
|
||||||
|
import gnu.trove.set.TLongSet;
|
||||||
|
import gnu.trove.set.hash.TLongHashSet;
|
||||||
|
|
||||||
public class MapRenderRepositories {
|
public class MapRenderRepositories {
|
||||||
// It is needed to not draw object twice if user have map index that intersects by boundaries
|
// It is needed to not draw object twice if user have map index that intersects by boundaries
|
||||||
|
@ -753,11 +753,6 @@ public class MapRenderRepositories {
|
||||||
|
|
||||||
now = System.currentTimeMillis();
|
now = System.currentTimeMillis();
|
||||||
Bitmap bmp;
|
Bitmap bmp;
|
||||||
boolean transparent = false;
|
|
||||||
RenderingRuleProperty rr = storage.PROPS.get("noPolygons");
|
|
||||||
if (rr != null) {
|
|
||||||
transparent = renderingReq.getIntPropertyValue(rr) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. generate image step by step
|
// 1. generate image step by step
|
||||||
Bitmap reuse = prevBmp;
|
Bitmap reuse = prevBmp;
|
||||||
|
|
|
@ -767,7 +767,7 @@ public class ChooseRouteFragment extends BaseOsmAndFragment implements ContextMe
|
||||||
int pagesY = y - getPagesViewHeight() + fragment.getShadowHeight() +
|
int pagesY = y - getPagesViewHeight() + fragment.getShadowHeight() +
|
||||||
(Build.VERSION.SDK_INT >= 21 ? AndroidUtils.getStatusBarHeight(pagesView.getContext()) : 0);
|
(Build.VERSION.SDK_INT >= 21 ? AndroidUtils.getStatusBarHeight(pagesView.getContext()) : 0);
|
||||||
if (animated) {
|
if (animated) {
|
||||||
fragment.animateView(pagesView, pagesY);
|
fragment.animateView(pagesView, pagesY, null);
|
||||||
} else {
|
} else {
|
||||||
pagesView.setY(pagesY);
|
pagesView.setY(pagesY);
|
||||||
}
|
}
|
||||||
|
@ -780,7 +780,7 @@ public class ChooseRouteFragment extends BaseOsmAndFragment implements ContextMe
|
||||||
int zoomY = y - getZoomButtonsHeight() +
|
int zoomY = y - getZoomButtonsHeight() +
|
||||||
(Build.VERSION.SDK_INT >= 21 ? AndroidUtils.getStatusBarHeight(zoomButtonsView.getContext()) : 0);
|
(Build.VERSION.SDK_INT >= 21 ? AndroidUtils.getStatusBarHeight(zoomButtonsView.getContext()) : 0);
|
||||||
if (animated) {
|
if (animated) {
|
||||||
fragment.animateView(zoomButtonsView, zoomY);
|
fragment.animateView(zoomButtonsView, zoomY, null);
|
||||||
} else {
|
} else {
|
||||||
zoomButtonsView.setY(zoomY);
|
zoomButtonsView.setY(zoomY);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,8 +52,7 @@ public class ContourLinesAction extends QuickAction {
|
||||||
if (selected && !plugin.isActive() && !plugin.needsInstallation()) {
|
if (selected && !plugin.isActive() && !plugin.needsInstallation()) {
|
||||||
OsmandPlugin.enablePlugin(activity, app, plugin, true);
|
OsmandPlugin.enablePlugin(activity, app, plugin, true);
|
||||||
}
|
}
|
||||||
|
activity.refreshMapComplete();
|
||||||
SRTMPlugin.refreshMapComplete(activity);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class ContourLinesMenu {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
mapActivity.getDashboard().refreshContent(true);
|
mapActivity.getDashboard().refreshContent(true);
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ public class ContourLinesMenu {
|
||||||
item.setDescription(plugin.getPrefDescription(app, contourLinesProp, pref));
|
item.setDescription(plugin.getPrefDescription(app, contourLinesProp, pref));
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (itemId == colorSchemeStringId) {
|
} else if (itemId == colorSchemeStringId) {
|
||||||
|
@ -135,7 +135,7 @@ public class ContourLinesMenu {
|
||||||
item.setDescription(plugin.getPrefDescription(app, colorSchemeProp, colorPref));
|
item.setDescription(plugin.getPrefDescription(app, colorSchemeProp, colorPref));
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (itemId == R.string.srtm_plugin_name) {
|
} else if (itemId == R.string.srtm_plugin_name) {
|
||||||
|
@ -150,7 +150,7 @@ public class ContourLinesMenu {
|
||||||
item.setDescription(plugin.getPrefDescription(app, contourWidthProp, widthPref));
|
item.setDescription(plugin.getPrefDescription(app, contourWidthProp, widthPref));
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (contourDensityProp != null && itemId == contourDensityName.hashCode()) {
|
} else if (contourDensityProp != null && itemId == contourDensityName.hashCode()) {
|
||||||
|
@ -162,7 +162,7 @@ public class ContourLinesMenu {
|
||||||
item.setDescription(plugin.getPrefDescription(app, contourDensityProp, densityPref));
|
item.setDescription(plugin.getPrefDescription(app, contourDensityProp, densityPref));
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
SRTMPlugin.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,9 +307,8 @@ public class SRTMPlugin extends OsmandPlugin {
|
||||||
item.setSelected(selected);
|
item.setSelected(selected);
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (itemId == R.string.shared_string_terrain) {
|
} else if (itemId == R.string.shared_string_terrain) {
|
||||||
|
@ -328,7 +327,7 @@ public class SRTMPlugin extends OsmandPlugin {
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
updateLayers(mapView, mapActivity);
|
updateLayers(mapView, mapActivity);
|
||||||
refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -486,7 +485,7 @@ public class SRTMPlugin extends OsmandPlugin {
|
||||||
} else {
|
} else {
|
||||||
pref.set(possibleValues[which - 1]);
|
pref.set(possibleValues[which - 1]);
|
||||||
}
|
}
|
||||||
refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -507,12 +506,6 @@ public class SRTMPlugin extends OsmandPlugin {
|
||||||
public void disable(OsmandApplication app) {
|
public void disable(OsmandApplication app) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void refreshMapComplete(final MapActivity activity) {
|
|
||||||
activity.getMyApplication().getResourceManager().getRenderer().clearCache();
|
|
||||||
activity.updateMapSettings();
|
|
||||||
activity.getMapView().refreshMap(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isNightMode(Activity activity, OsmandApplication app) {
|
private static boolean isNightMode(Activity activity, OsmandApplication app) {
|
||||||
if (activity == null || app == null) {
|
if (activity == null || app == null) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class TerrainAction extends QuickAction {
|
||||||
OsmandPlugin.enablePlugin(activity, activity.getMyApplication(), plugin, true);
|
OsmandPlugin.enablePlugin(activity, activity.getMyApplication(), plugin, true);
|
||||||
}
|
}
|
||||||
plugin.updateLayers(activity.getMapView(), activity);
|
plugin.updateLayers(activity.getMapView(), activity);
|
||||||
SRTMPlugin.refreshMapComplete(activity);
|
activity.refreshMapComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,9 @@ import android.view.View;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.AppCompatImageView;
|
||||||
|
|
||||||
import com.squareup.picasso.Callback;
|
import com.squareup.picasso.Callback;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
import com.squareup.picasso.RequestCreator;
|
import com.squareup.picasso.RequestCreator;
|
||||||
|
@ -16,13 +19,10 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.plus.wikipedia.WikiArticleHelper;
|
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.widget.AppCompatImageView;
|
|
||||||
|
|
||||||
import static net.osmand.plus.myplaces.TrackActivityFragmentAdapter.getMetadataImageLink;
|
import static net.osmand.plus.myplaces.TrackActivityFragmentAdapter.getMetadataImageLink;
|
||||||
|
import static net.osmand.plus.wikipedia.WikiArticleHelper.getFirstParagraph;
|
||||||
|
|
||||||
public class DescriptionCard extends BaseCard {
|
public class DescriptionCard extends BaseCard {
|
||||||
|
|
||||||
|
@ -98,16 +98,6 @@ public class DescriptionCard extends BaseCard {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getFirstParagraph(String descriptionHtml) {
|
|
||||||
if (descriptionHtml != null) {
|
|
||||||
String firstParagraph = WikiArticleHelper.getPartialContent(descriptionHtml);
|
|
||||||
if (!Algorithms.isEmpty(firstParagraph)) {
|
|
||||||
return firstParagraph;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return descriptionHtml;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupImage(final String imageUrl) {
|
private void setupImage(final String imageUrl) {
|
||||||
if (imageUrl == null) {
|
if (imageUrl == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,33 +1,30 @@
|
||||||
package net.osmand.plus.track;
|
package net.osmand.plus.track;
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Handler;
|
||||||
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.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.ColorRes;
|
import androidx.annotation.ColorRes;
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.AppCompatImageView;
|
import androidx.appcompat.widget.AppCompatImageView;
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
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.UiUtilities;
|
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
||||||
import net.osmand.plus.myplaces.SegmentActionsListener;
|
import net.osmand.plus.myplaces.SegmentActionsListener;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
|
@ -36,72 +33,84 @@ import net.osmand.util.Algorithms;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import android.os.Handler;
|
|
||||||
|
|
||||||
public class GpxBlockStatisticsBuilder {
|
public class GpxBlockStatisticsBuilder {
|
||||||
|
|
||||||
private final OsmandApplication app;
|
private final OsmandApplication app;
|
||||||
private RecyclerView blocksView;
|
private RecyclerView blocksView;
|
||||||
private final SelectedGpxFile selectedGpxFile;
|
private final SelectedGpxFile selectedGpxFile;
|
||||||
private final TrackDisplayHelper displayHelper;
|
|
||||||
private final GpxDisplayItemType[] filterTypes = {GpxDisplayItemType.TRACK_SEGMENT};
|
|
||||||
|
|
||||||
private BlockStatisticsAdapter bsAdapter;
|
private BlockStatisticsAdapter adapter;
|
||||||
private final List<StatBlock> items = new ArrayList<>();
|
private final List<StatBlock> items = new ArrayList<>();
|
||||||
|
|
||||||
private final Handler handler = new Handler();
|
private final Handler handler = new Handler();
|
||||||
private Runnable updatingStats;
|
private Runnable updatingItems;
|
||||||
|
private boolean updateRunning = false;
|
||||||
|
|
||||||
public GpxBlockStatisticsBuilder(OsmandApplication app, SelectedGpxFile selectedGpxFile, TrackDisplayHelper displayHelper) {
|
public GpxBlockStatisticsBuilder(OsmandApplication app, SelectedGpxFile selectedGpxFile) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
this.selectedGpxFile = selectedGpxFile;
|
this.selectedGpxFile = selectedGpxFile;
|
||||||
this.displayHelper = displayHelper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBlocksView(RecyclerView blocksView) {
|
public void setBlocksView(RecyclerView blocksView) {
|
||||||
this.blocksView = blocksView;
|
this.blocksView = blocksView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private GPXTrackAnalysis getAnalysis() {
|
private GpxDisplayItem getDisplayItem(GPXFile gpxFile) {
|
||||||
return selectedGpxFile.getTrackAnalysis(app);
|
return GpxUiHelper.makeGpxDisplayItem(app, gpxFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initStatBlocks(@Nullable SegmentActionsListener actionsListener, @ColorInt int activeColor, boolean nightMode) {
|
private GPXFile getGPXFile() {
|
||||||
|
return selectedGpxFile.getGpxFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initStatBlocks(SegmentActionsListener actionsListener, @ColorInt int activeColor, boolean nightMode) {
|
||||||
initItems();
|
initItems();
|
||||||
if (Algorithms.isEmpty(items)) {
|
boolean isNotEmpty = !Algorithms.isEmpty(items);
|
||||||
AndroidUiHelper.updateVisibility(blocksView, false);
|
AndroidUiHelper.updateVisibility(blocksView, isNotEmpty);
|
||||||
} else {
|
if (isNotEmpty) {
|
||||||
bsAdapter = new BlockStatisticsAdapter(actionsListener, activeColor, nightMode);
|
adapter = new BlockStatisticsAdapter(getDisplayItem(getGPXFile()), actionsListener, activeColor, nightMode);
|
||||||
bsAdapter.setItems(items);
|
adapter.setItems(items);
|
||||||
blocksView.setLayoutManager(new LinearLayoutManager(app, LinearLayoutManager.HORIZONTAL, false));
|
blocksView.setLayoutManager(new LinearLayoutManager(app, LinearLayoutManager.HORIZONTAL, false));
|
||||||
blocksView.setAdapter(bsAdapter);
|
blocksView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopUpdatingStatBlocks() {
|
public void stopUpdatingStatBlocks() {
|
||||||
handler.removeCallbacks(updatingStats);
|
handler.removeCallbacks(updatingItems);
|
||||||
|
updateRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void runUpdatingStatBlocks() {
|
public void runUpdatingStatBlocks() {
|
||||||
updatingStats = new Runnable() {
|
updatingItems = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (bsAdapter != null) {
|
if (adapter != null) {
|
||||||
initItems();
|
initItems();
|
||||||
bsAdapter.setItems(items);
|
adapter.setItems(items);
|
||||||
AndroidUiHelper.updateVisibility(blocksView, !Algorithms.isEmpty(items));
|
AndroidUiHelper.updateVisibility(blocksView, !Algorithms.isEmpty(items));
|
||||||
}
|
}
|
||||||
int interval = app.getSettings().SAVE_GLOBAL_TRACK_INTERVAL.get();
|
int interval = app.getSettings().SAVE_GLOBAL_TRACK_INTERVAL.get();
|
||||||
handler.postDelayed(this, Math.max(1000, interval));
|
handler.postDelayed(this, Math.max(1000, interval));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
handler.post(updatingStats);
|
updateRunning = handler.post(updatingItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initItems() {
|
public void initItems() {
|
||||||
GPXTrackAnalysis analysis = getAnalysis();
|
GPXFile gpxFile = getGPXFile();
|
||||||
float totalDistance = analysis.totalDistance;
|
GpxDisplayItem gpxDisplayItem = null;
|
||||||
float timeSpan = analysis.timeSpan;
|
GPXTrackAnalysis analysis = null;
|
||||||
|
boolean withoutGaps = true;
|
||||||
|
if (gpxFile.tracks.size() > 0) {
|
||||||
|
gpxDisplayItem = getDisplayItem(gpxFile);
|
||||||
|
}
|
||||||
|
if (gpxDisplayItem != null) {
|
||||||
|
analysis = gpxDisplayItem.analysis;
|
||||||
|
withoutGaps = !selectedGpxFile.isJoinSegments() && gpxDisplayItem.isGeneralTrack();
|
||||||
|
}
|
||||||
|
if (analysis != null) {
|
||||||
|
float totalDistance = withoutGaps ? analysis.totalDistanceWithoutGaps : analysis.totalDistance;
|
||||||
|
float timeSpan = withoutGaps ? analysis.timeSpanWithoutGaps : analysis.timeSpan;
|
||||||
String asc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app);
|
String asc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app);
|
||||||
String desc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationDown, app);
|
String desc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationDown, app);
|
||||||
String avg = OsmAndFormatter.getFormattedSpeed(analysis.avgSpeed, app);
|
String avg = OsmAndFormatter.getFormattedSpeed(analysis.avgSpeed, app);
|
||||||
|
@ -122,6 +131,7 @@ public class GpxBlockStatisticsBuilder {
|
||||||
Algorithms.formatDuration((int) (timeSpan / 1000), app.accessibilityEnabled()),
|
Algorithms.formatDuration((int) (timeSpan / 1000), app.accessibilityEnabled()),
|
||||||
R.drawable.ic_action_time_span_16, R.color.icon_color_default_light, GPXDataSetType.SPEED, null, ItemType.ITEM_TIME);
|
R.drawable.ic_action_time_span_16, R.color.icon_color_default_light, GPXDataSetType.SPEED, null, ItemType.ITEM_TIME);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void prepareData(GPXTrackAnalysis analysis, String title, String value,
|
public void prepareData(GPXTrackAnalysis analysis, String title, String value,
|
||||||
@DrawableRes int imageResId, @ColorRes int imageColorId,
|
@DrawableRes int imageResId, @ColorRes int imageColorId,
|
||||||
|
@ -155,17 +165,6 @@ public class GpxBlockStatisticsBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setImageDrawable(ImageView iv, @DrawableRes Integer resId, @ColorRes int color) {
|
|
||||||
Drawable icon = resId != null ? app.getUIUtilities().getIcon(resId, color)
|
|
||||||
: UiUtilities.tintDrawable(iv.getDrawable(), getResolvedColor(color));
|
|
||||||
iv.setImageDrawable(icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
protected int getResolvedColor(@ColorRes int colorId) {
|
|
||||||
return ContextCompat.getColor(app, colorId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class StatBlock {
|
public class StatBlock {
|
||||||
private final String title;
|
private final String title;
|
||||||
private final String value;
|
private final String value;
|
||||||
|
@ -191,18 +190,21 @@ public class GpxBlockStatisticsBuilder {
|
||||||
ITEM_DISTANCE,
|
ITEM_DISTANCE,
|
||||||
ITEM_ALTITUDE,
|
ITEM_ALTITUDE,
|
||||||
ITEM_SPEED,
|
ITEM_SPEED,
|
||||||
ITEM_TIME
|
ITEM_TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class BlockStatisticsAdapter extends RecyclerView.Adapter<BlockStatisticsViewHolder> {
|
private class BlockStatisticsAdapter extends RecyclerView.Adapter<BlockStatisticsViewHolder> {
|
||||||
|
|
||||||
|
private final List<StatBlock> items = new ArrayList<>();
|
||||||
|
private final GpxDisplayItem displayItem;
|
||||||
|
private final SegmentActionsListener actionsListener;
|
||||||
@ColorInt
|
@ColorInt
|
||||||
private final int activeColor;
|
private final int activeColor;
|
||||||
private final List<StatBlock> statBlocks = new ArrayList<>();
|
|
||||||
private final boolean nightMode;
|
private final boolean nightMode;
|
||||||
private final SegmentActionsListener actionsListener;
|
|
||||||
|
|
||||||
public BlockStatisticsAdapter(@Nullable SegmentActionsListener actionsListener, @ColorInt int activeColor, boolean nightMode) {
|
public BlockStatisticsAdapter(GpxDisplayItem displayItem, SegmentActionsListener actionsListener,
|
||||||
|
@ColorInt int activeColor, boolean nightMode) {
|
||||||
|
this.displayItem = displayItem;
|
||||||
this.actionsListener = actionsListener;
|
this.actionsListener = actionsListener;
|
||||||
this.activeColor = activeColor;
|
this.activeColor = activeColor;
|
||||||
this.nightMode = nightMode;
|
this.nightMode = nightMode;
|
||||||
|
@ -210,7 +212,7 @@ public class GpxBlockStatisticsBuilder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return statBlocks.size();
|
return items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -222,34 +224,22 @@ public class GpxBlockStatisticsBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final BlockStatisticsViewHolder holder, int position) {
|
public void onBindViewHolder(BlockStatisticsViewHolder holder, int position) {
|
||||||
final StatBlock item = statBlocks.get(position);
|
final StatBlock item = items.get(position);
|
||||||
holder.valueText.setText(item.value);
|
holder.valueText.setText(item.value);
|
||||||
holder.titleText.setText(item.title);
|
holder.titleText.setText(item.title);
|
||||||
if (handler.hasCallbacks(updatingStats)) {
|
if (updateRunning) {
|
||||||
holder.titleText.setWidth(app.getResources().getDimensionPixelSize(R.dimen.map_route_buttons_width));
|
holder.titleText.setWidth(app.getResources().getDimensionPixelSize(R.dimen.map_route_buttons_width));
|
||||||
}
|
}
|
||||||
holder.valueText.setTextColor(activeColor);
|
holder.valueText.setTextColor(activeColor);
|
||||||
holder.titleText.setTextColor(app.getResources().getColor(R.color.text_color_secondary_light));
|
holder.titleText.setTextColor(app.getResources().getColor(R.color.text_color_secondary_light));
|
||||||
if (actionsListener != null && displayHelper != null) {
|
|
||||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
List<GpxDisplayGroup> groups = displayHelper.getDisplayGroups(filterTypes);
|
GPXTrackAnalysis analysis = displayItem != null ? displayItem.analysis : null;
|
||||||
GpxDisplayGroup group = null;
|
if (analysis != null) {
|
||||||
for (GpxDisplayGroup g : groups) {
|
|
||||||
if (g.isGeneralTrack()) {
|
|
||||||
group = g;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (group == null && !groups.isEmpty()) {
|
|
||||||
group = groups.get(0);
|
|
||||||
}
|
|
||||||
if (group != null) {
|
|
||||||
GpxDisplayItem displayItem = group.getModifiableList().get(0);
|
|
||||||
if (displayItem != null && displayItem.analysis != null) {
|
|
||||||
ArrayList<GPXDataSetType> list = new ArrayList<>();
|
ArrayList<GPXDataSetType> list = new ArrayList<>();
|
||||||
if (displayItem.analysis.hasElevationData || displayItem.analysis.isSpeedSpecified() || displayItem.analysis.hasSpeedData) {
|
if (analysis.hasElevationData || analysis.isSpeedSpecified() || analysis.hasSpeedData) {
|
||||||
if (item.firstType != null) {
|
if (item.firstType != null) {
|
||||||
list.add(item.firstType);
|
list.add(item.firstType);
|
||||||
}
|
}
|
||||||
|
@ -262,17 +252,16 @@ public class GpxBlockStatisticsBuilder {
|
||||||
actionsListener.openAnalyzeOnMap(displayItem);
|
actionsListener.openAnalyzeOnMap(displayItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
Drawable icon = app.getUIUtilities().getIcon(item.imageResId, item.imageColorId);
|
||||||
setImageDrawable(holder.imageView, item.imageResId, item.imageColorId);
|
holder.imageView.setImageDrawable(icon);
|
||||||
AndroidUtils.setBackgroundColor(app, holder.divider, nightMode, R.color.divider_color_light, R.color.divider_color_dark);
|
AndroidUtils.setBackgroundColor(app, holder.divider, nightMode, R.color.divider_color_light, R.color.divider_color_dark);
|
||||||
AndroidUiHelper.updateVisibility(holder.divider, position != statBlocks.size() - 1);
|
AndroidUiHelper.updateVisibility(holder.divider, position != items.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setItems(List<StatBlock> statBlocks) {
|
public void setItems(List<StatBlock> items) {
|
||||||
this.statBlocks.clear();
|
this.items.clear();
|
||||||
this.statBlocks.addAll(statBlocks);
|
this.items.addAll(items);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -293,4 +282,3 @@ public class GpxBlockStatisticsBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
|
|
@ -16,6 +16,14 @@ import android.webkit.WebSettings;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.webkit.WebViewClient;
|
import android.webkit.WebViewClient;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.widget.AppCompatImageView;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.squareup.picasso.Callback;
|
import com.squareup.picasso.Callback;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
import com.squareup.picasso.RequestCreator;
|
import com.squareup.picasso.RequestCreator;
|
||||||
|
@ -32,14 +40,6 @@ import net.osmand.plus.widgets.WebViewEx;
|
||||||
import net.osmand.plus.wikivoyage.WikivoyageUtils;
|
import net.osmand.plus.wikivoyage.WikivoyageUtils;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.AppCompatImageView;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
|
|
||||||
public class GpxReadDescriptionDialogFragment extends BaseOsmAndDialogFragment {
|
public class GpxReadDescriptionDialogFragment extends BaseOsmAndDialogFragment {
|
||||||
|
|
||||||
public static final String TAG = GpxReadDescriptionDialogFragment.class.getSimpleName();
|
public static final String TAG = GpxReadDescriptionDialogFragment.class.getSimpleName();
|
||||||
|
@ -242,7 +242,7 @@ public class GpxReadDescriptionDialogFragment extends BaseOsmAndDialogFragment {
|
||||||
return "<body style=\"color:white;\">\n" + content + "</body>\n";
|
return "<body style=\"color:white;\">\n" + content + "</body>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showInstance(@NonNull FragmentActivity activity, @NonNull String title, @NonNull String imageUrl, @NonNull String description) {
|
public static void showInstance(@NonNull FragmentActivity activity, @NonNull String title, @Nullable String imageUrl, @NonNull String description) {
|
||||||
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
||||||
if (!fragmentManager.isStateSaved()) {
|
if (!fragmentManager.isStateSaved()) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
|
|
@ -4,7 +4,9 @@ import android.annotation.SuppressLint;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.ColorRes;
|
import androidx.annotation.ColorRes;
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
|
@ -13,18 +15,23 @@ import androidx.appcompat.widget.AppCompatImageView;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
|
import net.osmand.GPXUtilities.Metadata;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.myplaces.SegmentActionsListener;
|
import net.osmand.plus.myplaces.SegmentActionsListener;
|
||||||
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import static net.osmand.plus.myplaces.TrackActivityFragmentAdapter.getMetadataImageLink;
|
||||||
import static net.osmand.plus.myplaces.TrackActivityFragmentAdapter.isGpxFileSelected;
|
import static net.osmand.plus.myplaces.TrackActivityFragmentAdapter.isGpxFileSelected;
|
||||||
import static net.osmand.plus.track.OptionsCard.APPEARANCE_BUTTON_INDEX;
|
import static net.osmand.plus.track.OptionsCard.APPEARANCE_BUTTON_INDEX;
|
||||||
import static net.osmand.plus.track.OptionsCard.DIRECTIONS_BUTTON_INDEX;
|
import static net.osmand.plus.track.OptionsCard.DIRECTIONS_BUTTON_INDEX;
|
||||||
import static net.osmand.plus.track.OptionsCard.EDIT_BUTTON_INDEX;
|
import static net.osmand.plus.track.OptionsCard.EDIT_BUTTON_INDEX;
|
||||||
import static net.osmand.plus.track.OptionsCard.SHOW_ON_MAP_BUTTON_INDEX;
|
import static net.osmand.plus.track.OptionsCard.SHOW_ON_MAP_BUTTON_INDEX;
|
||||||
|
import static net.osmand.plus.wikipedia.WikiArticleHelper.getFirstParagraph;
|
||||||
|
|
||||||
public class OverviewCard extends BaseCard {
|
public class OverviewCard extends BaseCard {
|
||||||
|
|
||||||
|
@ -36,12 +43,11 @@ public class OverviewCard extends BaseCard {
|
||||||
private final SelectedGpxFile selectedGpxFile;
|
private final SelectedGpxFile selectedGpxFile;
|
||||||
private final GpxBlockStatisticsBuilder blockStatisticsBuilder;
|
private final GpxBlockStatisticsBuilder blockStatisticsBuilder;
|
||||||
|
|
||||||
public OverviewCard(@NonNull MapActivity mapActivity, @NonNull TrackDisplayHelper displayHelper,
|
public OverviewCard(@NonNull MapActivity mapActivity, @NonNull SegmentActionsListener actionsListener, SelectedGpxFile selectedGpxFile) {
|
||||||
@NonNull SegmentActionsListener actionsListener, SelectedGpxFile selectedGpxFile) {
|
|
||||||
super(mapActivity);
|
super(mapActivity);
|
||||||
this.actionsListener = actionsListener;
|
this.actionsListener = actionsListener;
|
||||||
this.selectedGpxFile = selectedGpxFile;
|
this.selectedGpxFile = selectedGpxFile;
|
||||||
blockStatisticsBuilder = new GpxBlockStatisticsBuilder(app, selectedGpxFile, displayHelper);
|
blockStatisticsBuilder = new GpxBlockStatisticsBuilder(app, selectedGpxFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -63,6 +69,7 @@ public class OverviewCard extends BaseCard {
|
||||||
RecyclerView blocksView = view.findViewById(R.id.recycler_overview);
|
RecyclerView blocksView = view.findViewById(R.id.recycler_overview);
|
||||||
blockStatisticsBuilder.setBlocksView(blocksView);
|
blockStatisticsBuilder.setBlocksView(blocksView);
|
||||||
|
|
||||||
|
setupDescription();
|
||||||
initShowButton(iconColorDef, iconColorPres);
|
initShowButton(iconColorDef, iconColorPres);
|
||||||
initAppearanceButton(iconColorDef, iconColorPres);
|
initAppearanceButton(iconColorDef, iconColorPres);
|
||||||
if (fileAvailable) {
|
if (fileAvailable) {
|
||||||
|
@ -125,6 +132,31 @@ public class OverviewCard extends BaseCard {
|
||||||
iv.setImageDrawable(icon);
|
iv.setImageDrawable(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupDescription() {
|
||||||
|
GPXFile gpxFile = getGPXFile();
|
||||||
|
if (gpxFile.metadata == null) {
|
||||||
|
gpxFile.metadata = new Metadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
TextView description = view.findViewById(R.id.description);
|
||||||
|
final String descriptionHtml = gpxFile.metadata.getDescription();
|
||||||
|
if (Algorithms.isBlank(descriptionHtml)) {
|
||||||
|
AndroidUiHelper.updateVisibility(description, false);
|
||||||
|
} else {
|
||||||
|
description.setText(getFirstParagraph(descriptionHtml));
|
||||||
|
description.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
GPXFile gpxFile = getGPXFile();
|
||||||
|
String title = gpxFile.metadata.getArticleTitle();
|
||||||
|
String imageUrl = getMetadataImageLink(gpxFile.metadata);
|
||||||
|
GpxReadDescriptionDialogFragment.showInstance(mapActivity, title, imageUrl, descriptionHtml);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
AndroidUiHelper.updateVisibility(description, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setOnTouchItem(View item, final ImageView image, final ImageView filled, @DrawableRes final Integer resId, @ColorRes final int colorDef, @ColorRes final int colorPres) {
|
private void setOnTouchItem(View item, final ImageView image, final ImageView filled, @DrawableRes final Integer resId, @ColorRes final int colorDef, @ColorRes final int colorPres) {
|
||||||
item.setOnTouchListener(new View.OnTouchListener() {
|
item.setOnTouchListener(new View.OnTouchListener() {
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
|
|
|
@ -110,12 +110,14 @@ import static net.osmand.plus.track.OptionsCard.SHOW_ON_MAP_BUTTON_INDEX;
|
||||||
import static net.osmand.plus.track.OptionsCard.UPLOAD_OSM_BUTTON_INDEX;
|
import static net.osmand.plus.track.OptionsCard.UPLOAD_OSM_BUTTON_INDEX;
|
||||||
import static net.osmand.plus.track.TrackPointsCard.ADD_WAYPOINT_INDEX;
|
import static net.osmand.plus.track.TrackPointsCard.ADD_WAYPOINT_INDEX;
|
||||||
import static net.osmand.plus.track.TrackPointsCard.DELETE_WAYPOINTS_INDEX;
|
import static net.osmand.plus.track.TrackPointsCard.DELETE_WAYPOINTS_INDEX;
|
||||||
|
import static net.osmand.plus.track.TrackPointsCard.OPEN_WAYPOINT_INDEX;
|
||||||
|
|
||||||
public class TrackMenuFragment extends ContextMenuScrollFragment implements CardListener,
|
public class TrackMenuFragment extends ContextMenuScrollFragment implements CardListener,
|
||||||
SegmentActionsListener, RenameCallback, OnTrackFileMoveListener, OnPointsDeleteListener,
|
SegmentActionsListener, RenameCallback, OnTrackFileMoveListener, OnPointsDeleteListener,
|
||||||
OsmAndLocationListener, OsmAndCompassListener {
|
OsmAndLocationListener, OsmAndCompassListener {
|
||||||
|
|
||||||
public static final String OPEN_TRACK_MENU = "open_track_menu";
|
public static final String OPEN_TRACK_MENU = "open_track_menu";
|
||||||
|
public static final String RETURN_SCREEN_NAME = "return_screen_name";
|
||||||
|
|
||||||
public static final String TAG = TrackMenuFragment.class.getName();
|
public static final String TAG = TrackMenuFragment.class.getName();
|
||||||
private static final Log log = PlatformUtil.getLog(TrackMenuFragment.class);
|
private static final Log log = PlatformUtil.getLog(TrackMenuFragment.class);
|
||||||
|
@ -137,12 +139,14 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
private View searchContainer;
|
private View searchContainer;
|
||||||
private ImageView searchButton;
|
private ImageView searchButton;
|
||||||
private EditText searchEditText;
|
private EditText searchEditText;
|
||||||
|
private View backButtonContainer;
|
||||||
private TextView toolbarTextView;
|
private TextView toolbarTextView;
|
||||||
private ViewGroup headerContainer;
|
private ViewGroup headerContainer;
|
||||||
private View routeMenuTopShadowAll;
|
private View routeMenuTopShadowAll;
|
||||||
private BottomNavigationView bottomNav;
|
private BottomNavigationView bottomNav;
|
||||||
|
|
||||||
private String gpxTitle;
|
private String gpxTitle;
|
||||||
|
private String returnScreenName;
|
||||||
private TrackChartPoints trackChartPoints;
|
private TrackChartPoints trackChartPoints;
|
||||||
|
|
||||||
private Float heading;
|
private Float heading;
|
||||||
|
@ -152,6 +156,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
private LatLon latLon;
|
private LatLon latLon;
|
||||||
|
|
||||||
private int menuTitleHeight;
|
private int menuTitleHeight;
|
||||||
|
private int menuHeaderHeight;
|
||||||
private int toolbarHeightPx;
|
private int toolbarHeightPx;
|
||||||
private boolean mapPositionAdjusted;
|
private boolean mapPositionAdjusted;
|
||||||
|
|
||||||
|
@ -264,6 +269,10 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
this.latLon = latLon;
|
this.latLon = latLon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setReturnScreenName(String returnScreenName) {
|
||||||
|
this.returnScreenName = returnScreenName;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = super.onCreateView(inflater, container, savedInstanceState);
|
View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
@ -277,6 +286,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
toolbarTextView = view.findViewById(R.id.toolbar_title);
|
toolbarTextView = view.findViewById(R.id.toolbar_title);
|
||||||
searchButton = view.findViewById(R.id.search_button);
|
searchButton = view.findViewById(R.id.search_button);
|
||||||
searchContainer = view.findViewById(R.id.search_container);
|
searchContainer = view.findViewById(R.id.search_container);
|
||||||
|
backButtonContainer = view.findViewById(R.id.back_button_container);
|
||||||
|
|
||||||
if (isPortrait()) {
|
if (isPortrait()) {
|
||||||
AndroidUiHelper.updateVisibility(getTopShadow(), true);
|
AndroidUiHelper.updateVisibility(getTopShadow(), true);
|
||||||
|
@ -292,8 +302,12 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
updateHeader();
|
updateHeader();
|
||||||
setupButtons(view);
|
setupButtons(view);
|
||||||
updateCardsLayout();
|
updateCardsLayout();
|
||||||
|
if (menuType == TrackMenuType.OVERVIEW && isPortrait()) {
|
||||||
|
calculateLayoutAndShowHeader();
|
||||||
|
} else {
|
||||||
calculateLayoutAndUpdateMenuState();
|
calculateLayoutAndUpdateMenuState();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +326,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
}
|
}
|
||||||
headerContainer.addView(overviewCard.getView());
|
headerContainer.addView(overviewCard.getView());
|
||||||
} else {
|
} else {
|
||||||
overviewCard = new OverviewCard(getMapActivity(), displayHelper, this, selectedGpxFile);
|
overviewCard = new OverviewCard(getMapActivity(), this, selectedGpxFile);
|
||||||
overviewCard.setListener(this);
|
overviewCard.setListener(this);
|
||||||
headerContainer.addView(overviewCard.build(getMapActivity()));
|
headerContainer.addView(overviewCard.build(getMapActivity()));
|
||||||
}
|
}
|
||||||
|
@ -391,6 +405,20 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
backButtonContainer.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
MapActivity mapActivity = getMapActivity();
|
||||||
|
if (mapActivity != null) {
|
||||||
|
mapActivity.launchPrevActivityIntent();
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
TextView backButtonText = backButtonContainer.findViewById(R.id.back_button_text);
|
||||||
|
backButtonText.setText(returnScreenName);
|
||||||
|
ImageView backButtonIcon = backButtonContainer.findViewById(R.id.back_button_icon);
|
||||||
|
backButtonIcon.setImageResource(AndroidUtils.getNavigationIconResId(backButtonIcon.getContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupCards() {
|
private void setupCards() {
|
||||||
|
@ -462,8 +490,8 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void calculateLayout(View view, boolean initLayout) {
|
protected void calculateLayout(View view, boolean initLayout) {
|
||||||
menuTitleHeight = routeMenuTopShadowAll.getHeight()
|
menuHeaderHeight = headerContainer.getHeight();
|
||||||
+ bottomNav.getHeight();
|
menuTitleHeight = routeMenuTopShadowAll.getHeight() + bottomNav.getHeight();
|
||||||
super.calculateLayout(view, initLayout);
|
super.calculateLayout(view, initLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,6 +521,8 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
boolean changed = currentMenuState != previousMenuState;
|
boolean changed = currentMenuState != previousMenuState;
|
||||||
if (changed) {
|
if (changed) {
|
||||||
updateControlsVisibility(true);
|
updateControlsVisibility(true);
|
||||||
|
boolean backButtonVisible = !Algorithms.isEmpty(returnScreenName) && currentMenuState == MenuState.HALF_SCREEN;
|
||||||
|
AndroidUiHelper.updateVisibility(backButtonContainer, backButtonVisible);
|
||||||
}
|
}
|
||||||
if (currentMenuState != MenuState.FULL_SCREEN && (changed || !mapPositionAdjusted)) {
|
if (currentMenuState != MenuState.FULL_SCREEN && (changed || !mapPositionAdjusted)) {
|
||||||
adjustMapPosition(getMenuStatePosY(currentMenuState));
|
adjustMapPosition(getMenuStatePosY(currentMenuState));
|
||||||
|
@ -730,7 +760,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
segment = segments.get(0);
|
segment = segments.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_SEGMENT};
|
GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[]{GpxDisplayItemType.TRACK_SEGMENT};
|
||||||
List<GpxDisplayItem> items = TrackDisplayHelper.flatten(displayHelper.getOriginalGroups(filterTypes));
|
List<GpxDisplayItem> items = TrackDisplayHelper.flatten(displayHelper.getOriginalGroups(filterTypes));
|
||||||
if (segment != null && !Algorithms.isEmpty(items)) {
|
if (segment != null && !Algorithms.isEmpty(items)) {
|
||||||
SplitSegmentDialogFragment.showInstance(fragmentManager, displayHelper, items.get(0), segment);
|
SplitSegmentDialogFragment.showInstance(fragmentManager, displayHelper, items.get(0), segment);
|
||||||
|
@ -794,6 +824,8 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
} else {
|
} else {
|
||||||
pointsCard.setSelectionMode(true);
|
pointsCard.setSelectionMode(true);
|
||||||
}
|
}
|
||||||
|
} else if (buttonIndex == OPEN_WAYPOINT_INDEX) {
|
||||||
|
dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -828,8 +860,10 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onHeaderClick() {
|
protected void onHeaderClick() {
|
||||||
|
if (getCurrentMenuState() == MenuState.HEADER_ONLY) {
|
||||||
updateMenuState();
|
updateMenuState();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void adjustMapPosition(int y) {
|
private void adjustMapPosition(int y) {
|
||||||
MapActivity mapActivity = getMapActivity();
|
MapActivity mapActivity = getMapActivity();
|
||||||
|
@ -887,6 +921,20 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void calculateLayoutAndShowHeader() {
|
||||||
|
runLayoutListener(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int posY = getViewHeight() - menuHeaderHeight - menuTitleHeight - getShadowHeight();
|
||||||
|
if (posY < getViewY()) {
|
||||||
|
updateMainViewLayout(posY);
|
||||||
|
}
|
||||||
|
animateMainView(posY, false, getCurrentMenuState(), getCurrentMenuState());
|
||||||
|
updateMapControlsPos(TrackMenuFragment.this, posY, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void updateMenuState() {
|
private void updateMenuState() {
|
||||||
if (menuType == TrackMenuType.OPTIONS) {
|
if (menuType == TrackMenuType.OPTIONS) {
|
||||||
openMenuFullScreen();
|
openMenuFullScreen();
|
||||||
|
@ -965,6 +1013,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
public void openAnalyzeOnMap(GpxDisplayItem gpxItem) {
|
public void openAnalyzeOnMap(GpxDisplayItem gpxItem) {
|
||||||
TrackDetailsMenu trackDetailsMenu = getMapActivity().getTrackDetailsMenu();
|
TrackDetailsMenu trackDetailsMenu = getMapActivity().getTrackDetailsMenu();
|
||||||
trackDetailsMenu.setGpxItem(gpxItem);
|
trackDetailsMenu.setGpxItem(gpxItem);
|
||||||
|
trackDetailsMenu.setSelectedGpxFile(selectedGpxFile);
|
||||||
trackDetailsMenu.show();
|
trackDetailsMenu.show();
|
||||||
hide();
|
hide();
|
||||||
}
|
}
|
||||||
|
@ -1062,7 +1111,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
@Override
|
@Override
|
||||||
public void gpxSavingFinished(Exception errorMessage) {
|
public void gpxSavingFinished(Exception errorMessage) {
|
||||||
if (selectedGpxFile != null) {
|
if (selectedGpxFile != null) {
|
||||||
List<GpxDisplayGroup> groups = displayHelper.getDisplayGroups(new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_SEGMENT});
|
List<GpxDisplayGroup> groups = displayHelper.getDisplayGroups(new GpxDisplayItemType[]{GpxDisplayItemType.TRACK_SEGMENT});
|
||||||
selectedGpxFile.setDisplayGroups(groups, app);
|
selectedGpxFile.setDisplayGroups(groups, app);
|
||||||
selectedGpxFile.processPoints(app);
|
selectedGpxFile.processPoints(app);
|
||||||
}
|
}
|
||||||
|
@ -1096,21 +1145,26 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void openTrack(@NonNull Context context, @Nullable File file, Bundle prevIntentParams) {
|
public static void openTrack(@NonNull Context context, @Nullable File file, Bundle prevIntentParams) {
|
||||||
|
openTrack(context, file, prevIntentParams, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void openTrack(@NonNull Context context, @Nullable File file, @Nullable Bundle prevIntentParams, @Nullable String returnScreenName) {
|
||||||
boolean currentRecording = file == null;
|
boolean currentRecording = file == null;
|
||||||
String path = file != null ? file.getAbsolutePath() : null;
|
String path = file != null ? file.getAbsolutePath() : null;
|
||||||
if (context instanceof MapActivity) {
|
if (context instanceof MapActivity) {
|
||||||
TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null);
|
TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null, null);
|
||||||
} else {
|
} else {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(TRACK_FILE_NAME, path);
|
bundle.putString(TRACK_FILE_NAME, path);
|
||||||
bundle.putBoolean(OPEN_TRACK_MENU, true);
|
bundle.putBoolean(OPEN_TRACK_MENU, true);
|
||||||
bundle.putBoolean(CURRENT_RECORDING, currentRecording);
|
bundle.putBoolean(CURRENT_RECORDING, currentRecording);
|
||||||
|
bundle.putString(RETURN_SCREEN_NAME, returnScreenName);
|
||||||
MapActivity.launchMapActivityMoveToTop(context, prevIntentParams, null, bundle);
|
MapActivity.launchMapActivityMoveToTop(context, prevIntentParams, null, bundle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showInstance(@NonNull final MapActivity mapActivity, @Nullable String path,
|
public static void showInstance(@NonNull MapActivity mapActivity, @Nullable String path,
|
||||||
boolean showCurrentTrack, @Nullable final LatLon latLon) {
|
boolean showCurrentTrack, @Nullable final LatLon latLon, @Nullable final String returnScreenName) {
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
SelectedGpxFile selectedGpxFile;
|
SelectedGpxFile selectedGpxFile;
|
||||||
if (showCurrentTrack) {
|
if (showCurrentTrack) {
|
||||||
|
@ -1119,7 +1173,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(path);
|
selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(path);
|
||||||
}
|
}
|
||||||
if (selectedGpxFile != null) {
|
if (selectedGpxFile != null) {
|
||||||
showInstance(mapActivity, selectedGpxFile, latLon);
|
showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName);
|
||||||
} else if (!Algorithms.isEmpty(path)) {
|
} else if (!Algorithms.isEmpty(path)) {
|
||||||
String title = app.getString(R.string.loading_smth, "");
|
String title = app.getString(R.string.loading_smth, "");
|
||||||
final ProgressDialog progress = ProgressDialog.show(mapActivity, title, app.getString(R.string.loading_data));
|
final ProgressDialog progress = ProgressDialog.show(mapActivity, title, app.getString(R.string.loading_data));
|
||||||
|
@ -1133,7 +1187,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().selectGpxFile(result, true, false);
|
SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().selectGpxFile(result, true, false);
|
||||||
if (selectedGpxFile != null) {
|
if (selectedGpxFile != null) {
|
||||||
showInstance(mapActivity, selectedGpxFile, latLon);
|
showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (progress != null && AndroidUtils.isActivityNotDestroyed(mapActivity)) {
|
if (progress != null && AndroidUtils.isActivityNotDestroyed(mapActivity)) {
|
||||||
|
@ -1146,7 +1200,8 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean showInstance(@NonNull MapActivity mapActivity, @NonNull SelectedGpxFile selectedGpxFile, @Nullable LatLon latLon) {
|
public static boolean showInstance(@NonNull MapActivity mapActivity, @NonNull SelectedGpxFile selectedGpxFile,
|
||||||
|
@Nullable LatLon latLon, @Nullable String returnScreenName) {
|
||||||
try {
|
try {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuState.HEADER_ONLY);
|
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuState.HEADER_ONLY);
|
||||||
|
@ -1155,6 +1210,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
fragment.setRetainInstance(true);
|
fragment.setRetainInstance(true);
|
||||||
fragment.setSelectedGpxFile(selectedGpxFile);
|
fragment.setSelectedGpxFile(selectedGpxFile);
|
||||||
|
fragment.setReturnScreenName(returnScreenName);
|
||||||
|
|
||||||
if (latLon != null) {
|
if (latLon != null) {
|
||||||
fragment.setLatLon(latLon);
|
fragment.setLatLon(latLon);
|
||||||
|
|
|
@ -26,6 +26,8 @@ import net.osmand.AndroidUtils;
|
||||||
import net.osmand.Collator;
|
import net.osmand.Collator;
|
||||||
import net.osmand.GPXUtilities.WptPt;
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
import net.osmand.OsmAndCollator;
|
import net.osmand.OsmAndCollator;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
||||||
|
@ -57,6 +59,7 @@ public class TrackPointsCard extends BaseCard implements OnChildClickListener, O
|
||||||
|
|
||||||
public static final int ADD_WAYPOINT_INDEX = 0;
|
public static final int ADD_WAYPOINT_INDEX = 0;
|
||||||
public static final int DELETE_WAYPOINTS_INDEX = 1;
|
public static final int DELETE_WAYPOINTS_INDEX = 1;
|
||||||
|
public static final int OPEN_WAYPOINT_INDEX = 2;
|
||||||
|
|
||||||
private final TrackDisplayHelper displayHelper;
|
private final TrackDisplayHelper displayHelper;
|
||||||
private final GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_POINTS, GpxDisplayItemType.TRACK_ROUTE_POINTS};
|
private final GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_POINTS, GpxDisplayItemType.TRACK_ROUTE_POINTS};
|
||||||
|
@ -173,6 +176,17 @@ public class TrackPointsCard extends BaseCard implements OnChildClickListener, O
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
|
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
|
||||||
|
GpxDisplayItem item = adapter.getChild(groupPosition, childPosition);
|
||||||
|
if (item != null && item.locationStart != null) {
|
||||||
|
CardListener cardListener = getListener();
|
||||||
|
if (cardListener != null) {
|
||||||
|
cardListener.onCardButtonPressed(this, OPEN_WAYPOINT_INDEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
LatLon location = new LatLon(item.locationStart.lat, item.locationStart.lon);
|
||||||
|
PointDescription description = new PointDescription(PointDescription.POINT_TYPE_WPT, item.name);
|
||||||
|
mapActivity.getContextMenu().show(location, description, item.locationStart);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,9 +219,8 @@ public class TransportLinesMenu {
|
||||||
return transportPrefs;
|
return transportPrefs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void refreshMap(MapActivity mapActivity) {
|
private static void refreshMap(MapActivity mapActivity) {
|
||||||
ConfigureMapMenu.refreshMapComplete(mapActivity);
|
mapActivity.refreshMapComplete();
|
||||||
mapActivity.getMapLayers().updateLayers(mapActivity.getMapView());
|
mapActivity.getMapLayers().updateLayers(mapActivity.getMapView());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -333,6 +333,17 @@ public class WikiArticleHelper {
|
||||||
return res.toString();
|
return res.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static String getFirstParagraph(String descriptionHtml) {
|
||||||
|
if (descriptionHtml != null) {
|
||||||
|
String firstParagraph = WikiArticleHelper.getPartialContent(descriptionHtml);
|
||||||
|
if (!Algorithms.isEmpty(firstParagraph)) {
|
||||||
|
return firstParagraph;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return descriptionHtml;
|
||||||
|
}
|
||||||
|
|
||||||
public static String buildTravelUrl(String url, String lang) {
|
public static String buildTravelUrl(String url, String lang) {
|
||||||
String title = url.replace(" ", "_");
|
String title = url.replace(" ", "_");
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -160,7 +160,7 @@ public class WikivoyageArticleDialogFragment extends WikiArticleBaseDialogFragme
|
||||||
}
|
}
|
||||||
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
||||||
File file = travelHelper.createGpxFile(article);
|
File file = travelHelper.createGpxFile(article);
|
||||||
openTrack(activity, new File(file.getAbsolutePath()), null);
|
openTrack(activity, new File(file.getAbsolutePath()), null, getString(R.string.icon_group_travel));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
trackButton.setVisibility(View.GONE);
|
trackButton.setVisibility(View.GONE);
|
||||||
|
|
|
@ -6,8 +6,10 @@ public class TravelGpx extends TravelArticle {
|
||||||
public static final String DIFF_ELE_UP = "diff_ele_up";
|
public static final String DIFF_ELE_UP = "diff_ele_up";
|
||||||
public static final String DIFF_ELE_DOWN = "diff_ele_down";
|
public static final String DIFF_ELE_DOWN = "diff_ele_down";
|
||||||
public static final String USER = "user";
|
public static final String USER = "user";
|
||||||
|
public static final String ACTIVITY_TYPE = "route_activity_type";
|
||||||
|
|
||||||
public String user;
|
public String user;
|
||||||
|
public String activityType;
|
||||||
public float totalDistance = 0;
|
public float totalDistance = 0;
|
||||||
public double diffElevationUp = 0;
|
public double diffElevationUp = 0;
|
||||||
public double diffElevationDown = 0;
|
public double diffElevationDown = 0;
|
||||||
|
|
|
@ -58,6 +58,7 @@ import static net.osmand.plus.helpers.GpxUiHelper.getGpxTitle;
|
||||||
import static net.osmand.plus.wikivoyage.data.TravelGpx.DIFF_ELE_DOWN;
|
import static net.osmand.plus.wikivoyage.data.TravelGpx.DIFF_ELE_DOWN;
|
||||||
import static net.osmand.plus.wikivoyage.data.TravelGpx.DIFF_ELE_UP;
|
import static net.osmand.plus.wikivoyage.data.TravelGpx.DIFF_ELE_UP;
|
||||||
import static net.osmand.plus.wikivoyage.data.TravelGpx.DISTANCE;
|
import static net.osmand.plus.wikivoyage.data.TravelGpx.DISTANCE;
|
||||||
|
import static net.osmand.plus.wikivoyage.data.TravelGpx.ACTIVITY_TYPE;
|
||||||
import static net.osmand.plus.wikivoyage.data.TravelGpx.USER;
|
import static net.osmand.plus.wikivoyage.data.TravelGpx.USER;
|
||||||
import static net.osmand.util.Algorithms.capitalizeFirstLetter;
|
import static net.osmand.util.Algorithms.capitalizeFirstLetter;
|
||||||
|
|
||||||
|
@ -203,6 +204,7 @@ public class TravelObfHelper implements TravelHelper {
|
||||||
LOG.debug(e.getMessage(), e);
|
LOG.debug(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
res.user = Algorithms.emptyIfNull(amenity.getTagContent(USER));
|
res.user = Algorithms.emptyIfNull(amenity.getTagContent(USER));
|
||||||
|
res.activityType = Algorithms.emptyIfNull(amenity.getTagContent(ACTIVITY_TYPE));
|
||||||
articles.put("en", res);
|
articles.put("en", res);
|
||||||
return articles;
|
return articles;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import com.squareup.picasso.RequestCreator;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PicassoUtils;
|
import net.osmand.PicassoUtils;
|
||||||
|
import net.osmand.osm.RouteActivityType;
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
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;
|
||||||
|
@ -31,11 +32,14 @@ import net.osmand.plus.wikivoyage.WikivoyageUtils;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelGpx;
|
import net.osmand.plus.wikivoyage.data.TravelGpx;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
||||||
import net.osmand.plus.wikivoyage.explore.travelcards.TravelGpxCard;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.plus.wikivoyage.explore.travelcards.TravelGpxCard.*;
|
||||||
|
import static net.osmand.util.Algorithms.capitalizeFirstLetterAndLowercase;
|
||||||
|
|
||||||
public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|
||||||
private static final int HEADER_TYPE = 0;
|
private static final int HEADER_TYPE = 0;
|
||||||
|
@ -81,7 +85,7 @@ public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||||
case ARTICLE_TYPE:
|
case ARTICLE_TYPE:
|
||||||
return new ItemVH(inflate(parent, R.layout.wikivoyage_article_card));
|
return new ItemVH(inflate(parent, R.layout.wikivoyage_article_card));
|
||||||
case GPX_TYPE:
|
case GPX_TYPE:
|
||||||
return new TravelGpxCard.TravelGpxVH(inflate(parent, R.layout.wikivoyage_travel_gpx_card));
|
return new TravelGpxVH(inflate(parent, R.layout.wikivoyage_travel_gpx_card));
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Unsupported view type: " + viewType);
|
throw new RuntimeException("Unsupported view type: " + viewType);
|
||||||
}
|
}
|
||||||
|
@ -132,14 +136,20 @@ public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||||
holder.rightButton.setCompoundDrawablesWithIntrinsicBounds(null, null, deleteIcon, null);
|
holder.rightButton.setCompoundDrawablesWithIntrinsicBounds(null, null, deleteIcon, null);
|
||||||
holder.divider.setVisibility(lastItem ? View.GONE : View.VISIBLE);
|
holder.divider.setVisibility(lastItem ? View.GONE : View.VISIBLE);
|
||||||
holder.shadow.setVisibility(lastItem ? View.VISIBLE : View.GONE);
|
holder.shadow.setVisibility(lastItem ? View.VISIBLE : View.GONE);
|
||||||
} else if (viewHolder instanceof TravelGpxCard.TravelGpxVH) {
|
} else if (viewHolder instanceof TravelGpxVH) {
|
||||||
final TravelGpx article = (TravelGpx) getItem(position);
|
final TravelGpx article = (TravelGpx) getItem(position);
|
||||||
final TravelGpxCard.TravelGpxVH holder = (TravelGpxCard.TravelGpxVH) viewHolder;
|
final TravelGpxVH holder = (TravelGpxVH) viewHolder;
|
||||||
holder.title.setText(article.getTitle());
|
holder.title.setText(article.getTitle());
|
||||||
Drawable icon = getActiveIcon(R.drawable.ic_action_user_account_16);
|
holder.userIcon.setImageDrawable(getActiveIcon(R.drawable.ic_action_user_account_16));
|
||||||
holder.user.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
|
holder.user.setText(article.user);
|
||||||
holder.user.setText(WikiArticleHelper.getPartialContent(article.user));
|
String activityTypeKey = article.activityType;
|
||||||
AndroidUtils.setBackground(app, holder.user, nightMode, R.drawable.btn_border_bg_light, R.drawable.btn_border_bg_dark);
|
if (!Algorithms.isEmpty(activityTypeKey)) {
|
||||||
|
RouteActivityType activityType = RouteActivityType.getOrCreateTypeFromName(activityTypeKey);
|
||||||
|
int activityTypeIcon = getActivityTypeIcon(activityType);
|
||||||
|
holder.activityTypeIcon.setImageDrawable(getActiveIcon(activityTypeIcon));
|
||||||
|
holder.activityType.setText(getActivityTypeTitle(activityType));
|
||||||
|
holder.activityTypeLabel.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
holder.distance.setText(OsmAndFormatter.getFormattedDistance(article.totalDistance, app));
|
holder.distance.setText(OsmAndFormatter.getFormattedDistance(article.totalDistance, app));
|
||||||
holder.diffElevationUp.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationUp, app));
|
holder.diffElevationUp.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationUp, app));
|
||||||
holder.diffElevationDown.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationDown, app));
|
holder.diffElevationDown.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationDown, app));
|
||||||
|
@ -159,7 +169,18 @@ public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSaveButton(final TravelGpxCard.TravelGpxVH holder, final TravelGpx article) {
|
@DrawableRes
|
||||||
|
private int getActivityTypeIcon(RouteActivityType activityType) {
|
||||||
|
int iconId = app.getResources().getIdentifier("mx_" + activityType.getIcon(), "drawable", app.getPackageName());
|
||||||
|
return iconId != 0 ? iconId : R.drawable.mx_special_marker;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getActivityTypeTitle(RouteActivityType activityType) {
|
||||||
|
return AndroidUtils.getActivityTypeStringPropertyName(app, activityType.getName(),
|
||||||
|
capitalizeFirstLetterAndLowercase(activityType.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateSaveButton(final TravelGpxVH holder, final TravelGpx article) {
|
||||||
if (article != null) {
|
if (article != null) {
|
||||||
final TravelLocalDataHelper helper = app.getTravelHelper().getBookmarksHelper();
|
final TravelLocalDataHelper helper = app.getTravelHelper().getBookmarksHelper();
|
||||||
final boolean saved = helper.isArticleSaved(article);
|
final boolean saved = helper.isArticleSaved(article);
|
||||||
|
|
|
@ -2,22 +2,28 @@ package net.osmand.plus.wikivoyage.explore.travelcards;
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.osm.RouteActivityType;
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
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.track.TrackMenuFragment;
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelGpx;
|
import net.osmand.plus.wikivoyage.data.TravelGpx;
|
||||||
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
import net.osmand.plus.wikivoyage.data.TravelLocalDataHelper;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import static net.osmand.util.Algorithms.capitalizeFirstLetterAndLowercase;
|
||||||
|
|
||||||
public class TravelGpxCard extends BaseTravelCard {
|
public class TravelGpxCard extends BaseTravelCard {
|
||||||
|
|
||||||
public static final int TYPE = 3;
|
public static final int TYPE = 3;
|
||||||
|
@ -40,10 +46,16 @@ public class TravelGpxCard extends BaseTravelCard {
|
||||||
if (viewHolder instanceof TravelGpxVH) {
|
if (viewHolder instanceof TravelGpxVH) {
|
||||||
final TravelGpxVH holder = (TravelGpxVH) viewHolder;
|
final TravelGpxVH holder = (TravelGpxVH) viewHolder;
|
||||||
holder.title.setText(article.getTitle());
|
holder.title.setText(article.getTitle());
|
||||||
Drawable icon = getActiveIcon(R.drawable.ic_action_user_account_16);
|
holder.userIcon.setImageDrawable(getActiveIcon(R.drawable.ic_action_user_account_16));
|
||||||
holder.user.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
|
|
||||||
holder.user.setText(article.user);
|
holder.user.setText(article.user);
|
||||||
AndroidUtils.setBackground(app, holder.user, nightMode, R.drawable.btn_border_bg_light, R.drawable.btn_border_bg_dark);
|
String activityTypeKey = article.activityType;
|
||||||
|
if (!Algorithms.isEmpty(activityTypeKey)) {
|
||||||
|
RouteActivityType activityType = RouteActivityType.getOrCreateTypeFromName(activityTypeKey);
|
||||||
|
int activityTypeIcon = getActivityTypeIcon(activityType);
|
||||||
|
holder.activityTypeIcon.setImageDrawable(getActiveIcon(activityTypeIcon));
|
||||||
|
holder.activityType.setText(getActivityTypeTitle(activityType));
|
||||||
|
holder.activityTypeLabel.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
holder.distance.setText(OsmAndFormatter.getFormattedDistance(article.totalDistance, app));
|
holder.distance.setText(OsmAndFormatter.getFormattedDistance(article.totalDistance, app));
|
||||||
holder.diffElevationUp.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationUp, app));
|
holder.diffElevationUp.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationUp, app));
|
||||||
holder.diffElevationDown.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationDown, app));
|
holder.diffElevationDown.setText(OsmAndFormatter.getFormattedAlt(article.diffElevationDown, app));
|
||||||
|
@ -66,6 +78,17 @@ public class TravelGpxCard extends BaseTravelCard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DrawableRes
|
||||||
|
private int getActivityTypeIcon(RouteActivityType activityType) {
|
||||||
|
int iconId = app.getResources().getIdentifier("mx_" + activityType.getIcon(), "drawable", app.getPackageName());
|
||||||
|
return iconId != 0 ? iconId : R.drawable.mx_special_marker;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getActivityTypeTitle(RouteActivityType activityType) {
|
||||||
|
return AndroidUtils.getActivityTypeStringPropertyName(app, activityType.getName(),
|
||||||
|
capitalizeFirstLetterAndLowercase(activityType.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
private void updateSaveButton(final TravelGpxVH holder) {
|
private void updateSaveButton(final TravelGpxVH holder) {
|
||||||
if (article != null) {
|
if (article != null) {
|
||||||
final TravelLocalDataHelper helper = app.getTravelHelper().getBookmarksHelper();
|
final TravelLocalDataHelper helper = app.getTravelHelper().getBookmarksHelper();
|
||||||
|
@ -92,6 +115,10 @@ public class TravelGpxCard extends BaseTravelCard {
|
||||||
|
|
||||||
public final TextView title;
|
public final TextView title;
|
||||||
public final TextView user;
|
public final TextView user;
|
||||||
|
public final ImageView userIcon;
|
||||||
|
public final TextView activityType;
|
||||||
|
public final ImageView activityTypeIcon;
|
||||||
|
public final View activityTypeLabel;
|
||||||
public final TextView distance;
|
public final TextView distance;
|
||||||
public final TextView diffElevationUp;
|
public final TextView diffElevationUp;
|
||||||
public final TextView diffElevationDown;
|
public final TextView diffElevationDown;
|
||||||
|
@ -104,6 +131,10 @@ public class TravelGpxCard extends BaseTravelCard {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
title = itemView.findViewById(R.id.title);
|
title = itemView.findViewById(R.id.title);
|
||||||
user = itemView.findViewById(R.id.user_name);
|
user = itemView.findViewById(R.id.user_name);
|
||||||
|
userIcon = itemView.findViewById(R.id.user_icon);
|
||||||
|
activityType = itemView.findViewById(R.id.activity_type);
|
||||||
|
activityTypeIcon = itemView.findViewById(R.id.activity_type_icon);
|
||||||
|
activityTypeLabel = itemView.findViewById(R.id.activity_type_label);
|
||||||
distance = itemView.findViewById(R.id.distance);
|
distance = itemView.findViewById(R.id.distance);
|
||||||
diffElevationUp = itemView.findViewById(R.id.diff_ele_up);
|
diffElevationUp = itemView.findViewById(R.id.diff_ele_up);
|
||||||
diffElevationDown = itemView.findViewById(R.id.diff_ele_down);
|
diffElevationDown = itemView.findViewById(R.id.diff_ele_down);
|
||||||
|
|
Loading…
Reference in a new issue