From d5f6e78954c9c36c4e3af07d9c1b5a9832ad98ab Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Fri, 7 Feb 2020 12:18:09 +0200 Subject: [PATCH 01/42] Fix icons colors for old android versions --- OsmAnd/src/net/osmand/AndroidUtils.java | 12 +++++++++++- .../monitoring/MonitoringSettingsFragment.java | 3 +-- .../osmand/plus/osmedit/OsmEditingFragment.java | 3 +-- .../plus/settings/BaseSettingsFragment.java | 16 +++++++++++++++- .../settings/GeneralProfileSettingsFragment.java | 3 +-- .../osmand/plus/settings/NavigationFragment.java | 3 +-- .../plus/settings/RouteParametersFragment.java | 3 +-- .../plus/settings/VoiceAnnouncesFragment.java | 9 ++++++--- 8 files changed, 37 insertions(+), 15 deletions(-) diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java index 4598765a46..9f0a4c4add 100644 --- a/OsmAnd/src/net/osmand/AndroidUtils.java +++ b/OsmAnd/src/net/osmand/AndroidUtils.java @@ -56,7 +56,6 @@ import android.widget.TextView; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; -import net.osmand.plus.download.DownloadActivity; import net.osmand.util.Algorithms; import java.io.File; @@ -264,6 +263,17 @@ public class AndroidUtils { lightNormal, lightChecked, darkNormal, darkChecked); } + public static ColorStateList createEnabledColorStateList(Context ctx, @ColorRes int normal, @ColorRes int pressed) { + return createEnabledColorStateList(ctx, false, normal, pressed, 0, 0); + } + + public static ColorStateList createEnabledColorStateList(Context ctx, boolean night, + @ColorRes int lightNormal, @ColorRes int lightPressed, + @ColorRes int darkNormal, @ColorRes int darkPressed) { + return createColorStateList(ctx, night, android.R.attr.state_enabled, + lightNormal, lightPressed, darkNormal, darkPressed); + } + public static ColorStateList createPressedColorStateList(Context ctx, @ColorRes int normal, @ColorRes int pressed) { return createPressedColorStateList(ctx, false, normal, pressed, 0, 0); } diff --git a/OsmAnd/src/net/osmand/plus/monitoring/MonitoringSettingsFragment.java b/OsmAnd/src/net/osmand/plus/monitoring/MonitoringSettingsFragment.java index 409eb695ea..cabf945875 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/MonitoringSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/MonitoringSettingsFragment.java @@ -9,7 +9,6 @@ import android.support.v7.preference.Preference; import android.text.SpannableString; import android.text.SpannableStringBuilder; -import net.osmand.AndroidUtils; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmAndAppCustomization; import net.osmand.plus.OsmandPlugin; @@ -222,7 +221,7 @@ public class MonitoringSettingsFragment extends BaseSettingsFragment private void setupLiveMonitoringPref() { Drawable disabled = getContentIcon(R.drawable.ic_action_offline); Drawable enabled = getActiveIcon(R.drawable.ic_world_globe_dark); - Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + Drawable icon = getPersistentPrefIcon(enabled, disabled); SwitchPreferenceEx liveMonitoring = (SwitchPreferenceEx) findPreference(settings.LIVE_MONITORING.getId()); liveMonitoring.setDescription(getString(R.string.live_monitoring_m_descr)); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java index 4b37a68d6e..3a4c67b1fb 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingFragment.java @@ -12,7 +12,6 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; -import net.osmand.AndroidUtils; import net.osmand.plus.OsmAndAppCustomization; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; @@ -71,7 +70,7 @@ public class OsmEditingFragment extends BaseSettingsFragment implements OnPrefer private void setupOfflineEditingPref() { Drawable disabled = getContentIcon(R.drawable.ic_action_offline); Drawable enabled = getActiveIcon(R.drawable.ic_world_globe_dark); - Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + Drawable icon = getPersistentPrefIcon(enabled, disabled); SwitchPreferenceEx offlineEditingPref = (SwitchPreferenceEx) findPreference(settings.OFFLINE_EDITION.getId()); offlineEditingPref.setDescription(getString(R.string.offline_edition_descr)); diff --git a/OsmAnd/src/net/osmand/plus/settings/BaseSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/BaseSettingsFragment.java index d53bb0cd81..322316d88b 100644 --- a/OsmAnd/src/net/osmand/plus/settings/BaseSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/BaseSettingsFragment.java @@ -3,6 +3,7 @@ package net.osmand.plus.settings; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Build; @@ -18,6 +19,7 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; +import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.view.ViewCompat; import android.support.v7.preference.EditTextPreference; import android.support.v7.preference.ListPreference; @@ -730,7 +732,19 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl protected Drawable getPersistentPrefIcon(@DrawableRes int iconId) { Drawable disabled = UiUtilities.createTintedDrawable(app, iconId, ContextCompat.getColor(app, R.color.icon_color_default_light)); Drawable enabled = UiUtilities.createTintedDrawable(app, iconId, getActiveProfileColor()); - return AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + return getPersistentPrefIcon(enabled, disabled); + } + + protected Drawable getPersistentPrefIcon(Drawable enabled, Drawable disabled) { + Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + + if (Build.VERSION.SDK_INT < 21) { + ColorStateList colorStateList = AndroidUtils.createEnabledColorStateList(app, R.color.icon_color_default_light, getActiveProfileColorRes()); + icon = DrawableCompat.wrap(icon); + DrawableCompat.setTintList(icon, colorStateList); + return icon; + } + return icon; } public SwitchPreferenceCompat createSwitchPreference(OsmandSettings.OsmandPreference b, int title, int summary, int layoutId) { diff --git a/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java index 1eba881215..c9b3959867 100644 --- a/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/GeneralProfileSettingsFragment.java @@ -21,7 +21,6 @@ import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.TextView; -import net.osmand.AndroidUtils; import net.osmand.data.PointDescription; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandSettings; @@ -127,7 +126,7 @@ public class GeneralProfileSettingsFragment extends BaseSettingsFragment impleme private void setupCenterPositionOnMapPref() { Drawable disabled = getContentIcon(R.drawable.ic_action_display_position_bottom); Drawable enabled = getActiveIcon(R.drawable.ic_action_display_position_center); - Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + Drawable icon = getPersistentPrefIcon(enabled, disabled); SwitchPreferenceCompat centerPositionOnMap = (SwitchPreferenceCompat) findPreference(settings.CENTER_POSITION_ON_MAP.getId()); centerPositionOnMap.setIcon(icon); diff --git a/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java b/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java index b18e8c6bd8..8b08ea12f0 100644 --- a/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java @@ -8,7 +8,6 @@ import android.support.v7.preference.SwitchPreferenceCompat; import android.view.LayoutInflater; import android.view.View; -import net.osmand.AndroidUtils; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; @@ -88,7 +87,7 @@ public class NavigationFragment extends BaseSettingsFragment { private void setupSpeakRoutingAlarmsPref() { Drawable disabled = getContentIcon(R.drawable.ic_action_volume_mute); Drawable enabled = getActiveIcon(R.drawable.ic_action_volume_up); - Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + Drawable icon = getPersistentPrefIcon(enabled, disabled); SwitchPreferenceCompat speakRoutingAlarms = (SwitchPreferenceCompat) findPreference(settings.VOICE_MUTE.getId()); speakRoutingAlarms.setIcon(icon); diff --git a/OsmAnd/src/net/osmand/plus/settings/RouteParametersFragment.java b/OsmAnd/src/net/osmand/plus/settings/RouteParametersFragment.java index 7c79ff8e9f..43ff4efddc 100644 --- a/OsmAnd/src/net/osmand/plus/settings/RouteParametersFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/RouteParametersFragment.java @@ -9,7 +9,6 @@ import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceViewHolder; import android.widget.ImageView; -import net.osmand.AndroidUtils; import net.osmand.StateChangedListener; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; @@ -391,7 +390,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP case GeneralRouter.ALLOW_MOTORWAYS: Drawable disabled = getContentIcon(R.drawable.ic_action_avoid_motorways); Drawable enabled = getActiveIcon(R.drawable.ic_action_motorways); - return AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + return getPersistentPrefIcon(enabled, disabled); case GeneralRouter.USE_HEIGHT_OBSTACLES: case RELIEF_SMOOTHNESS_FACTOR: return getPersistentPrefIcon(R.drawable.ic_action_elevation); diff --git a/OsmAnd/src/net/osmand/plus/settings/VoiceAnnouncesFragment.java b/OsmAnd/src/net/osmand/plus/settings/VoiceAnnouncesFragment.java index ea837ed880..c35f2075da 100644 --- a/OsmAnd/src/net/osmand/plus/settings/VoiceAnnouncesFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/VoiceAnnouncesFragment.java @@ -174,7 +174,7 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment { Drawable disabled = getContentIcon(R.drawable.ic_action_volume_mute); Drawable enabled = getActiveIcon(R.drawable.ic_action_volume_up); - Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); + Drawable icon = getPersistentPrefIcon(enabled, disabled); ListPreferenceEx voiceProvider = (ListPreferenceEx) findPreference(settings.VOICE_PROVIDER.getId()); voiceProvider.setEntries(entries); @@ -239,11 +239,14 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment { protected void onBindPreferenceViewHolder(Preference preference, PreferenceViewHolder holder) { super.onBindPreferenceViewHolder(preference, holder); if (settings.VOICE_PROVIDER.getId().equals(preference.getKey()) && preference instanceof ListPreferenceEx) { + TextView titleView = (TextView) holder.findViewById(android.R.id.title); + if (titleView != null) { + titleView.setTextColor(preference.isEnabled() ? getActiveTextColor() : getDisabledTextColor()); + } ImageView imageView = (ImageView) holder.findViewById(android.R.id.icon); if (imageView != null) { Object currentValue = ((ListPreferenceEx) preference).getValue(); - boolean enabled = preference.isEnabled() && !OsmandSettings.VOICE_PROVIDER_NOT_USE.equals(currentValue); - imageView.setEnabled(enabled); + imageView.setEnabled(preference.isEnabled() && !OsmandSettings.VOICE_PROVIDER_NOT_USE.equals(currentValue)); } } } From fe56004b666b74e4425eb53c6326052a4312e82f Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 7 Feb 2020 18:39:33 +0100 Subject: [PATCH 02/42] Add locale --- .../src/main/java/net/osmand/map/OsmandRegions.java | 8 ++++++++ OsmAnd/src/net/osmand/plus/AppInitializer.java | 2 +- OsmAnd/src/net/osmand/plus/OsmandApplication.java | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java index 07ed57126c..45300b2ed5 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java @@ -374,7 +374,15 @@ public class OsmandRegions { } public void setLocale(String locale) { + setLocale(locale, null); + } + + public void setLocale(String locale, String country) { this.locale = locale; + // Check locale and give 2 locale names +// if("zh".equals(locale) && "rTW".equals(country)) { +// this.locale = "zh-Hant"; +// } } diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java index ce7bb80b77..8fcb44f0dc 100644 --- a/OsmAnd/src/net/osmand/plus/AppInitializer.java +++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java @@ -567,7 +567,7 @@ public class AppInitializer implements IProgress { return null; } }); - app.regions.setLocale(app.getLanguage()); + app.regions.setLocale(app.getLanguage(), app.getCountry()); } diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 9fea8ac65a..7f729ca523 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -775,6 +775,16 @@ public class OsmandApplication extends MultiDexApplication { } } } + + public String getCountry() { + String country; + if (preferredLocale != null) { + country = preferredLocale.getCountry(); + } else { + country = Locale.getDefault().getCountry(); + } + return country; + } public String getLanguage() { String lang; From 757e2ed21399b2661e1347dfc0d127ed1bd85b54 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 7 Feb 2020 19:00:13 +0100 Subject: [PATCH 03/42] Include regional name for countries (zh-Hans, zh-Hant) --- .../java/net/osmand/map/OsmandRegions.java | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java index 45300b2ed5..5c7980910f 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java @@ -29,6 +29,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeSet; @@ -54,6 +55,8 @@ public class OsmandRegions { private BinaryMapIndexReader reader; private String locale = "en"; + // locale including region + private String locale2 = null; private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmandRegions.class); WorldRegion worldRegion = new WorldRegion(WorldRegion.WORLD); @@ -73,6 +76,7 @@ public class OsmandRegions { Integer nameEnType = null; Integer nameType = null; Integer nameLocaleType = null; + Integer nameLocale2Type = null; Integer langType = null; Integer metricType = null; Integer leftHandDrivingType = null; @@ -380,9 +384,13 @@ public class OsmandRegions { public void setLocale(String locale, String country) { this.locale = locale; // Check locale and give 2 locale names -// if("zh".equals(locale) && "rTW".equals(country)) { -// this.locale = "zh-Hant"; -// } + if("zh".equals(locale)) { + if("TW".equalsIgnoreCase(country)) { + this.locale2 = "zh-Hant"; + } else { + this.locale2 = "zh-Hans"; + } + } } @@ -435,7 +443,12 @@ public class OsmandRegions { parentRelations.put(rd.regionFullName, rd.regionParentFullName); } rd.regionName = mapIndexFields.get(mapIndexFields.nameType, object); - rd.regionNameLocale = mapIndexFields.get(mapIndexFields.nameLocaleType, object); + if(mapIndexFields.nameLocale2Type != null) { + rd.regionNameLocale = mapIndexFields.get(mapIndexFields.nameLocale2Type, object); + } + if (rd.regionNameLocale == null) { + rd.regionNameLocale = mapIndexFields.get(mapIndexFields.nameLocaleType, object); + } rd.regionNameEn = mapIndexFields.get(mapIndexFields.nameEnType, object); rd.params.regionLang = mapIndexFields.get(mapIndexFields.langType, object); rd.params.regionLeftHandDriving = mapIndexFields.get(mapIndexFields.leftHandDrivingType, object); @@ -551,6 +564,9 @@ public class OsmandRegions { mapIndexFields.nameType = object.getMapIndex().getRule(FIELD_NAME, null); mapIndexFields.nameEnType = object.getMapIndex().getRule(FIELD_NAME_EN, null); mapIndexFields.nameLocaleType = object.getMapIndex().getRule(FIELD_NAME + ":" + locale, null); + if(locale2 != null) { + mapIndexFields.nameLocale2Type = object.getMapIndex().getRule(FIELD_NAME + ":" + locale2, null); + } mapIndexFields.parentFullName = object.getMapIndex().getRule(FIELD_REGION_PARENT_NAME, null); mapIndexFields.fullNameType = object.getMapIndex().getRule(FIELD_REGION_FULL_NAME, null); mapIndexFields.langType = object.getMapIndex().getRule(FIELD_LANG, null); @@ -573,9 +589,15 @@ public class OsmandRegions { String nm = b.getNameByType(or.mapIndexFields.nameEnType); if (nm == null) { nm = b.getName(); + System.out.println(or.getLocaleName(or.getDownloadName(b), false)); } if (or.isDownloadOfType(b, MAP_TYPE)) { found.add(nm.toLowerCase()); + String localName = b.getNameByType(or.mapIndexFields.nameLocaleType); + if(or.mapIndexFields.nameLocale2Type != null) { + localName = b.getNameByType(or.mapIndexFields.nameLocale2Type); + } + System.out.println(String.format("Region %s %s", b.getName(), localName)); } } @@ -588,6 +610,8 @@ public class OsmandRegions { public static void main(String[] args) throws IOException { OsmandRegions or = new OsmandRegions(); + Locale tw = Locale.CHINA; + or.setLocale(tw.getLanguage(), tw.getCountry()); or.prepareFile("/Users/victorshcherb/osmand/repos/resources/countries-info/regions.ocbf"); LinkedList lst = new LinkedList(); lst.add(or.getWorldRegion()); @@ -600,20 +624,20 @@ public class OsmandRegions { // lst.addAll(wd.getSubregions()); } - + or.cacheAllCountries(); // long t = System.currentTimeMillis(); // or.cacheAllCountries(); // System.out.println("Init " + (System.currentTimeMillis() - t)); - //testCountry(or, 15.8, 23.09, "chad"); - testCountry(or, 52.10, 4.92, "the netherlands", "utrecht"); - testCountry(or, 52.15, 7.50, "north rhine-westphalia"); - testCountry(or, 28.8056, 29.9858, "egypt"); + testCountry(or, 53.8820, 27.5726, "belarus", "minsk"); +// testCountry(or, 52.10, 4.92, "the netherlands", "utrecht"); +// testCountry(or, 52.15, 7.50, "north rhine-westphalia"); +// testCountry(or, 28.8056, 29.9858, "egypt"); // testCountry(or, 40.0760, 9.2807, "italy", "sardinia"); - testCountry(or, 35.7521, 139.7887, "japan"); - testCountry(or, 46.5145, 102.2580, "mongolia"); - testCountry(or, 62.54, 43.36, "arkhangelsk oblast", "northwestern federal district"); +// testCountry(or, 35.7521, 139.7887, "japan"); +// testCountry(or, 46.5145, 102.2580, "mongolia"); +// testCountry(or, 62.54, 43.36, "arkhangelsk oblast", "northwestern federal district"); } From 1e7d00f192ced50dbac855183513f2b0fde9ca0c Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 7 Feb 2020 19:02:12 +0100 Subject: [PATCH 04/42] Include regional name for countries (zh-Hans, zh-Hant) --- OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java index ab6b21fcd4..e77327708a 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java @@ -26,7 +26,7 @@ public abstract class MapRenderingTypes { private static final Log log = PlatformUtil.getLog(MapRenderingTypes.class); public static final String[] langs = new String[] { "af", "als", "ar", "az", "be", "bg", "bn", "bpy", "br", "bs", "ca", "ceb", "cs", "cy", "da", "de", "el", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gl", "he", "hi", "hsb", - "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh" }; + "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh", "zh-Hans", "zh-Hant", }; public final static byte RESTRICTION_NO_RIGHT_TURN = 1; From c9d0f7516219fca75e6e409ef3a5d4b0392c81cc Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 7 Feb 2020 19:14:25 +0100 Subject: [PATCH 05/42] make lowercase --- OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java index e77327708a..22121c301d 100644 --- a/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/main/java/net/osmand/osm/MapRenderingTypes.java @@ -26,7 +26,7 @@ public abstract class MapRenderingTypes { private static final Log log = PlatformUtil.getLog(MapRenderingTypes.class); public static final String[] langs = new String[] { "af", "als", "ar", "az", "be", "bg", "bn", "bpy", "br", "bs", "ca", "ceb", "cs", "cy", "da", "de", "el", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gl", "he", "hi", "hsb", - "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh", "zh-Hans", "zh-Hant", }; + "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lo", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sc", "sh", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh", "zh-hans", "zh-hant", }; public final static byte RESTRICTION_NO_RIGHT_TURN = 1; From 623acae43c0b21d20bd0db5a6443b41b2a71a4d4 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 7 Feb 2020 19:20:14 +0100 Subject: [PATCH 06/42] Update osmand regions --- OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java index 5c7980910f..7d413a86a2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java @@ -386,9 +386,9 @@ public class OsmandRegions { // Check locale and give 2 locale names if("zh".equals(locale)) { if("TW".equalsIgnoreCase(country)) { - this.locale2 = "zh-Hant"; + this.locale2 = "zh-hant"; } else { - this.locale2 = "zh-Hans"; + this.locale2 = "zh-hans"; } } } From 3bf85b824e0fcb69af65684c1804374d79bc3e53 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Fri, 7 Feb 2020 21:37:02 +0300 Subject: [PATCH 07/42] Fix #7741 --- .../osmand/plus/OsmAndLocationProvider.java | 92 ++++++++----------- .../plus/helpers/AvoidSpecificRoads.java | 20 ++++ .../osmand/plus/routing/RoutingHelper.java | 53 ++++++++++- 3 files changed, 112 insertions(+), 53 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java index 71a255bae4..379c98f1bf 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java @@ -1,16 +1,32 @@ package net.osmand.plus; +import android.Manifest; import android.app.Activity; -import android.location.GnssNavigationMessage; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.hardware.GeomagneticField; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.location.GnssStatus; +import android.location.GpsSatellite; +import android.location.GpsStatus; +import android.location.GpsStatus.Listener; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import android.os.Bundle; +import android.provider.Settings; +import android.support.annotation.Nullable; +import android.support.v4.app.ActivityCompat; +import android.support.v7.app.AlertDialog; +import android.util.Log; import net.osmand.GeoidAltitudeCorrection; import net.osmand.PlatformUtil; @@ -22,31 +38,16 @@ import net.osmand.data.LatLon; import net.osmand.data.QuadPoint; import net.osmand.plus.TargetPointsHelper.TargetPoint; import net.osmand.plus.routing.RoutingHelper; +import net.osmand.plus.routing.RoutingHelper.RouteSegmentSearchResult; import net.osmand.router.RouteSegmentResult; import net.osmand.util.MapUtils; -import android.Manifest; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.hardware.GeomagneticField; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.location.GpsSatellite; -import android.location.GpsStatus; -import android.location.GpsStatus.Listener; -import android.location.Location; -import android.location.LocationListener; -import android.location.LocationManager; -import android.os.Build; -import android.os.Bundle; -import android.provider.Settings; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; -import android.support.v7.app.AlertDialog; -import android.util.Log; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; public class OsmAndLocationProvider implements SensorEventListener { @@ -146,30 +147,17 @@ public class OsmAndLocationProvider implements SensorEventListener { this.roads = roads; startLocation = new net.osmand.Location(currentLocation); long ms = System.currentTimeMillis(); - if (ms - startLocation.getTime() > 5000 || - ms < startLocation.getTime()) { + if (ms - startLocation.getTime() > 5000 || ms < startLocation.getTime()) { startLocation.setTime(ms); } - currentRoad = -1; - int px = MapUtils.get31TileNumberX(currentLocation.getLongitude()); - int py = MapUtils.get31TileNumberY(currentLocation.getLatitude()); - double dist = 1000; - for (int i = 0; i < roads.size(); i++) { - RouteSegmentResult road = roads.get(i); - boolean plus = road.getStartPointIndex() < road.getEndPointIndex(); - for (int j = road.getStartPointIndex() + 1; j <= road.getEndPointIndex(); ) { - RouteDataObject obj = road.getObject(); - QuadPoint proj = MapUtils.getProjectionPoint31(px, py, obj.getPoint31XTile(j - 1), obj.getPoint31YTile(j - 1), - obj.getPoint31XTile(j), obj.getPoint31YTile(j)); - double dd = MapUtils.squareRootDist31((int) proj.x, (int) proj.y, px, py); - if (dd < dist) { - dist = dd; - currentRoad = i; - currentSegment = j; - currentPoint = proj; - } - j += plus ? 1 : -1; - } + RouteSegmentSearchResult searchResult = + RoutingHelper.searchRouteSegment(currentLocation.getLatitude(), currentLocation.getLongitude(), roads); + if (searchResult != null) { + currentRoad = searchResult.getRoadIndex(); + currentSegment = searchResult.getSegmentIndex(); + currentPoint = searchResult.getPoint(); + } else { + currentRoad = -1; } } diff --git a/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java b/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java index bee1b4fdf4..fdf17e63a6 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java +++ b/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java @@ -23,6 +23,7 @@ import net.osmand.ResultMatcher; import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; +import net.osmand.data.QuadPoint; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; @@ -31,11 +32,14 @@ import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.routing.RoutingHelper; +import net.osmand.plus.routing.RoutingHelper.RouteSegmentSearchResult; import net.osmand.plus.views.ContextMenuLayer; +import net.osmand.router.RouteSegmentResult; import net.osmand.util.MapUtils; import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; public class AvoidSpecificRoads { @@ -215,6 +219,22 @@ public class AvoidSpecificRoads { ll.setLongitude(loc.getLongitude()); ApplicationMode appMode = app.getRoutingHelper().getAppMode(); + List roads = app.getRoutingHelper().getRoute().getOriginalRoute(); + if (roads != null) { + RouteSegmentSearchResult searchResult = + RoutingHelper.searchRouteSegment(loc.getLatitude(), loc.getLongitude(), roads); + if (searchResult != null) { + QuadPoint point = searchResult.getPoint(); + LatLon newLoc = new LatLon(MapUtils.get31LatitudeY((int) point.y), MapUtils.get31LongitudeX((int) point.x)); + ll.setLatitude(newLoc.getLatitude()); + ll.setLongitude(newLoc.getLongitude()); + addImpassableRoadInternal(roads.get(searchResult.getRoadIndex()).getObject(), ll, showDialog, activity, newLoc); + if (!skipWritingSettings) { + app.getSettings().addImpassableRoad(newLoc.getLatitude(), newLoc.getLongitude()); + } + return; + } + } app.getLocationProvider().getRouteSegment(ll, appMode, false, new ResultMatcher() { @Override diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index b9973c6ebe..16673c7d25 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -1,12 +1,14 @@ package net.osmand.plus.routing; +import net.osmand.GPXUtilities.GPXFile; import net.osmand.Location; import net.osmand.PlatformUtil; import net.osmand.ValueHolder; +import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; +import net.osmand.data.QuadPoint; import net.osmand.plus.ApplicationMode; -import net.osmand.GPXUtilities.GPXFile; import net.osmand.plus.NavigationService; import net.osmand.plus.OsmAndAppCustomization.OsmAndAppCustomizationListener; import net.osmand.plus.OsmAndFormatter; @@ -1225,5 +1227,54 @@ public class RoutingHelper { } } + public static class RouteSegmentSearchResult { + private int roadIndex; + private int segmentIndex; + private QuadPoint point; + private RouteSegmentSearchResult(int roadIndex, int segmentIndex, QuadPoint point) { + this.roadIndex = roadIndex; + this.segmentIndex = segmentIndex; + this.point = point; + } + + public int getRoadIndex() { + return roadIndex; + } + + public int getSegmentIndex() { + return segmentIndex; + } + + public QuadPoint getPoint() { + return point; + } + } + + public static RouteSegmentSearchResult searchRouteSegment(double latitude, double longitude, List roads) { + int roadIndex = -1; + int segmentIndex = -1; + QuadPoint point = null; + int px = MapUtils.get31TileNumberX(longitude); + int py = MapUtils.get31TileNumberY(latitude); + double dist = 1000; + for (int i = 0; i < roads.size(); i++) { + RouteSegmentResult road = roads.get(i); + int startPointIndex = road.getStartPointIndex() < road.getEndPointIndex() ? road.getStartPointIndex() : road.getEndPointIndex(); + int endPointIndex = road.getEndPointIndex() > road.getStartPointIndex() ? road.getEndPointIndex() : road.getStartPointIndex(); + RouteDataObject obj = road.getObject(); + for (int j = startPointIndex + 1; j <= endPointIndex; j++) { + QuadPoint proj = MapUtils.getProjectionPoint31(px, py, obj.getPoint31XTile(j - 1), obj.getPoint31YTile(j - 1), + obj.getPoint31XTile(j), obj.getPoint31YTile(j)); + double dd = MapUtils.squareRootDist31((int) proj.x, (int) proj.y, px, py); + if (dd < dist) { + dist = dd; + roadIndex = i; + segmentIndex = j; + point = proj; + } + } + } + return roadIndex != -1 ? new RouteSegmentSearchResult(roadIndex, segmentIndex, point) : null; + } } From f03bde72226bd6d6bcdf3f5d9ba7831d35e89ef6 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Sun, 9 Feb 2020 11:36:54 +0300 Subject: [PATCH 08/42] Added avoid route search radius --- .../osmand/plus/OsmAndLocationProvider.java | 2 +- .../plus/helpers/AvoidSpecificRoads.java | 21 ++++++++++++------- .../osmand/plus/routing/RoutingHelper.java | 4 ++-- .../osmand/plus/views/ContextMenuLayer.java | 2 +- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java index 379c98f1bf..743b79f472 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java @@ -151,7 +151,7 @@ public class OsmAndLocationProvider implements SensorEventListener { startLocation.setTime(ms); } RouteSegmentSearchResult searchResult = - RoutingHelper.searchRouteSegment(currentLocation.getLatitude(), currentLocation.getLongitude(), roads); + RoutingHelper.searchRouteSegment(currentLocation.getLatitude(), currentLocation.getLongitude(), -1, roads); if (searchResult != null) { currentRoad = searchResult.getRoadIndex(); currentSegment = searchResult.getSegmentIndex(); diff --git a/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java b/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java index fdf17e63a6..d8cc1f4def 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java +++ b/OsmAnd/src/net/osmand/plus/helpers/AvoidSpecificRoads.java @@ -24,6 +24,7 @@ import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.QuadPoint; +import net.osmand.data.RotatedTileBox; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; @@ -44,6 +45,8 @@ import java.util.Map; public class AvoidSpecificRoads { + private static final float MAX_AVOID_ROUTE_SEARCH_RADIUS_DP = 32f; + private OsmandApplication app; private Map impassableRoads = new LinkedHashMap<>(); @@ -210,7 +213,7 @@ public class AvoidSpecificRoads { }); } - public void addImpassableRoad(@Nullable final MapActivity activity, + public void addImpassableRoad(@Nullable final MapActivity mapActivity, @NonNull final LatLon loc, final boolean showDialog, final boolean skipWritingSettings) { @@ -220,15 +223,17 @@ public class AvoidSpecificRoads { ApplicationMode appMode = app.getRoutingHelper().getAppMode(); List roads = app.getRoutingHelper().getRoute().getOriginalRoute(); - if (roads != null) { + if (mapActivity != null && roads != null) { + RotatedTileBox tb = mapActivity.getMapView().getCurrentRotatedTileBox().copy(); + float maxDistPx = MAX_AVOID_ROUTE_SEARCH_RADIUS_DP * tb.getDensity(); RouteSegmentSearchResult searchResult = - RoutingHelper.searchRouteSegment(loc.getLatitude(), loc.getLongitude(), roads); + RoutingHelper.searchRouteSegment(loc.getLatitude(), loc.getLongitude(), maxDistPx / tb.getPixDensity(), roads); if (searchResult != null) { QuadPoint point = searchResult.getPoint(); LatLon newLoc = new LatLon(MapUtils.get31LatitudeY((int) point.y), MapUtils.get31LongitudeX((int) point.x)); ll.setLatitude(newLoc.getLatitude()); ll.setLongitude(newLoc.getLongitude()); - addImpassableRoadInternal(roads.get(searchResult.getRoadIndex()).getObject(), ll, showDialog, activity, newLoc); + addImpassableRoadInternal(roads.get(searchResult.getRoadIndex()).getObject(), ll, showDialog, mapActivity, newLoc); if (!skipWritingSettings) { app.getSettings().addImpassableRoad(newLoc.getLatitude(), newLoc.getLongitude()); } @@ -240,11 +245,11 @@ public class AvoidSpecificRoads { @Override public boolean publish(RouteDataObject object) { if (object == null) { - if (activity != null) { - Toast.makeText(activity, R.string.error_avoid_specific_road, Toast.LENGTH_LONG).show(); + if (mapActivity != null) { + Toast.makeText(mapActivity, R.string.error_avoid_specific_road, Toast.LENGTH_LONG).show(); } } else { - addImpassableRoadInternal(object, ll, showDialog, activity, loc); + addImpassableRoadInternal(object, ll, showDialog, mapActivity, loc); } return true; } @@ -319,7 +324,7 @@ public class AvoidSpecificRoads { showDialog(activity); } MapContextMenu menu = activity.getContextMenu(); - if (menu.isActive() && menu.getLatLon().equals(loc)) { + if (menu.isActive()) { menu.close(); } activity.refreshMap(); diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index 16673c7d25..d4154c2f55 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -1251,13 +1251,13 @@ public class RoutingHelper { } } - public static RouteSegmentSearchResult searchRouteSegment(double latitude, double longitude, List roads) { + public static RouteSegmentSearchResult searchRouteSegment(double latitude, double longitude, double maxDist, List roads) { int roadIndex = -1; int segmentIndex = -1; QuadPoint point = null; int px = MapUtils.get31TileNumberX(longitude); int py = MapUtils.get31TileNumberY(latitude); - double dist = 1000; + double dist = maxDist < 0 ? 1000 : maxDist; for (int i = 0; i < roads.size(); i++) { RouteSegmentResult road = roads.get(i); int startPointIndex = road.getStartPointIndex() < road.getEndPointIndex() ? road.getStartPointIndex() : road.getEndPointIndex(); diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 49a0824c89..7b56728c37 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -947,9 +947,9 @@ public class ContextMenuLayer extends OsmandMapLayer { if (selectOnMap != null) { LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y); + menu.init(latlon, null, null); CallbackWithObject cb = selectOnMap; cb.processResult(latlon); - menu.init(latlon, null, null); selectOnMap = null; return true; } From acafcebb876b971ec5846fded8e0c5dd70097f5a Mon Sep 17 00:00:00 2001 From: sonora Date: Sun, 9 Feb 2020 11:15:45 +0100 Subject: [PATCH 09/42] Test voice prompts - add more exit testing --- .../net/osmand/plus/development/TestVoiceActivity.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java index 7808406222..a17eabae3c 100644 --- a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java @@ -169,10 +169,12 @@ public class TestVoiceActivity extends OsmandActionBarActivity { addButton(ll, "\u25BA (3.4) After 3100m turn right onto 'SR 80' toward 'Rome'", builder(p).prepareTurn(AbstractPrologCommandPlayer.A_RIGHT, 3100, street(p, "SR 80", "", "Rome"))); addButton(ll, "\u25BA (3.5) In 370m turn slightly right onto 'Route 23' 'Main Street', then bear left", builder(p).turn(AbstractPrologCommandPlayer.A_RIGHT_SL, 370, street(p, "Route 23", "Main Street", "")).then().bearLeft(street(p, ""))); addButton(ll, "\u25BA (3.6) Turn sharply right onto 'Dr.-Quinn-Stra"+"\u00df"+"e'", builder(p).turn(AbstractPrologCommandPlayer.A_RIGHT_SH, street(p, "", "Dr.-Quinn-Straße", ""))); - addButton(ll, "\u25BA (3.7) Turn slightly right to exit 6 onto 'Amsterdam-Osdorp'", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, "6", 6, street(p, "", "Amsterdam-Osdorp", ""))); - addButton(ll, "\u25BA (3.8) In 350m turn slightly right to exit 6 onto 'Amsterdam-Osdorp'", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, 350, "6", 6, street(p, "", "Amsterdam-Osdorp", ""))); - addButton(ll, "\u25BA (3.9) Turn slightly right to exit 260B ", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, "260 B", 260, street(p, "", "", ""))); - addButton(ll, "\u25BA (3.10) Turn slightly left to exit 15B ", builder(p).takeExit(AbstractPrologCommandPlayer.A_LEFT_SL, "15 B", 15, street(p, "", "", ""))); + addButton(ll, "\u25BA (3.7) Turn slightly right onto exit 6 onto 'Amsterdam-Osdorp'", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, "6", 6, street(p, "", "Amsterdam-Osdorp", ""))); + addButton(ll, "\u25BA (3.8) In 350m turn slightly right onto exit 6, 'Amsterdam-Osdorp'", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, 350, "6", 6, street(p, "", "Amsterdam-Osdorp", ""))); + addButton(ll, "\u25BA (3.9) In 350m turn slightly right onto exit 6, 'Amsterdam-Osdorp' towards Osdorp", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, 350, "6", 6, street(p, "", "Amsterdam-Osdorp", "Osdorp"))); + addButton(ll, "\u25BA (3.10) In 350m turn slightly right to exit 6 towards 'Osdorp'", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, 350, "6", 6, street(p, "", "", "Osdorp"))); + addButton(ll, "\u25BA (3.11) Turn slightly right to exit 260B ", builder(p).takeExit(AbstractPrologCommandPlayer.A_RIGHT_SL, "260 B", 260, street(p, "", "", ""))); + addButton(ll, "\u25BA (3.12) Turn slightly left to exit 15B ", builder(p).takeExit(AbstractPrologCommandPlayer.A_LEFT_SL, "15 B", 15, street(p, "", "", ""))); addButton(ll, "Keep left/right: prepareTurn, makeTurnIn, turn:", builder(p)); addButton(ll, "\u25BA (4.1) After 1810m keep left ' '", builder(p).prepareTurn(AbstractPrologCommandPlayer.A_LEFT_KEEP, 1810, street(p, ""))); From 4c2e0d3245ece85fcffd9e139bcd8034ef9ddd83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Thu, 6 Feb 2020 16:04:11 +0000 Subject: [PATCH 10/42] Translated using Weblate (Turkish) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-tr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index ac0445d812..efa5ea800c 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -3450,4 +3450,5 @@ %1$s/%2$s %1$s\'de gün batımı %1$s\'de gün doğumu + Sisteminizde erişilebilirlik modu devre dışı. \ No newline at end of file From cc9dba96480450f78d583883d492fe411fc1e1a4 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Thu, 6 Feb 2020 18:21:43 +0000 Subject: [PATCH 11/42] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index adf71c3464..da23208eea 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -2086,7 +2086,7 @@ Pôr do Sol: %2$s Esquema de cores Fazer viagem de ida e volta Sem estradas de gelo ou vaus - Evita estradas de gelo e vaus. + Evitar estradas de gelo e vaus. Limite para orientação do mapa Exibir \'Navegação finalizada\' Cache de quadrícula @@ -2983,7 +2983,7 @@ Pôr do Sol: %2$s Evite os tipos de transporte… Modo %s Sem pedras irregulares ou paralelepípedo - Evita pavimento de pedras irregulares e paralelepípedo + Evitar pavimento de pedras irregulares e paralelepípedo Graus Milirradianos Unidade angular @@ -3090,7 +3090,7 @@ Pôr do Sol: %2$s Perfis de aplicação Altere o zoom do mapa rolando a roda para cima e para baixo. Escape retorna para o aplicativo WunderLINQ. Use o WunderLINQ para controle - Adicione ao menos um item à lista nas configurações de \'Ação rápida\' + Adicionar ao menos um item à lista nas configurações de \'Ação rápida\' Esqui alpino/de declínio Pistas de esqui alpino ou de declínio e acesso a teleféricos. Cross country/esqui nórdico @@ -3482,4 +3482,5 @@ Pôr do Sol: %2$s %1$s/%2$s Pôr do sol em %1$s Nascer do sol em %1$s + Modo de acessibilidade desativado em seu sistema. \ No newline at end of file From 5b391368184efc08a7162a979f894acf40593c5d Mon Sep 17 00:00:00 2001 From: Mr-Update Date: Thu, 6 Feb 2020 19:52:07 +0000 Subject: [PATCH 12/42] Translated using Weblate (German) Currently translated at 96.2% (3048 of 3169 strings) --- OsmAnd/res/values-de/strings.xml | 36 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index d58ee70bf6..572d691f3d 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -131,7 +131,7 @@ Globale Landkarten- und Navigationsanwendung für Offline- und Online-OSM-Karten OsmAnd+ (OSM Automated Navigation Directions) \n -\nOsmAnd+ ist die Kaufversion der Open-Source Software Navigationsapp OsmAnd (OSM Automated Navigation Directions) mit Zugriff auf eine Vielzahl öffentlich zugänglicher, weltweit verfügbarer Daten von OpenStreetMap (OSM). Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. Offline- und Online-Routing-Funktionalität wird ebenfalls angeboten, einschließlich einer Schritt-für-Schritt-Sprachführung. +\nOsmAnd+ ist die Kaufversion der Open-Source Software Navigationsapp OsmAnd mit Zugriff auf eine Vielzahl öffentlich zugänglicher, weltweit verfügbarer OSM-Daten. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. Offline- und Online-Routing-Funktionalität wird ebenfalls angeboten, einschließlich einer Schritt-für-Schritt-Sprachführung. \n \nMit dem Kauf der kostenpflichtigen Version OsmAnd+ unterstützen Sie das Projekt, fördern seine Weiterentwicklung und erhalten stets die aktuellsten Daten. \n @@ -187,7 +187,7 @@ OsmAnd-Entwicklung Natives Rendern Sprachansagen testen - Offline-Vektorkarte für diese Position herunterladen (über \'Einstellungen\' → \'Kartenverwaltung\') oder schalten Sie auf die Erweiterung \'Online-Karten\' um. + Offline-Vektorkarte für diese Position herunterladen (über \'Einstellungen → Kartenverwaltung\') oder schalten Sie auf die Erweiterung \'Online-Karten\' um. GPX-Dateien an OSM senden? Bitte tragen Sie Ihren OSM-Benutzernamen und Ihr Passwort ein, um GPX-Dateien hochzuladen. Unterstütze OsmAnd @@ -262,7 +262,7 @@ In der Gerätedatenbank vermerkte OSM-POIs/-Notizen anzeigen und verwalten. Online-Aufzeichnung (benötigt GPX) Track-Daten zu einem festgelegten Internetdienst senden, wenn die GPX-Aufzeichnung aktiviert ist. - Internetadresse zur Aufzeichnung + Webadresse zur Aufzeichnung Spezifikation der Internetadresse zur Aufzeichnung mit Parametern: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. Online-Aufzeichnungsintervall Angabe des Intervalls für die Online-Aufzeichnung. @@ -420,7 +420,7 @@ Gewählte Sprache aus dem Market installieren? Es gibt eine Offline-Vektorkarte für diesen Ort. \n\t -\n\tWählen Sie \'Menü\' → \'Karte konfigurieren\' → \'Kartenquelle…\' → \'Offline-Vektorkarten\', um sie zu verwenden. +\n\tWählen Sie \'Menü → Karte konfigurieren → Kartenquelle… → Offline-Vektorkarten\', um sie zu verwenden. Navi-Sprachausgabe Lautsprecher für Sprachansagen auswählen. Wie Anrufe (unterbricht Bluetooth-Verbindung zum Autoradio) @@ -639,7 +639,7 @@ Geradeaus Weiter Offline-Daten herunterladen - Danke, dass Sie OsmAnd verwenden. Laden Sie regionale Daten für die Offline-Verwendung über \'Einstellungen\' → \'Kartenverwaltung\' herunter, um Landkarten anzusehen, Adressen, POIs und öffentliche Verkehrsmittel zu finden. + Danke, dass Sie OsmAnd verwenden. Laden Sie regionale Daten für die Offline-Verwendung über \'Einstellungen → Kartenverwaltung\' herunter, um Landkarten anzusehen, Adressen, POIs und öffentliche Verkehrsmittel zu finden. Warte auf Signal… Suche in der Nähe Suche um Aufenthaltsort @@ -2715,8 +2715,8 @@ Lon %2$s Weltweite Wikivoyage-Artikel Inhalte Bilder herunterladen - Artikelbilder können für den Offline-Einsatz heruntergeladen werden. -\nImmer verfügbar unter \'Durchsuchen\' → \'Optionen\'. + Artikelbilder können für den Offline-Einsatz heruntergeladen werden. +\nImmer verfügbar unter \'Durchsuchen → Optionen\'. Seite ist nur online abrufbar. Im Webbrowser öffnen? Suchverlauf löschen Für die Offline-Reiseführerfunktionalität kaufen Sie einen der folgenden Artikel: @@ -3043,7 +3043,7 @@ Lon %2$s Helfen Sie uns, OsmAnd besser zu machen Gestatten Sie OsmAnd, anonyme App-Nutzungsdaten zu sammeln und zu verarbeiten. Wir sammeln keine Daten zu Ihrem Standort oder zu irgendwelchen Orten, die Sie sich auf der Karte ansehen. \n -\nÄndern Sie diese Konfiguration jederzeit unter \'Einstellungen\' → \'Datenschutz und Sicherheit\'. +\nÄndern Sie diese Konfiguration jederzeit unter \'Einstellungen → Datenschutz und Sicherheit\'. Wählen Sie, welche Art Daten Sie freigeben möchten: Heruntergeladene Karten Besuchte Bildschirme @@ -3449,6 +3449,24 @@ Lon %2$s Für die Verwendung dieser Option ist eine Berechtigung erforderlich. Die Datei \'%1$s\' enthält keine Routing-Regeln. Bitte eine andere Datei wählen. Dies ist ein Filter, welcher Punkte unter einer gewissen Geschwindigkeit nicht aufzeichnet. Dadurch können aufgezeichnete Tracks auf der Karte gleichmäßiger aussehen. - Nebeneffekt: Auf Ihrer Strecke fehlen alle Abschnitte, in denen das Mindestgeschwindigkeitskriterium nicht erfüllt wurde (z.B. wenn Sie Ihr Fahrrad einen steilen Hügel hinaufschieben). Außerdem wird es keine Informationen über Ruhezeiten wie Pausen geben. Dies hat Auswirkungen auf jede Analyse oder Nachbearbeitung, z. B. wenn Sie versuchen, die Gesamtlänge Ihrer Reise, die Zeit in Bewegung oder Ihre Durchschnittsgeschwindigkeit zu bestimmen. + Nebeneffekt: Auf Ihrer Strecke fehlen alle Abschnitte, in denen das Mindestgeschwindigkeitskriterium nicht erfüllt wurde (z. B., wenn Sie Ihr Fahrrad einen steilen Hügel hinaufschieben). Außerdem wird es keine Informationen über Ruhezeiten wie Pausen geben. Dies hat Auswirkungen auf jede Analyse oder Nachbearbeitung, z. B., wenn Sie versuchen, die Gesamtlänge Ihrer Reise, die Zeit in Bewegung oder Ihre Durchschnittsgeschwindigkeit zu bestimmen. Diese Einstellungen gelten für alle Profile. + Zeitpuffer + Aufzeichnungsintervall + Webadresse + Webadresse angeben mit der Parametersyntax: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. + Benachrichtigung + Mindesttempo + Minimale Genauigkeit + Minimale Verschiebung + \'Menü → Meine Orte → Tracks\' + \'Menü → Meine Orte → Notizen\' + \'Menü → Meine Orte → OSM-Änderungen\' + Plugin-Einstellungen auf Voreinstellung zurücksetzen + Autorisierung ist erfolgreich + Verfügbar + Benutzerdefinierte Kategorie hinzufügen + %1$s/%2$s + Sonnenuntergang um %1$s + Sonnenaufgang um %1$s \ No newline at end of file From 8062cfe5f069a0a1a6da44ebec621f7e295fc143 Mon Sep 17 00:00:00 2001 From: THANOS SIOURDAKIS Date: Sat, 8 Feb 2020 11:42:34 +0000 Subject: [PATCH 13/42] Translated using Weblate (Greek) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-el/strings.xml | 71 ++++++++++++++++---------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index a9e8c2593e..f6bcca313a 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -23,41 +23,27 @@ Προσανατολισμός στους δρόμους κατά τη διάρκεια της πλοήγησης. Προσανατολισμός στο δρόμο Προβολή φορητού παγκόσμιου χάρτη & πλοήγηση για χάρτες OSM χωρίς και με διαδίκτυο - "OsmAnd (OSM Αυτοματοποιημένες Οδηγίες Πλοήγησης -\n -\n Το OsmAnd είναι μια εφαρμογή πλοήγησης ανοικτού κώδικα με πρόσβαση σε μεγάλη ποικιλία από παγκόσμια δεδομένα του OSM. Όλα τα δεδομένα χάρτη (διανυσματικά ή πλακίδια χάρτη) μπορούν να αποθηκευτούν στην κάρτα μνήμης του τηλεφώνου για χρήση χωρίς σύνδεση. Προσφέρεται επίσης λειτουργία δρομολόγησης με και χωρίς διαδικτυακή σύνδεση συμπεριλαμβανομένων φωνητικών οδηγιών βήμα προς βήμα. + OsmAnd (OSM Αυτοματοποιημένες Οδηγίες Πλοήγησης) \n -\n +\n Το OsmAnd είναι μια εφαρμογή πλοήγησης ανοικτού κώδικα με πρόσβαση σε μεγάλη ποικιλία από παγκόσμια δεδομένα του OSM. Όλα τα δεδομένα χάρτη (διανυσματικά ή πλακίδια χάρτη) μπορούν να αποθηκευτούν στην κάρτα μνήμης του τηλεφώνου για χρήση χωρίς σύνδεση. Προσφέρεται επίσης λειτουργία δρομολόγησης με και χωρίς διαδικτυακή σύνδεση συμπεριλαμβανομένων φωνητικών οδηγιών βήμα προς βήμα. \n \n Μερικά από τα βασικά χαρακτηριστικά: -\n \n - Πλήρης λειτουργικότητα εκτός σύνδεσης (αποθήκευση των λαμβανόμενων διανυσμάτων ή πλακιδίων χάρτη στον αποθηκευτικό χώρο της συσκευής) -\n \n - Συμπαγείς διανυσματικοί χάρτες χωρίς σύνδεση για όλον τον κόσμο -\n \n - Λήψη χαρτών χωρών ή περιοχών κατευθείαν από την εφαρμογή -\n \n - Δυνατότητα επίστρωσης από αρκετές στρώσεις χάρτη, όπως GPX ή ίχνη πλοήγησης, Σημεία Ενδιαφέροντος, αγαπημένα, ισοϋψείς γραμμές, στάσεις Μ.Μ. Μεταφοράς, πρόσθετους χάρτες με προσαρμόσιμη διαφάνεια -\n \n - Εκτός σύνδεσης αναζήτηση για διευθύνσεις και μέρη (ΣΕ) -\n \n - Εκτός σύνδεσης δρομολόγηση για μέσες αποστάσεις -\n \n - Κατάσταση αυτοκινήτου, ποδηλάτου και πεζού με: -\n \n - προαιρετική αυτόματη εναλλαγή όψης ημέρας/νύχτας - προαιρετική εστίαση χάρτη βάσει ταχύτητας -\n \n - προαιρετικός προσανατολισμός χάρτη βάσει της πυξίδας ή της κατεύθυνσης κίνησης -\n \n - προαιρετική καθοδήγηση με λωρίδες, εμφάνιση ορίου ταχύτητας, καταγεγραμμένες και φωνές κειμένου σε λόγο. \n \n Περιορισμοί αυτής της ελεύθερης έκδοσης του OsmAnd: -\n \n - Περιορισμένος αριθμός λήψης χαρτών -\n \n - Όχι πρόσβαση στα εκτός σύνδεσης ΣΕ της βικιπαίδειας. \n -\n Το OsmAnd είναι ενεργά στο στάδιο της ανάπτυξης και το εγχείρημά μας και η περαιτέρω ανάπτυξή του επαφίεται στις οικονομικές προσφορές για την χρηματοδότηση της ανάπτυξης και τις δοκιμές νέων λειτουργιών. Παρακαλούμε σκεφτείτε την αγορά του OsmAnd+, ή χρηματοδοτήστε συγκεκριμένες νέες λειτουργίες ή κάντε μια γενική δωρεά στο https://osmand.net." +\n Το OsmAnd είναι ενεργά στο στάδιο της ανάπτυξης και το εγχείρημά μας και η περαιτέρω ανάπτυξή του επαφίεται στις οικονομικές προσφορές για την χρηματοδότηση της ανάπτυξης και τις δοκιμές νέων λειτουργιών. Παρακαλούμε σκεφτείτε την αγορά του OsmAnd+, ή χρηματοδοτήστε συγκεκριμένες νέες λειτουργίες ή κάντε μια γενική δωρεά στο https://osmand.net. Προβολή παγκόσμιου χάρτη & πλοήγηση για χάρτες OSM χωρίς και με σύνδεση OsmAnd+ (OSM Αυτοματοποιημένες Οδηγίες Πλοήγησης) \n @@ -199,11 +185,11 @@ Χρήση χαρτών με διαδίκτυο (λήψη και αποθήκευση πλακιδίων σε κάρτα μνήμης). Χάρτες με σύνδεση Επιλέξτε τους παρόχους των χαρτών με διαδίκτυο ή με αποθηκευμένα πλακίδια. - "Προσπελάσετε πολλούς τύπους χαρτών με σύνδεση (τους αποκαλούμενους χάρτες πλακιδίων ή εικονογραφιών), από προκαθορισμένα πλακίδια του OSM (όπως το Mapnik) μέχρι δορυφορικές εικόνες και στρώσεις ειδικού σκοπού όπως μετεωρολογικούς χάρτες, κλιματολογικούς χάρτες, γεωλογικούς χάρτες, στρώσεις σκίασης ανάγλυφου κλπ. -\n -\nΟποιοσδήποτε από αυτούς τους χάρτες μπορεί να χρησιμοποιηθεί είτε ως ο κύριος (βασικός) χάρτης που θα εμφανίζεται στον χάρτη του OsmAnd, είτε ως επίστρωμα ή υπόστρωμα σε έναν άλλο βασικό χάρτη (όπως στους τυπικούς χωρίς σύνδεση χάρτες του OsmAnd). Για να γίνει οποιοσδήποτε χάρτης υποστρώματος πιο ορατός, συγκεκριμένα στοιχεία των διανυσματικών χαρτών του OsmAnd μπορούν να κρυφτούν μέσω του μενού \'Διαμόρφωση χάρτη\'. -\n -\nΟι χάρτες πλακιδίων μπορούν να ληφθούν μέσω διαδικτυακών πηγών, ή να προετοιμαστούν για χρήση χωρίς σύνδεση (και να αντιγραφούν χειροκίνητα στον φάκελο δεδομένων του OsmAnd) ως βάση δεδομένων του SQLite που μπορεί να παραχθεί από διάφορα εργαλεία προετοιμασίας χαρτών τρίτων." + Προσπελάσετε πολλούς τύπους χαρτών με σύνδεση (τους αποκαλούμενους χάρτες πλακιδίων ή εικονογραφιών), από προκαθορισμένα πλακίδια του OSM (όπως το Mapnik) μέχρι και δορυφορικές εικόνες και στρώσεις ειδικού σκοπού όπως μετεωρολογικούς χάρτες, κλιματολογικούς χάρτες, γεωλογικούς χάρτες, στρώσεις σκίασης ανάγλυφου κλπ. +\n +\nΟποιοσδήποτε από αυτούς τους χάρτες μπορεί να χρησιμοποιηθεί είτε ως ο κύριος (βασικός) χάρτης που θα εμφανίζεται, είτε ως επίστρωμα ή υπόστρωμα σε έναν άλλο βασικό χάρτη (όπως στους τυπικούς χωρίς σύνδεση χάρτες του OsmAnd). Για να γίνει οποιοσδήποτε χάρτης υποστρώματος πιο ορατός, συγκεκριμένα στοιχεία των διανυσματικών χαρτών του OsmAnd μπορούν να αποκρυφθούν μέσω του μενού \'Διαμόρφωση χάρτη\'. +\n +\nΟι χάρτες πλακιδίων μπορούν να ληφθούν μέσω διαδικτυακών πηγών, ή να προετοιμαστούν για χρήση χωρίς σύνδεση (μέσω χειροκίνητης αντιγραφής στον φάκελο δεδομένων του OsmAnd) ως μία βάση δεδομένων SQLite που μπορεί να παραχθεί από διάφορα εργαλεία προετοιμασίας χαρτών τρίτων. Εμφάνιση των ρυθμίσεων για ενεργοποίηση ιχνογράφησης και πλοήγησης παρασκηνίου μέσω περιοδικής αφύπνισης της συσκευής GPS (με την οθόνη σβηστή). Κάνει τα χαρακτηριστικά προσβασιμότητας της συσκευής διαθέσιμα απευθείας στο OsmAnd. Διευκολύνει π.χ. τη ρύθμιση του ρυθμού ομιλίας για φωνές κειμένου σε λόγο, διαμορφώνοντας πλοήγηση οθόνης του κατευθυντήρα, χρήση ιχνόσφαιρας για έλεγχο εστίασης, ή ανατροφοδότηση κειμένου σε ομιλία, π.χ. για αυτόματη ανακοίνωση της θέσης σας. Ρυθμίσεις για τα χαρακτηριστικά ανάπτυξης και αποσφαλμάτωσης όπως απόδοση απεικόνισης, ή η φωνητική καθοδήγηση. Αυτές οι ρυθμίσεις προορίζονται για τους προγραμματιστές και δεν χρειάζονται στην κανονική χρήση της εφαρμογής. @@ -527,7 +513,7 @@ Επιλέξτε το OsmAnd build προς εγκατάσταση Εγκατάσταση έκδοσης Η εφαρμογή κατάστασης GPS δεν είναι εγκατεστημένη. Αναζήτηση στην αγορά ; - "Δεν υπάρχει διαθέσιμη φωνητική καθοδήγηση, παρακαλούμε μεταβείτε στο \'Ρυθμίσεις\' → \'Ρυθμίσεις πλοήγησης\' → \'Φωνητική καθοδήγηση\' και επιλέξτε ή κατεβάστε ένα πακέτο φωνητικών οδηγιών." + Δεν υπάρχει διαθέσιμη φωνητική καθοδήγηση, παρακαλούμε μεταβείτε στο \'Ρυθμίσεις\' → \'Ρυθμίσεις πλοήγησης\' → \'Φωνητική καθοδήγηση\' και επιλέξτε ή κατεβάστε ένα πακέτο φωνητικών οδηγιών. Επιλέξτε ένα πακέτο φωνητικής καθοδήγησης Ημέρα Νύχτα @@ -547,12 +533,12 @@ Αυτός ο χάρτης δεν μπορεί να ληφθεί Συνεχής απεικόνιση Εμφάνιση συνεχούς απεικόνισης αντί για εικόνα με τη μία. - Αδυναμία σχεδίασης της επιλεγμένης περιοχής + Αδυναμία σχεδίασης της επιλεγμένης περιοχής. Χρήση τοποθεσίας … Ο απεικονιστής φορτώθηκε - Αδυναμία φόρτωσης απεικονιστή + Αδυναμία φόρτωσης απεικονιστή. Απεικονιστής διανυσμάτων - Επιλέξτε εμφάνιση απεικόνισης. + Επιλέξτε εμφάνιση απεικόνισης Εμφάνιση ιστοσελίδας ΣΕ Εμφάνιση τηλεφώνου ΣΕ Ιστότοπος @@ -568,7 +554,7 @@ Οι διανυσματικοί χάρτες δεν φορτώθηκαν Δεν βρέθηκαν αρχεία GPX στον κατάλογο ιχνών Αρχεία GPX… - Αδυναμία ανάγνωσης δεδομένων GPX + Αδυναμία ανάγνωσης δεδομένων GPX. Διανυσματικοί χάρτες χωρίς σύνδεση Αναζήτηση ΜΜΜ στη στάση Τροποποίηση ΣΕ @@ -583,7 +569,7 @@ Δεν βρέθηκε αρχείο GPX που να περιέχει αγαπημένα στο {0} Τα αγαπημένα αποθηκεύτηκαν στο {0} Δεν υπάρχουν αγαπημένα σημεία προς αποθήκευση - Αδυναμία φόρτωσης του GPX + Αδυναμία φόρτωσης του GPX. Αποστολή αναφοράς Αδυναμία εύρεσης κατεβασμένων χαρτών στην κάρτα μνήμης. Πληκτρολογήστε για να βρείτε ΣΕ @@ -1405,7 +1391,7 @@ ημέρες πίσω Πίσω στο χάρτη Κοινή χρήση σημείωσης - Σημειώσεις OSM + Σημειώσεις A/V Μόνο δρόμοι "Ελεύθερο %1$s " Μνήμη συσκευής @@ -2115,8 +2101,8 @@ Δεν υπάρχει αρκετός χώρος! \n {3} MB απαιτούνται προσωρινά, {1} MB μόνιμα. \n (Μόνο {2} MB είναι διαθέσιμα.) - "Λήψη {0} αρχείου(ων); -\n {3} MB χρησιμοποιούνται προσωρινά, {1} MB μόνιμα. (Από τα {2} MB.)" + Λήψη {0} αρχείου(ων); +\n{3} MB χρησιμοποιούνται προσωρινά, {1} MB μόνιμα. (Από τα {2} MB.) Ανέβασμα σημείωσης OSM Πρώτος δείκτης χάρτη Δεύτερος δείκτης χάρτη @@ -2133,7 +2119,7 @@ Δείκτες χάρτη Δείκτης χάρτη Συνιστάται η απενεργοποίηση απόδοσης πολυγώνου. - Να εμφανίζονται οι διαδρομές ορεινής ποδηλασίας; + Εμφάνιση μονοπατιών ποδηλασίας βουνού Να εμφανίζονται τα πολύγωνα Εύρεση χώρου στάθμευσης Κατάσταση @@ -2531,7 +2517,7 @@ Υπερεστιακή εστίαση Κατάσταση μακροεστίασης (κοντινής) Μέγεθος εικόνας κάμερας - Ορίστε μέγεθος εικόνας κάμερας. + Ορίστε μέγεθος εικόνας κάμερας Χρειάζεται να συνδεθείτε με το διαδίκτυο για να εγκαταστήσετε αυτό το πρόσθετο. Λήψη Επανυπολογισμός έξυπνης διαδρομής @@ -2711,7 +2697,7 @@ Αλλαγή θέσης πλήκτρου Πιέζοντας και μετακινώντας το πλήκτρο, αλλάζετε τη θέση του στην οθόνη. Όνομα ενέργειας - Οι φωτογραφίες του Mapillary είναι διαθέσιμος μόνο όταν είσαστε σε σύνδεση + Οι φωτογραφίες του Mapillary είναι διαθέσιμες μόνο όταν είσαστε σε σύνδεση. Ξαναπροσπαθήστε Προσθήκη σημείων διαδρομής Προσθήκη σημείου διαδρομής @@ -3244,7 +3230,7 @@ Προτιμώμενη δυσκολία Προτιμήστε διαδρομές αυτής της δυσκολίας, αν και η διαδρομή σε πιο δύσκολες ή εύκολες πίστες είναι ακόμα εφικτές, εάν είναι πιο σύντομες. Εκτός πίστας - "\'Ελεύθερες\' καθώς και \'εκτός πίστας\' είναι ανεπίσημες διαδρομές και περάσματα. Συνήθως ακαθάριστες, ασυντήρητες και μη ελεγμένες το πρωί. Μπαίνετε με δικό σας κίνδυνο." + \'Ελεύθερες\' καθώς και \'εκτός πίστας\' είναι ανεπίσημες διαδρομές και περάσματα. Συνήθως ακαθάριστες, ασυντήρητες και μη ελεγμένες το πρωί. Μπαίνετε με δικό σας κίνδυνο. Ρυθμίσεις για την κατατομή (προφίλ): Το OsmAnd χρησιμοποιεί το πρότυπο UTM, το οποίο είναι παρόμοιο αλλά όχι ίδιο με τη μορφή UTM NATO. Παράδειγμα @@ -3399,7 +3385,7 @@ Αποθηκεύτηκε το ίχνος Το όνομα του αρχείου είναι κενό Επαναφορά - "Πλήκτρο που ορίζει το κέντρο της οθόνης ως σημείο εκκίνησης. Θα σας ζητηθεί να ορίσετε προορισμό ή να ξεκινήσετε υπολογισμό διαδρομής." + Πλήκτρο που ορίζει το κέντρο της οθόνης ως σημείο εκκίνησης. Θα σας ζητηθεί να ορίσετε προορισμό ή να ξεκινήσετε υπολογισμό διαδρομής. Εμφάνιση δικτύου κόμβων διαδρομών ποδηλάτων Καθαρισμός του %1$s; Ερώτημα λήψης χάρτη @@ -3495,4 +3481,17 @@ Ενδιάμεσος χρόνος Διάστημα παρακολούθησης Αδυναμία ανάλυσης γεωγραφικού στόχου \'%s\'. + Αναδιάταξη κατηγοριών + Μπορείτε να προσθέσετε προσαρμοσμένες κατηγορίες να απόκρυψεται κατηγορίες που δεν βρίσκεται απαραίτητες και να αλλάξετε τη σειρά ταξινόμησης του καταλόγου. Ο κατάλογος μπορεί να εισαχθεί και να εξαχθεί με προφίλ. + Μπορείτε να προσθέσετε μια νέα προσαρμοσμένη κατηγορία επιλέγοντας μία ή μερικές απαιτούμενες κατηγορίες. + Επαναφορά στην προεπιλογή θα διαγράψει όλες τις προσαρμοσμένες κατηγορίες και θα επαναφέρει τη σειρά ταξινόμησης στην προεπιλεγμένη κατάσταση μετά την εγκατάσταση. + Διαθέσιμα + Προσθήκη προσαρμοσμένης κατηγορίας + Εμφάνιση μόνο τη νύχτα + Όλες οι ρυθμίσεις πρόσθετων επαναφέρθηκαν στην προεπιλεγμένη κατάσταση. + Όλες οι ρυθμίσεις προφίλ επαναφέρθηκαν στην προεπιλεγμένη κατάσταση. + %1$s/%2$s + Ηλιοβασίλεμα στις %1$s + Ανατολή του ηλίου στις %1$s + Η λειτουργία προσβασιμότητας απενεργοποιήθηκε στο σύστημά σας. \ No newline at end of file From 2a879969aae86b0d9b4cec112c2d22841fac65e9 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Thu, 6 Feb 2020 19:58:22 +0000 Subject: [PATCH 14/42] Translated using Weblate (Esperanto) Currently translated at 98.7% (3128 of 3169 strings) --- OsmAnd/res/values-eo/strings.xml | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index da65e50f11..e2a69d46c7 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -477,7 +477,7 @@ Lon: %2$s Kunhavigi noton Loko:\nLat %1$s\nLon %2$s Montri - Notoj + Sonaj/videaj notoj Enreta mapo Nur vojoj Descendejoj @@ -495,8 +495,8 @@ Lon: %2$s Redakti grupon Parkumejo Skivoja prepar-speco - Por montri skiadajn mapojn, speciala eksterreta mapo devas esti elŝutita - Por montri ŝipveturadajn mapojn, speciala eksterreta mapo devas esti elŝutita + Elŝutu la specialan eksterretan mapon por vidigi skiadajn objektojn. + Elŝutu la specialan eksterretan mapon por vidigi ŝipveturadajn objektojn. FORIGI LA ETIKEDON Kompilaĵoj Elŝuti antaŭ-alfajn versiojn. @@ -817,9 +817,9 @@ Lon: %2$s Agordi maksimuman permesatan pezon de veturilo. Altlimo Agordi maksimuman permesan alton de veturilo. - Ekde la versio 4.4 (KitKat) de Android, la antaŭa dosierujo (%s) estas evitinda. Ĉu kopii ĉiujn dosierojn de OsmAnd al la nova dosierujo\? + Ekde la versio 4.4 (KitKat) de Android, la antaŭa dosierujo (%s) estas evitinda. Ĉu kopii ĉiujn dosierojn de OsmAnd al la nova dosierujo\? \n Rimarko 1: viaj malnovaj dosieroj ne estos ŝanĝitaj (tamen vi povos forigi ilin permane). -\n Rimarko 2: dosieroj en la nova loko ne povos esti uzitaj ambaŭ per OsmAnd kaj OsmAnd+. +\n Rimarko 2: dosieroj en la nova loko ne povos esti uzataj ambaŭ fare de OsmAnd kaj OsmAnd+. Kopiado de dosiero (%s) al la nova loko… Kopiado de datum-dosieroj de OsmAnd al la nova dosierujo (%s)… Kopiado de datum-dosieroj de OsmAnd… @@ -869,7 +869,7 @@ Lon: %2$s Trafika regiono Elekti trafikan regionon: Usono, Eŭropo, Britujo, Azio kaj aliaj. Anoncado… - Agordi anoncojn pri strataj nomoj, trafikaj avertoj (devigaj haltejoj, strat-ĝiboj), rapid-kontroliloj, rapidlimoj. + Agordi anoncojn pri strataj nomoj, trafikaj avertoj (devigaj haltejoj, strat‑ĝiboj), rapid‑kontroliloj kaj rapidlimoj. Nomoj de stratoj (parolsintezitaj) Rapidlimoj Rapid-kontroliloj @@ -935,7 +935,7 @@ Lon: %2$s Montras agordojn pri aktivigi spuradon kaj navigadon fone per periode aktivigi GPS (ĉe malŝaltita ekrano). Instaleblaj versioj Alireblecaj agordoj - Tiu ĉi kromprogramo ebligas uzi alireblecajn ilojn senpere en OsmAnd. Ĝi plifaciligas ekz. agordi rapidon de parolsintezitaj dialogaj helpoj, uzi montril-butonojn por navigado sur ekrano, uzi stirglobon por skalado, aŭ uzi tekst-al-voĉajn sciigojn ekz. por aŭtomate anonci vian pozicion. + Ebligas uzi alireblecajn eblaĵojn senpere en OsmAnd. Ĝi plifaciligas ekz. agordi rapidon de parolsintezitaj dialogaj helpoj, uzi montril‑butonojn por navigado sur ekrano, uzi stirglobon por skalado, aŭ uzi voĉajn sciigojn ekz. por aŭtomate anonci vian pozicion. Enigu adreson Elekti ŝatatan Modifoj de OSM @@ -960,7 +960,7 @@ Lon: %2$s Foto %1$s %2$s Fari foton Fari foton - La kromprogramo Dropbox ebligas al vi samtempigi kursojn kaj sonajn/videajn notojn kun via konto ĉe Dropbox. + Samtempigi kursojn kaj sonajn/videajn notojn kun via konto ĉe Dropbox. Dropbox kromprogramo Ŝanĝi ordon Bonvolu konsideri aĉeti la kromprogramon “nivelkurboj” en la vendejo por subteni ĝian pluan evoluigon. @@ -1517,13 +1517,14 @@ Proporcia memoro %4$s MB (limito de Android %5$s MB, Dalvik %6$s MB). \n \nAktivigo de tiu ĉi map-vido ŝanĝas map-aspekton al ‘vintro kaj skiado’, montranta ĉiun terenon kovritan de neĝo. La vidon oni povas malaktivigi, per malaktivigi la kromprogramon tie ĉi, aŭ per ŝanĝi de ‘map-aspekto’ en la menuo ‘agordi mapon. Parkumeja pozicio - Tiu ĉi kromprogramo plifaciligas al vi registri kie via aŭto estas parkumata kaj kiom da parkumeja tempo restas (se ĝi estas limigita). Ambaŭ loko kaj tempo estas montrataj en la stirpanelo de OsmAnd kaj sur la fenestraĵo sur la map‑ekrano. Memorigo povas esti aldonita al la Androida kalendaro. + Ebligas al vi registri kie via aŭto estas parkumata kaj kiom da parkumeja tempo restas. +\n Ambaŭ loko kaj tempo estas montrataj en la stirpanelo de kaj sur la fenestraĵo sur la map‑ekrano. Memorigo povas esti aldonita al la Androida kalendaro. Kalkulilo de distanco kaj planilo - Tiu ĉi kromprogramo liveras fenestraĵon por krei kursojn – per tuŝi sur la mapo aŭ per uzi aŭ modifi ekzistajn GPX-dosierojn – kaj por por plani vojaĝon kaj mezuri distancon inter punktoj. Rezultoj povas esti konservitaj kiel GPX-dosierojn, kiujn oni povas estonte uzi por gvidado. + Ebligas difini kursojn per frapeti la mapon kaj modifi ekzistajn GPX‑dosierojn – por plani vojaĝon kaj mezuri distancon inter punktoj. Rezultoj povas esti konservitaj kiel GPX‑dosierojn, kiujn oni povas estonte uzi por gvidado. OpenStreetMap-redaktilo - Per tiu ĉi kromprogramo OsmAnd povas esti uzata por kontribui al OSM per krei aŭ redakti OSM-interesejojn, per raporti aŭ komenti OSM-rimarkojn, per aldoni registritajn GPX-dosierojn. OSM estas komunuma, tutmonda, publika map-projekto. Por detaloj, legu: https://openstreetmap.org. Aktiva kontribuado estas laŭdinda, kaj vi povas kontribui senpere per OsmAnd, se vi entajpos viajn OSM-ajn ensalutilojn en la aplikaĵo. + Kontribuu al OSM per krei aŭ modifi punktojn (ekz. vendejojn, vidindaĵojn, hidrantojn), malfermi aŭ komenti rimarkojn kaj alŝuti registritajn GPX‑spurojn per OsmAnd. OpenStreetMap (OSM) estas komunuma, tutmonda kaj publika map‑projekto. Necesas krei konton ĉe OpenStreetMap.org por kontribui. OsmAnd-programistilo - Montras agordojn por programado kaj senerarigado kiel testado aŭ simulado de kurso, efikeco de ekran‑bildigado, aŭ voĉaj anoncoj. Tiuj ĉi agordoj taŭgas por programistoj kaj ne estas bezonataj por norma uzanto. + Agordoj pri evoluigo kaj senerarigado de OsmAnd: simuladi kurson, efikeco de ekran‑bildigado, voĉaj anoncoj. Destinitaj por programistoj, ne bezonataj por kutimaj uzantoj. Angla (Brita) Uzi kahelajn mapojn de tiu ĉi pligrandigo. Minimuma vektora skal-nivelo @@ -3468,4 +3469,7 @@ Indikas lokon: %1$s x %2$s" %1$s/%2$s Sunsubiro je %1$s Sunleviĝo je %1$s + Konsilo: provu agordi ĝin al 5 metroj se vi ne bezonas registri pli detalajn movojn kaj ne volas registri datumojn dum restado. + Temp‑bufro + Registrada intertempo \ No newline at end of file From 2b65fd79b1e3df56fcb3d3417b28b988d59556cb Mon Sep 17 00:00:00 2001 From: Tymofij Lytvynenko Date: Fri, 7 Feb 2020 09:26:03 +0000 Subject: [PATCH 15/42] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-uk/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index ae73320493..544295ff86 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -796,8 +796,8 @@ Точний маршрут (alpha) Формат відео: Формат відео - Використовувати системну програму для запису відео. - Використовувати системну програму + Використовувати системний записувач відео. + Використовувати системний записувач Використовувати системний застосунок для світлин. недоступно Стоп @@ -2544,7 +2544,7 @@ Приховати проходження Маркери Формат координат - Використовувати системну клавіатуру + Використовувати системну набірницю Виберіть формат введення координат. Ви завжди можете змінити його, натиснувши „Параметри“. Швидке введення координат Уникати льодових доріг і бродів @@ -3485,4 +3485,5 @@ %1$s/%2$s Захід сонця о %1$s Схід сонця о %1$s + У вашій системі вимкнено режим доступності. \ No newline at end of file From 1a80878303d8dbfffd965083b1e68006f0628666 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Thu, 6 Feb 2020 11:25:44 +0000 Subject: [PATCH 16/42] Translated using Weblate (Japanese) Currently translated at 97.4% (3086 of 3169 strings) --- OsmAnd/res/values-ja/strings.xml | 87 +++++++++++++++++--------------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 7e1561f8d6..06a1f4d113 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -952,9 +952,8 @@ POIの更新は利用できません グローバル設定 アプリケーション全般の設定 ダウンロードするのに十分な空き領域がありません。%1$sMB(空き容量:%2$s) - {0}個のファイルをダウンロード - 必要なストレージ容量{1}MB - 現在の空き容量{2}MB + {0}個のファイルをダウンロードしますか? +\n必要なストレージ容量{1}MB 現在の空き容量{2}MB 透明なテーマ ネイティブライブラリは、このデバイスでサポートされていません。 ネイティブライブラリを初期化しています… @@ -1832,11 +1831,11 @@ POIの更新は利用できません 下に移動 ナビゲーションの終了 使用しない道路として指定 - 現在選択されているデータ保存フォルダーは読み取り専用です。保存フォルダーは一時的に内部メモリに設定されました。書き込み可能なストレージのフォルダを選択してください。 + 選択したデータ保存フォルダーが書き込み保護されているため、内部メモリに切り替えました。書き込み可能な保存用ディレクトリを選択してください。 共有記憶域 より詳細なレポートは以下サイトにて ルートの再計算 - OpenStreetMapのログイン名とパスワード + OSMのログイン名とパスワード 寄付額 編集数 %1$s, ランク %2$s, 総編集数 %3$s OSM編集者ランキング @@ -1856,8 +1855,11 @@ POIの更新は利用できません その他マーカー 匿名でアップロード 透過タイプシークバーを表示 - 空き容量が足りません! 一時ファイルの置き場に {3}MB、保存のため {1}MBが必要です。(利用可能領域 {2}MB) - {0}個のファイルをダウンロードしますか? 一時的に {3}MBの空き容量が必要で、最終的には {1}MB使用します。 (利用可能領域 {2}MB) + 空き容量が足りません! +\n一時ファイルの置き場に {3}MB、保存のため {1}MBが必要です。 +\n(利用可能領域 {2}MB) + {0}個のファイルをダウンロードしますか? +\n一時的に {3}MBの空き容量が必要で、最終的には {1}MB使用します。 (利用可能領域 {2}MB) OSMメモのアップロードには、匿名またはあなたのOpenStreetMap.orgプロファイルを使用することが可能です。 OSMメモをアップロード 1番目のマップマーカー @@ -1935,7 +1937,9 @@ POIの更新は利用できません サブスクリプション契約をする サブスクリプションの設定 最初にOsmAnd Liveのサブスクリプション登録(定期有料契約)をしてください - このサブスクリプション(定期有料契約)により世界中のマップを時間毎更新することが可能です。 サブスクリプション収入の一部はOSMコミュニティに還元され、OSMに貢献した各ユーザーにも支払われます。 あなたがOsmAndとOSMを愛用し、サポートを受けたり支援を行いたいと思うのであれば、サブスクリプションはそのための最適解です。 + このサブスクリプション(定期有料契約)により世界中のマップを時間毎更新することが可能です。 +\n サブスクリプション収入の一部はOSMコミュニティに還元され、OSMに貢献した各ユーザーにも支払われます。 +\nあなたがOsmAndとOSMを愛用し、サポートを受けたり支援を行いたいと思うのであれば、サブスクリプションはそのための最適解です。 住所が未定義 貢献者数 編集数 @@ -2042,8 +2046,8 @@ POIの更新は利用できません 新しいフィルター 新しいフィルターの名前を入力してください、作成したフィルターは[カテゴリー]タブに追加されます。 サブスクリプションには月額料金がかかります。キャンセルはGoogle Playにていつでも可能です。 - OpenStreetMapコミュニティへの寄付 - 寄付金の一部は、OSMユーザー(OpenStreetMapの更新に貢献した人達)に送られます。サブスクリプション(定期有料契約)の値段は変わりません。 + OSMコミュニティへの寄付 + 寄付金の一部はOSMへの貢献者に送られます。サブスクリプション(定期有料契約)の値段は変わりません。 サブスクリプションにより、毎時、毎日、毎週更新されたマップの利用と、世界中のマップを無制限にダウンロードすることが可能になります。 入手する マイル/メートル @@ -2217,15 +2221,15 @@ POIの更新は利用できません 市町村名を選択 郵便番号検索 マップの自動ズームをON/OFF - 移動速度に応じたマップの自動ズーム機能のON/OFFを切り替えます。 - マップの自動ズーム有効化 - マップの自動ズーム無効化 + 移動速度に応じたマップの自動ズーム機能のON/OFFを切り替えるボタンです。 + マップの自動ズームをONにする + マップの自動ズームをOFFにする 目的地を設定 目的地を置き換え 最初の中間地点を追加 - 画面の中心を目的地として設定します。以前の目的地は最後に寄る経由地点として置き換わります。 + 画面の中心を目的地として設定するボタンです。以前の目的地は最後に寄る経由地点として置き換わります。 アクションボタンをタップすると、画面中央アイコンの地点を新しい目的地として置き換えます。 - 画面中央アイコンの地点を最初の経由地点として追加します。 + 画面中央アイコンの地点を最初の経由地点として追加するボタンです。 オーバーレイ無し アンダーレイ無し エラー @@ -2373,7 +2377,7 @@ POIの更新は利用できません OSMメモの表示/非表示 OSMメモを表示 OSMメモを非表示 - マップ画面でのOSMメモの表示と非表示を切り替えます。 + マップ画面でのOSMメモの表示/非表示を切り替えるボタンです。 距離順で並べ替え お気に入りで検索 標高の高低をグラデーション表示するには、陰影起伏図(Hillshade Overlay)マップのダウンロードが必要です。 @@ -2392,7 +2396,7 @@ POIの更新は利用できません %1$sの名前が欠落している場合、(他の文字で)翻字します 名称を翻字 目的地が専有エリア(私有地)内にあります。専有道路あるいは私道を通ることを許可しますか? - 作成したリスト順にマップスタイルを変更します。 + 作成したリスト順にマップスタイルを変更するボタンです。 見つかりませんでした 検索単語を変更したり、検索の距離を広げてみてください。 検索範囲を拡大 @@ -2496,7 +2500,7 @@ POIの更新は利用できません 並び順: マップ画面でマーカーへの方向と距離を示す方法を選択します: 描画処理の省略 - アプリ内画面のアニメーション描写(各モーション)を無効化します。 + マップアニメーションをオフにします。 マップ向きのしきい値 マップの向きが「移動方向」から「方位」に切り替わる速度を選択します。 すべてのマップマーカーを履歴に移動 @@ -2537,10 +2541,10 @@ POIの更新は利用できません 閲覧マップから計測したい各地点を選択 距離測定 ナビゲーションの再開/一時停止 - このボタンをタップすることでナビゲーションを一時停止または再開できます。 + ナビゲーションを一時停止または再開するボタンです。 ナビゲーション終了の確認ダイアログを表示 ナビゲーションの開始/停止 - このボタンをタップするとナビゲーションを開始または終了します。 + ナビゲーションを開始または終了するボタンです。 マップの場所にリンクされています ダークイエロー 半透明ピンク @@ -2603,7 +2607,7 @@ POIの更新は利用できません 削除しました 編集されました 追加しました - 日付別の注釈 + 日付別OSMメモ グループの追加 OSMで用いられるPOIの作成や変更、OSMメモを開いたり注釈を加えたり、記録したGPXファイルの提供などがおこなえます。 通過済みにする @@ -2765,11 +2769,11 @@ POIの更新は利用できません 閉じたメモの表示 マップ上にあるOSMメモの表示/非表示を切り替えます。 GPX - JOSMまたは他のOSMエディタへ適したエクスポート形式です。 - OSC - OpenStreetMapの利用に適したエクスポート形式です。 + OSC - OSMの利用に適したエクスポート形式です。 GPXファイル OSCファイル ファイルタイプを選択 - エクスポートタイプを選択します:OSMメモ、POI、またはその両方。 + OSMメモ、POI、またはその両方用にエクスポートします。 全てのデータ OSMメモ 明日開く @@ -2875,7 +2879,7 @@ POIの更新は利用できません 詳細を見る マップ上の経路 GPX経路の表示/非表示 - マップ上GPX経路の表示と非表示を切り替えます + マップ上にある選択したGPX経路の表示/非表示を切り替えるボタンです。 GPX経路の非表示 GPX経路の表示 最初に目的地を設定して下さい @@ -2916,7 +2920,7 @@ POIの更新は利用できません 毎年更新 %1$.2f %2$s 支払い方法の選択: - 寄付金はOpenStreetMapの地図製作に役立てられます。 + 寄付金はOSMの地図製作に役立てられます。 360°イメージのみ表示 編集 %1$s, 合計 %2$s mBTC 起動 @@ -3128,7 +3132,7 @@ POIの更新は利用できません 乗用車,トラック,オートバイ マウンテンバイク、モペッド(ペダル付き原動機付自転車)、馬 徒歩,ハイキング,ランニング - すべての公共交通機関 + 公共交通機関の種類 エンジン付き船舶,漕ぎボート,帆船 航空機,グライダー ジオコーディング @@ -3204,7 +3208,7 @@ POIの更新は利用できません \'フリーライド\'や\'ゲレンデ外\'は非公式のルートです。通常は手入れされていないうえ、職員によってメンテナンスされておらずクローズ時間にもチェックされません。マップデータは自己責任で利用し、禁止されている場所には決して入らないでください。 道路種別 設定プロファイル: - OsmAndは座標形式の一つとしてUTM標準形式を使用します。これはUTM NATO形式と似ていますが異なるものなのでご注意ください。 + OsmAndは座標形式の一つとしてUTM標準形式を使用します。これはUTM NATO(※訳注 おそらくMGRS)形式と似ていますが異なるものなのでご注意ください。 UTM標準 オープンロケーションコード(OLC) @@ -3221,7 +3225,7 @@ POIの更新は利用できません 画面を表示する時間 単位と形式 外観 - マップの見た目に関する設定です + マップの見た目に関する設定 マップ外観 インストール済みプラグインリスト ナビゲーション設定 @@ -3242,8 +3246,8 @@ POIの更新は利用できません OsmAndデータのあるフォルダーへのパスを貼りつけ OsmAndデータフォルダーを変更しますか? 新しい保存場所に移動する - OsmAndのみがアクセス可能な、ユーザーおよびその他のアプリからは見えない内部ストレージ - データ保存フォルダーを変更 + OsmAnd用内部ストレージ(ユーザーや他アプリから隔離された場所) + 保存フォルダーを変更 雪遊び広場 牽引式そり乗り場 そり専用ゲレンデ @@ -3267,7 +3271,7 @@ POIの更新は利用できません 索道(リフトやロープウェイなど) リフト間接続 計算 - OsmAndの使い方 + OsmAndの合計使用容量 タイル マップ %1$s TB @@ -3288,11 +3292,11 @@ POIの更新は利用できません 未舗装道路を好んで進みたい場合の設定です。 すべてのマップを更新 すべてのマップ(%1$d個)を更新しますか? - • アプリとプロファイルの設定を更新: 設定はタイプごとに整理され、各プロファイルは個別カスタマイズ可能に。 + • アプリとプロファイルの設定を更新: 設定はタイプごとに整理され、各プロファイルは個別カスタマイズ可能に。 \n -\n• ブラウジング中にダウンロードすべきマップを提案する新しいマップダウンロードダイアログの採用 +\n• ブラウジング中にダウンロードすべきマップを提案する新しいマップダウンロードダイアログの採用 \n -\n• 夜間テーマの修正 +\n• 暗色テーマの修正 \n \n• 各国においていくつかのルーティングに関する問題の修正 \n @@ -3300,7 +3304,7 @@ POIの更新は利用できません \n \n• 各国の浸水地域を修正 \n -\n• スキー用ルーティング: ルートの詳細に標高プロファイルとルートの複雑さを追加しました +\n• スキー用ルーティング: ルートの詳細に標高プロファイルとルートの複雑さを追加しました \n \n• その他バグ修正など \n @@ -3318,7 +3322,7 @@ POIの更新は利用できません 3ヶ月 無料 - アラート(警告、注意)は、ナビゲーション中に画面左下に表示されます。 + ナビゲーション中に左下に表示されるアラート(警告アイコン)を指します。 言語と出力 標準設定に戻す プロファイルの作成、インポート、編集 @@ -3343,10 +3347,10 @@ POIの更新は利用できません ピックアップトラック サブスクリプションの解除 - ここでの変更はすべてのプロファイルに適用することも、現在選択されているプロファイルにのみ適用することもできます。 + ここでの変更は選択したものはもちろん、すべてのプロファイルにも適用できます。 現在の設定 未舗装道路を優先 - 未舗装道路を優先してルートを検索します。 + ルート検索時に、舗装道路よりも未舗装道路を優先します。 OSM受信者 ルート: 距離 %s、検索時間 %s \n検索時間: %.1f秒、道 %d、タイル %d @@ -3357,11 +3361,11 @@ POIの更新は利用できません 停留所標識 オック語 OSMの編集 - マップ上の等高線の表示/非表示を切り替えられます。 + マップ上の等高線の表示/非表示を切り替えられるボタンです。 等高線を表示 等高線を非表示 等高線を表示/非表示 - マップ上の陰影起伏図の表示/非表示を切り替えられます。 + マップ上の陰影起伏図の表示/非表示を切り替えられるボタンです。 陰影起伏図を表示 陰影起伏図を非表示 陰影起伏図の表示/非表示 @@ -3395,7 +3399,7 @@ POIの更新は利用できません OFFに 新しいプラグインが追加されました セグメント同士の接続 - 画面の中心を出発点にし目的地までのルートを計算、または目的地マーカーがマップ上にない場合に目的地を選択するダイアログを開くボタンです。 + 画面の中心を出発点にするボタンです。その後目的地を設定しルート検索を別途おこなう必要があります。 新しいプロファイルとして\'%1$s\'を追加しますか? 見出しを含める 記録中の各トラックポイントに見出しも保存します。 @@ -3487,4 +3491,5 @@ POIの更新は利用できません すべてのプロファイル設定が初期状態に戻りました。 日出時刻 日没時刻 + 端末本体のアクセシビリティモードが無効になっています。 \ No newline at end of file From 8d1ef600084d42b7afa0a2f7fa9577dff1c31b7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= Date: Thu, 6 Feb 2020 08:21:57 +0000 Subject: [PATCH 17/42] Translated using Weblate (Icelandic) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-is/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml index 4d01896304..586b559b21 100644 --- a/OsmAnd/res/values-is/strings.xml +++ b/OsmAnd/res/values-is/strings.xml @@ -3503,4 +3503,6 @@ Stendur fyrir svæði: %1$s x %2$s %1$s/%2$s Sólsetur kl. %1$s Sólarupprás kl. %1$s + Endurstilling á sjálfgefið mun eyða öllum sérsniðnum flokkum og setja röðun í upprunalega stöðu eftir uppsetningu. + Altækur aðgangur er óvirkur á kerfinu þínu. \ No newline at end of file From 6c02bd5fe0b81c2cff4e12ada81fa725d687b381 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Fri, 7 Feb 2020 14:10:37 +0000 Subject: [PATCH 18/42] Translated using Weblate (Hebrew) Currently translated at 94.6% (2998 of 3169 strings) --- OsmAnd/res/values-he/strings.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index f95661c4aa..debd449fdc 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -3437,4 +3437,17 @@ דירוג כאן ניתן לצפות ולשתף את תיעוד יומני היישומון נדרשת הרשאה כדי להשתמש באפשרות הזו. + סידור הקטגוריות מחדש + ניתן להוסיף קטגוריות מותאמות אישית, להסתיר קטגוריות שאינן נחוצות לך ולשנות את סדר הרשימה. ניתן לייבא את הרשימה ולייצא אותה עם פרופילים. + ניתן להוסיף קטגוריה חדשה מותאמת אישית על ידי בחירה בקטגוריה נחוצה אחת או יותר. + איפוס לבררת מחדל ימחק קטגוריות מותאמות אישית ויאפס את הסדר למצב בררת המחדל כמו לאחר ההתקנה. + זמין + הוספת קטגוריה מותאמת אישית + הצגה רק בלילה + כל הגדרות התוסף שוחזרו למצב בררת המחדל. + כל הגדרות הפרופיל אופסו למצב בררת המחדל. + %1$s/%2$s + שקיעה ב־%1$s + זריחה ב־%1$s + מצב נגישות מושבת במערכת שלך. \ No newline at end of file From b7aac01595bf9e210a1f482d6045630676ba25cf Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Thu, 6 Feb 2020 12:55:54 +0000 Subject: [PATCH 19/42] Translated using Weblate (Arabic) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-ar/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index f1bb63d704..dfd1fb2c85 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3352,7 +3352,7 @@ تعديل OpenStreetMap OSM سترى الأيقونة فقط أثناء الملاحة أو أثناء التحرك. - معدل + قيم تظهر أيقونة الخريطة فقط على الخريطة ، وتتغير أثناء التنقل إلى أيقونة التنقل. تحقق وتبادل سجلات مفصلة من التطبيق تعذر تحليل الهدف الجغرافي \'%s\'. @@ -3399,4 +3399,5 @@ %1$s/%2$s غروب الشمس على %1$s شروق الشمس على %1$s + تم تعطيل وضع إمكانية الوصول في النظام الخاص بك. \ No newline at end of file From ac2e4def53346a46ad9d6205e9a735700940f425 Mon Sep 17 00:00:00 2001 From: Softmap Date: Fri, 7 Feb 2020 09:43:41 +0000 Subject: [PATCH 20/42] Translated using Weblate (Arabic) Currently translated at 100.0% (3169 of 3169 strings) --- OsmAnd/res/values-ar/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index dfd1fb2c85..8063f14058 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -2785,7 +2785,7 @@ أسلوب الملاحة مع التباين العالي والحد الأعلى من التفاصيل. يتضمن كل خيارات النمط الافتراضي OsmAnd ، مع عرض أكبر قدر ممكن من التفاصيل ، ولا سيما الطرق والمسارات وطرق السفر الأخرى. التمييز الواضح بين \"جولة الأطلس\" بين أنواع الطرق. مناسبة للاستخدام النهاري والليلي وفي الهواء الطلق. أسلوب الغرض العام. تقديم نظافة مبسطة في المدن المكتظة بالسكان. الملامح الرئيسية: خطوط الكنتور ، والطرق ، وجودة السطح ، والقيود المفروضة على الوصول ، ودروع الطريق ، والمسارات التي تظهر وفقًا لمقياس SAC ، وميزات رياضة الماء الأبيض. قم بتنزيل أدلة السفر هذه من ويكي الرحلات لعرض مقالات حول الأماكن في العالم بدون إنترنت. - دليل السفر حاليا على أساس wikivoyage.اختبار كافة الميزات أثناء اختبار بيتا المفتوحة مجانا.بعد ذلك، وأدلة السفر ستكون متاحة للمشتركين في osmand محدود و اصحاب osmand +. + دليل السفر حاليا على أساس Wikivoyage. اختبار كافة الميزات أثناء اختبار بيتا المفتوحة مجانا.بعد ذلك، وأدلة السفر ستكون متاحة للمشتركين في osmand غير المحدود و اصحاب +osmand. ملف GPX مع الإحداثيات والبيانات من الملاحظات المحددة. ملف GPX مع الإحداثيات والبيانات من كافة الملاحظات. + Copy coordinates Reset to default will reset sort order to the default state after installation. Use system screen timeout Disabled by default, if OsmAnd running on foreground, the screen doesn’t time out.\n\nIf enabled OsmAnd will use system timeout settings. diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/ShareDialog.java b/OsmAnd/src/net/osmand/plus/activities/actions/ShareDialog.java index 45371aef6e..475286525c 100644 --- a/OsmAnd/src/net/osmand/plus/activities/actions/ShareDialog.java +++ b/OsmAnd/src/net/osmand/plus/activities/actions/ShareDialog.java @@ -216,7 +216,7 @@ public class ShareDialog { public static void sendToClipboard(Activity activity, String text) { ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE); clipboard.setText(text); - Toast.makeText(activity, R.string.copied_to_clipboard, Toast.LENGTH_LONG) + Toast.makeText(activity, activity.getString(R.string.copied_to_clipboard) + "\n" + text, Toast.LENGTH_LONG) .show(); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/ShareMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/ShareMenu.java index 957468c8de..84b444490a 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/ShareMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/ShareMenu.java @@ -9,6 +9,9 @@ import android.support.v4.view.ViewCompat; import android.widget.Toast; import net.osmand.data.LatLon; +import net.osmand.plus.OsmAndFormatter; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.actions.ShareDialog; @@ -33,6 +36,7 @@ public class ShareMenu extends BaseMenuController { MESSAGE(R.drawable.ic_action_message, R.string.shared_string_send), CLIPBOARD(R.drawable.ic_action_copy, R.string.shared_string_copy), NAME(R.drawable.ic_action_copy, R.string.copy_location_name), + COORDINATES(R.drawable.ic_action_copy, R.string.copy_coordinates), GEO(R.drawable.ic_world_globe_dark, R.string.share_geo), QR_CODE(R.drawable.ic_action_qrcode, R.string.shared_string_qr_code); @@ -62,6 +66,7 @@ public class ShareMenu extends BaseMenuController { list.add(ShareItem.MESSAGE); list.add(ShareItem.CLIPBOARD); list.add(ShareItem.NAME); + list.add(ShareItem.COORDINATES); list.add(ShareItem.GEO); list.add(ShareItem.QR_CODE); return list; @@ -124,6 +129,12 @@ public class ShareMenu extends BaseMenuController { Toast.LENGTH_LONG).show(); } break; + case COORDINATES: + OsmandSettings st = ((OsmandApplication) mapActivity.getApplicationContext()).getSettings(); + int f = st.COORDINATES_FORMAT.get(); + ShareDialog.sendToClipboard(mapActivity, + OsmAndFormatter.getFormattedCoordinates(latLon.getLatitude(), latLon.getLongitude(), f)); + break; case GEO: Intent mapIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoUrl)); mapActivity.startActivity(mapIntent); From 7ab05ae877b2db5d882b4f8bba9d38a571eb7ed9 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 10 Feb 2020 12:08:07 +0100 Subject: [PATCH 37/42] Fix #7101, display passed favorites by default (change default value of appearance) --- OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java | 5 +++-- OsmAnd/src/net/osmand/plus/OsmandSettings.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java index 7d413a86a2..033beb3789 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java @@ -387,7 +387,7 @@ public class OsmandRegions { if("zh".equals(locale)) { if("TW".equalsIgnoreCase(country)) { this.locale2 = "zh-hant"; - } else { + } else if("CN".equalsIgnoreCase(country)) { this.locale2 = "zh-hans"; } } @@ -611,7 +611,8 @@ public class OsmandRegions { public static void main(String[] args) throws IOException { OsmandRegions or = new OsmandRegions(); Locale tw = Locale.CHINA; - or.setLocale(tw.getLanguage(), tw.getCountry()); + or.setLocale(tw.getLanguage(), null); +// or.setLocale(tw.getLanguage(), tw.getCountry()); or.prepareFile("/Users/victorshcherb/osmand/repos/resources/countries-info/regions.ocbf"); LinkedList lst = new LinkedList(); lst.add(or.getWorldRegion()); diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index e55bf36d49..4a8540f633 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -1261,7 +1261,7 @@ public class OsmandSettings { public final CommonPreference WIKI_ARTICLE_SHOW_IMAGES = new EnumIntPreference<>("wikivoyage_show_imgs", WikiArticleShowImages.OFF, WikiArticleShowImages.values()).makeGlobal(); public final CommonPreference SELECT_MARKER_ON_SINGLE_TAP = new BooleanPreference("select_marker_on_single_tap", false).makeProfile(); - public final CommonPreference KEEP_PASSED_MARKERS_ON_MAP = new BooleanPreference("keep_passed_markers_on_map", false).makeProfile(); + public final CommonPreference KEEP_PASSED_MARKERS_ON_MAP = new BooleanPreference("keep_passed_markers_on_map", true).makeProfile(); public final CommonPreference COORDS_INPUT_USE_RIGHT_SIDE = new BooleanPreference("coords_input_use_right_side", true).makeGlobal(); public final OsmandPreference COORDS_INPUT_FORMAT = new EnumIntPreference<>("coords_input_format", Format.DD_MM_MMM, Format.values()).makeGlobal(); From 583db6edae8314f1793b486daf96d54e459f9804 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Mon, 10 Feb 2020 14:12:10 +0300 Subject: [PATCH 38/42] Fix string --- OsmAnd/res/values-he/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index debd449fdc..7bf23e239b 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -3383,7 +3383,7 @@ כיבוי נוסף תוסף חדש חיבור מקטעים - להוסיף פרופיל חדש ‚%1&s’\? + להוסיף פרופיל חדש ‚%1$s’\? כולל הכותרת לשמור את הכותרת של כל נקודת דרך בזמן ההקלטה. %1$s • %2$s From 101589e8537777bf4398339da88967e2ac79b840 Mon Sep 17 00:00:00 2001 From: Nazar Date: Mon, 10 Feb 2020 13:46:57 +0200 Subject: [PATCH 39/42] Import Routing Profiles Fixes --- ...ttom_sheet_item_btn_with_icon_and_text.xml | 2 +- .../bottom_sheet_item_preference_btn.xml | 39 +++ .../src/net/osmand/plus/SettingsHelper.java | 12 +- .../net/osmand/plus/helpers/ImportHelper.java | 18 +- .../plus/profiles/ProfileDataObject.java | 8 +- ...electProfileBottomSheetDialogFragment.java | 305 +++++++++--------- .../plus/settings/MainSettingsFragment.java | 2 +- .../plus/settings/NavigationFragment.java | 38 +++ 8 files changed, 256 insertions(+), 168 deletions(-) create mode 100644 OsmAnd/res/layout/bottom_sheet_item_preference_btn.xml diff --git a/OsmAnd/res/layout/bottom_sheet_item_btn_with_icon_and_text.xml b/OsmAnd/res/layout/bottom_sheet_item_btn_with_icon_and_text.xml index 6adcae70ac..82139e9df9 100644 --- a/OsmAnd/res/layout/bottom_sheet_item_btn_with_icon_and_text.xml +++ b/OsmAnd/res/layout/bottom_sheet_item_btn_with_icon_and_text.xml @@ -8,7 +8,7 @@ android:gravity="center_vertical" android:orientation="horizontal"> - + + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/SettingsHelper.java index 4c75032ce0..ddbcd94dea 100644 --- a/OsmAnd/src/net/osmand/plus/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/SettingsHelper.java @@ -906,6 +906,7 @@ public class SettingsHelper { private File file; private String latestChanges; + private boolean askBeforeImport; private int version; private SettingsImportListener listener; @@ -915,11 +916,13 @@ public class SettingsHelper { private SettingsItem currentItem; private AlertDialog dialog; - ImportAsyncTask(@NonNull File settingsFile, String latestChanges, int version, @Nullable SettingsImportListener listener) { + ImportAsyncTask(@NonNull File settingsFile, String latestChanges, int version, boolean askBeforeImport, + @Nullable SettingsImportListener listener) { this.file = settingsFile; this.listener = listener; this.latestChanges = latestChanges; this.version = version; + this.askBeforeImport = askBeforeImport; importer = new SettingsImporter(app); } @@ -992,7 +995,7 @@ public class SettingsHelper { break; } } else { - if (item.getType() == SettingsItemType.PROFILE) { + if (item.getType() == SettingsItemType.PROFILE && askBeforeImport) { String title = activity.getString(R.string.add_new_profile_q, item.getPublicName(app)); dialog = showConfirmDialog(item, title, latestChanges); } else { @@ -1128,8 +1131,9 @@ public class SettingsHelper { } } - public void importSettings(@NonNull File settingsFile, String latestChanges, int version, @Nullable SettingsImportListener listener) { - new ImportAsyncTask(settingsFile, latestChanges, version, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + public void importSettings(@NonNull File settingsFile, String latestChanges, int version, + boolean askBeforeImport, @Nullable SettingsImportListener listener) { + new ImportAsyncTask(settingsFile, latestChanges, version, askBeforeImport, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } public void exportSettings(@NonNull File fileDir, @NonNull String fileName, diff --git a/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java index 44adb57ca9..3832fae55c 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java @@ -182,7 +182,7 @@ public class ImportHelper { } else if (fileName != null && fileName.endsWith(IndexConstants.SQLITE_EXT)) { handleSqliteTileImport(intentUri, fileName); } else if (fileName != null && fileName.endsWith(OSMAND_SETTINGS_FILE_EXT)) { - handleOsmAndSettingsImport(intentUri, fileName, extras, null); + handleOsmAndSettingsImport(intentUri, fileName, extras, true, null); } else if (fileName != null && fileName.endsWith(ROUTING_FILE_EXT)) { handleRoutingFileImport(intentUri, fileName, null); } else { @@ -606,7 +606,7 @@ public class ImportHelper { }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - public void chooseFileToImport(final ImportType importType, final CallbackWithObject callback) { + public void chooseFileToImport(final ImportType importType, final boolean askBeforeImport, final CallbackWithObject callback) { final MapActivity mapActivity = getMapActivity(); if (mapActivity == null) { return; @@ -644,7 +644,7 @@ public class ImportHelper { if (fileName.endsWith(importType.getExtension())) { if (importType.equals(ImportType.SETTINGS)) { - handleOsmAndSettingsImport(data, fileName, resultData.getExtras(), callback); + handleOsmAndSettingsImport(data, fileName, resultData.getExtras(), askBeforeImport, callback); } else if (importType.equals(ImportType.ROUTING)){ handleRoutingFileImport(data, fileName, callback); } @@ -733,20 +733,20 @@ public class ImportHelper { } } - private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, + private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, boolean askBeforeImport, CallbackWithObject> callback) { if (extras != null && extras.containsKey(SettingsHelper.SETTINGS_VERSION_KEY) && extras.containsKey(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY)) { int version = extras.getInt(SettingsHelper.SETTINGS_VERSION_KEY, -1); String latestChanges = extras.getString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY); - handleOsmAndSettingsImport(intentUri, fileName, latestChanges, version, callback); + handleOsmAndSettingsImport(intentUri, fileName, latestChanges, version, askBeforeImport, callback); } else { - handleOsmAndSettingsImport(intentUri, fileName, null, -1, callback); + handleOsmAndSettingsImport(intentUri, fileName, null, -1, askBeforeImport, callback); } } @SuppressLint("StaticFieldLeak") - private void handleOsmAndSettingsImport(final Uri uri, final String name, final String latestChanges, final int version, - final CallbackWithObject> callback) { + private void handleOsmAndSettingsImport(final Uri uri, final String name, final String latestChanges, final int version, + final boolean askBeforeImport, final CallbackWithObject> callback) { final AsyncTask settingsImportTask = new AsyncTask() { ProgressDialog progress; @@ -771,7 +771,7 @@ public class ImportHelper { File tempDir = app.getAppPath(IndexConstants.TEMP_DIR); File file = new File(tempDir, name); if (error == null && file.exists()) { - app.getSettingsHelper().importSettings(file, latestChanges, version, new SettingsImportListener() { + app.getSettingsHelper().importSettings(file, latestChanges, version, askBeforeImport, new SettingsImportListener() { @Override public void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List items) { if (isActivityNotDestroyed(activity)) { diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java index 9d0bf40a12..2402506548 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java @@ -1,8 +1,9 @@ package net.osmand.plus.profiles; import android.support.annotation.ColorRes; +import android.support.annotation.NonNull; -public class ProfileDataObject { +public class ProfileDataObject implements Comparable { private String name; private String description; @@ -47,4 +48,9 @@ public class ProfileDataObject { @ColorRes public int getIconColor(boolean isNightMode) { return iconColor.getColor(isNightMode); } + + @Override + public int compareTo(@NonNull ProfileDataObject another) { + return this.name.compareToIgnoreCase(another.name); + } } diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java index 27b7c3eb65..7e017f82fa 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java @@ -1,7 +1,6 @@ package net.osmand.plus.profiles; import android.app.Activity; -import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; @@ -11,18 +10,20 @@ import android.support.v4.app.FragmentManager; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.widget.CompoundButton; import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; import net.osmand.CallbackWithObject; import net.osmand.PlatformUtil; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; -import net.osmand.plus.SettingsHelper.*; +import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; -import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton; -import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; @@ -36,7 +37,6 @@ import java.util.ArrayList; import java.util.List; import static net.osmand.plus.helpers.ImportHelper.ImportType.ROUTING; -import static net.osmand.plus.helpers.ImportHelper.ImportType.SETTINGS; public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { @@ -68,14 +68,7 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo if (args != null && args.get(DIALOG_TYPE) != null) { type = args.getString(DIALOG_TYPE); selectedItemKey = args.getString(SELECTED_KEY, null); - if (type.equals(TYPE_NAV_PROFILE)) { - profiles.addAll(NavigationFragment.getRoutingProfiles(app).values()); - } else if (type.equals(TYPE_BASE_APP_PROFILE)) { - profiles.addAll(NavigationFragment.getBaseProfiles(app)); - } else { - LOG.error("Check intent data!"); - dismiss(); - } + refreshProfiles(app); } } @@ -89,22 +82,11 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo dismiss(); } }); - - if (type.equals(TYPE_NAV_PROFILE) || type.equals(TYPE_BASE_APP_PROFILE)) { - for (BaseBottomSheetItem item : items) { - View bottomDivider = item.getView().findViewById(R.id.divider_bottom); - if (bottomDivider != null) { - bottomDivider.setVisibility(View.INVISIBLE); - } - } - } } @Override public void createMenuItems(Bundle savedInstanceState) { - int activeColorRes = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; - int iconDefaultColorResId = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light; - OsmandApplication app = getMyApplication(); + OsmandApplication app = requiredMyApplication(); View bottomSpaceView = new View(app); int space = (int) getResources().getDimension(R.dimen.empty_state_text_button_padding_top); @@ -114,154 +96,173 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(new TitleItem(getString(R.string.select_base_profile_dialog_title))); items.add(new LongDescriptionItem(getString(R.string.select_base_profile_dialog_message))); for (int i = 0; i < profiles.size(); i++) { - final int pos = i; - final ProfileDataObject profile = profiles.get(i); - final boolean isSelected = profile.getStringKey().equals(selectedItemKey); - final Drawable drawableIcon; - if (isSelected) { - drawableIcon = getMyApplication().getUIUtilities() - .getIcon(profile.getIconRes(), activeColorRes); - } else { - drawableIcon = getMyApplication().getUIUtilities() - .getIcon(profile.getIconRes(), R.color.icon_color_default_light); - } - - items.add(new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(activeColorRes) - .setChecked(isSelected) - .setButtonTintList(isSelected - ? ColorStateList.valueOf(getResolvedColor(getActiveColorId())) - : null) - .setDescription(profile.getDescription()) - .setTitle(profile.getName()) - .setIcon(drawableIcon) - .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_radio_btn) - .setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (listener == null) { - getListener(); - } - Bundle args = new Bundle(); - args.putString(PROFILE_KEY_ARG, profile.getStringKey()); - listener.onSelectedType(args); - dismiss(); - } - }) - .create()); + ProfileDataObject profile = profiles.get(i); + addProfileItem(profile, false); } - items.add(new DividerItem(app)); - items.add(new SimpleBottomSheetItem.Builder() - .setTitle(app.getString(R.string.import_from_file)) - .setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_folder, iconDefaultColorResId)) - .setLayoutId(R.layout.bottom_sheet_item_simple) - .setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - MapActivity mapActivity = getMapActivity(); - if (mapActivity == null) { - return; - } - mapActivity.getImportHelper().chooseFileToImport(SETTINGS, new CallbackWithObject>() { - @Override - public boolean processResult(List result) { - for (SettingsItem item : result) { - if (SettingsItemType.PROFILE.equals(item.getType())) { - if (listener == null) { - getListener(); - } - Bundle args = new Bundle(); - args.putString(PROFILE_KEY_ARG, item.getName()); - args.putBoolean(IS_PROFILE_IMPORTED_ARG, true); - listener.onSelectedType(args); - dismiss(); - break; - } - } - return false; - } - }); + /*items.add(new DividerItem(app)); + addButtonItem(R.string.import_from_file, R.drawable.ic_action_folder, new OnClickListener() { + + @Override + public void onClick(View v) { + MapActivity mapActivity = getMapActivity(); + if (mapActivity == null) { + return; } - }) - .create()); + mapActivity.getImportHelper().chooseFileToImport(SETTINGS, false, + new CallbackWithObject>() { + @Override + public boolean processResult(List result) { + for (SettingsItem item : result) { + if (SettingsItemType.PROFILE.equals(item.getType())) { + if (listener == null) { + getListener(); + } + Bundle args = new Bundle(); + args.putString(PROFILE_KEY_ARG, item.getName()); + args.putBoolean(IS_PROFILE_IMPORTED_ARG, true); + listener.onSelectedType(args); + dismiss(); + break; + } + } + return false; + } + }); + } + }); items.add(new BaseBottomSheetItem.Builder() .setCustomView(bottomSpaceView) - .create()); + .create());*/ - } else if (type.equals(TYPE_NAV_PROFILE)){ + } else if (type.equals(TYPE_NAV_PROFILE)) { items.add(new TitleItem(getString(R.string.select_nav_profile_dialog_title))); items.add(new LongDescriptionItem(getString(R.string.select_nav_profile_dialog_message))); for (int i = 0; i < profiles.size(); i++) { - final ProfileDataObject profile = profiles.get(i); - final boolean isSelected = profile.getStringKey().equals(selectedItemKey); - final Drawable drawableIcon; - if (isSelected) { - drawableIcon = getMyApplication().getUIUtilities() - .getIcon(profile.getIconRes(), activeColorRes); - } else { - drawableIcon = getMyApplication().getUIUtilities() - .getIcon(profile.getIconRes(), R.color.icon_color_default_light); - } - - items.add(new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(activeColorRes) - .setChecked(isSelected) - .setButtonTintList(isSelected - ? ColorStateList.valueOf(getResolvedColor(getActiveColorId())) - : null) - .setDescription(profile.getDescription()) - .setTitle(profile.getName()) - .setIcon(drawableIcon) - .setLayoutId(R.layout.bottom_sheet_item_with_descr_and_radio_btn) - .setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (listener == null) { - getListener(); - } - Bundle args = new Bundle(); - args.putString(PROFILE_KEY_ARG, profile.getStringKey()); - listener.onSelectedType(args); - dismiss(); - } - }) - .create()); + final RoutingProfileDataObject profile = (RoutingProfileDataObject) profiles.get(i); + boolean showBottomDivider = false; + if (i < profiles.size() - 1) { + RoutingProfileDataObject nextProfile = (RoutingProfileDataObject) profiles.get(i + 1); + if (profile.getFileName() == null) { + showBottomDivider = nextProfile.getFileName() != null; + } else { + showBottomDivider = !profile.getFileName().equals(nextProfile.getFileName()); + } + } + addProfileItem(profile, showBottomDivider); } items.add(new DividerItem(app)); items.add(new LongDescriptionItem(app.getString(R.string.osmand_routing_promo))); - items.add(new SimpleBottomSheetItem.Builder() - .setTitle(app.getString(R.string.import_routing_file)) - .setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_folder, iconDefaultColorResId)) - .setLayoutId(R.layout.bottom_sheet_item_simple) - .setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - MapActivity mapActivity = getMapActivity(); - if (mapActivity == null) { - return; - } - mapActivity.getImportHelper().chooseFileToImport(ROUTING, new CallbackWithObject() { + addButtonItem(R.string.import_routing_file, R.drawable.ic_action_folder, new OnClickListener() { + @Override + public void onClick(View v) { + MapActivity mapActivity = getMapActivity(); + if (mapActivity == null) { + return; + } + mapActivity.getImportHelper().chooseFileToImport(ROUTING, false, + new CallbackWithObject() { @Override public boolean processResult(String profileKey) { - if (listener == null) { - getListener(); - } - Bundle args = new Bundle(); - args.putString(PROFILE_KEY_ARG, profileKey); - args.putBoolean(IS_PROFILE_IMPORTED_ARG, true); - listener.onSelectedType(args); - dismiss(); + refreshView(); return false; } }); - } - }) - .create()); + } + }); items.add(new BaseBottomSheetItem.Builder() .setCustomView(bottomSpaceView) .create()); } } + + private void addProfileItem(final ProfileDataObject profile, boolean showBottomDivider) { + OsmandApplication app = requiredMyApplication(); + + int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; + int iconDefaultColorResId = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light; + + View itemView = View.inflate(getContext(), R.layout.bottom_sheet_item_with_descr_and_radio_btn, null); + TextView tvTitle = itemView.findViewById(R.id.title); + TextView tvDescription = itemView.findViewById(R.id.description); + ImageView ivIcon = itemView.findViewById(R.id.icon); + CompoundButton compoundButton = itemView.findViewById(R.id.compound_button); + View bottomDivider = itemView.findViewById(R.id.divider_bottom); + + tvTitle.setText(profile.getName()); + tvDescription.setText(profile.getDescription()); + + final boolean isSelected = profile.getStringKey().equals(selectedItemKey); + final Drawable drawableIcon = app.getUIUtilities().getIcon(profile.getIconRes(), + isSelected ? activeColorResId : iconDefaultColorResId); + ivIcon.setImageDrawable(drawableIcon); + compoundButton.setChecked(isSelected); + UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL); + bottomDivider.setVisibility(showBottomDivider ? View.VISIBLE : View.INVISIBLE); + + items.add(new BaseBottomSheetItem.Builder() + .setCustomView(itemView) + .setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (listener == null) { + getListener(); + } + Bundle args = new Bundle(); + args.putString(PROFILE_KEY_ARG, profile.getStringKey()); + listener.onSelectedType(args); + dismiss(); + } + }) + .create()); + } + + private void addButtonItem(int titleId, int iconId, OnClickListener listener) { + OsmandApplication app = requiredMyApplication(); + + int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; + + View buttonView = View.inflate(app, R.layout.bottom_sheet_item_preference_btn, null); + TextView tvTitle = buttonView.findViewById(R.id.title); + tvTitle.setText(app.getString(titleId)); + + ImageView ivIcon = buttonView.findViewById(R.id.icon); + ivIcon.setImageDrawable(app.getUIUtilities().getIcon(iconId, activeColorResId)); + + items.add(new BaseBottomSheetItem.Builder() + .setCustomView(buttonView) + .setOnClickListener(listener) + .create()); + } + + private void refreshProfiles(OsmandApplication app) { + if (type.equals(TYPE_NAV_PROFILE)) { + profiles.addAll(NavigationFragment.getSortedRoutingProfiles(app)); + } else if (type.equals(TYPE_BASE_APP_PROFILE)) { + profiles.addAll(NavigationFragment.getBaseProfiles(app)); + } else { + LOG.error("Check data type!"); + dismiss(); + } + } + + private void refreshView() { + Activity activity = getActivity(); + View mainView = getView(); + refreshProfiles(getMyApplication()); + if (activity != null && mainView != null) { + LinearLayout itemsContainer = (LinearLayout) mainView.findViewById(useScrollableItemsContainer() + ? R.id.scrollable_items_container : R.id.non_scrollable_items_container); + if (itemsContainer != null) { + itemsContainer.removeAllViews(); + } + items.clear(); + createMenuItems(null); + for (BaseBottomSheetItem item : items) { + item.inflate(activity, itemsContainer, nightMode); + } + setupHeightAndBackground(mainView); + } + } private void getListener() { FragmentActivity activity = getActivity(); diff --git a/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java index 80ae2ae4ab..8c7c50a435 100644 --- a/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/MainSettingsFragment.java @@ -125,7 +125,7 @@ public class MainSettingsFragment extends BaseSettingsFragment { } else if (IMPORT_PROFILE.equals(prefId)) { final MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { - mapActivity.getImportHelper().chooseFileToImport(SETTINGS, new CallbackWithObject>() { + mapActivity.getImportHelper().chooseFileToImport(SETTINGS, false, new CallbackWithObject>() { @Override public boolean processResult(List result) { diff --git a/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java b/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java index 8b08ea12f0..8699504c92 100644 --- a/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/NavigationFragment.java @@ -22,6 +22,8 @@ import net.osmand.router.GeneralRouter; import net.osmand.util.Algorithms; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,6 +38,7 @@ public class NavigationFragment extends BaseSettingsFragment { public static final String TAG = NavigationFragment.class.getSimpleName(); public static final String NAVIGATION_TYPE = "navigation_type"; + public static final String OSMAND_NAVIGATION = "osmand_navigation"; private SelectProfileBottomSheetDialogFragment.SelectProfileListener navTypeListener; private Map routingProfileDataObjects; @@ -163,6 +166,41 @@ public class NavigationFragment extends BaseSettingsFragment { appMode.setRoutingProfile(profileKey); } + public static List getSortedRoutingProfiles(OsmandApplication app) { + List result = new ArrayList<>(); + Map> routingProfilesByFileNames = getRoutingProfilesByFileNames(app); + List fileNames = new ArrayList<>(routingProfilesByFileNames.keySet()); + Collections.sort(fileNames, new Comparator() { + @Override + public int compare(String s, String t1) { + return s.equals(OSMAND_NAVIGATION) ? -1 : t1.equals(OSMAND_NAVIGATION) ? 1 : s.compareToIgnoreCase(t1); + } + }); + for (String fileName : fileNames) { + List routingProfilesFromFile = routingProfilesByFileNames.get(fileName); + if (routingProfilesFromFile != null) { + Collections.sort(routingProfilesFromFile); + result.addAll(routingProfilesFromFile); + } + } + return result; + } + + public static Map> getRoutingProfilesByFileNames(OsmandApplication app) { + Map> result = new HashMap<>(); + for (final RoutingProfileDataObject profile : getRoutingProfiles(app).values()) { + String fileName = profile.getFileName() != null ? profile.getFileName() : OSMAND_NAVIGATION; + if (result.containsKey(fileName)) { + result.get(fileName).add(profile); + } else { + result.put(fileName, new ArrayList() { + { add(profile); } + }); + } + } + return result; + } + public static Map getRoutingProfiles(OsmandApplication context) { Map profilesObjects = new HashMap<>(); profilesObjects.put(RoutingProfilesResources.STRAIGHT_LINE_MODE.name(), new RoutingProfileDataObject( From 896603a565db468c2c136a653eb9e385e0e78093 Mon Sep 17 00:00:00 2001 From: Nazar Date: Mon, 10 Feb 2020 15:00:32 +0200 Subject: [PATCH 40/42] Fix formatting --- .../net/osmand/plus/helpers/ImportHelper.java | 3 +-- ...electProfileBottomSheetDialogFragment.java | 20 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java index 3832fae55c..ecdfdf49aa 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/ImportHelper.java @@ -733,8 +733,7 @@ public class ImportHelper { } } - private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, boolean askBeforeImport, - CallbackWithObject> callback) { + private void handleOsmAndSettingsImport(Uri intentUri, String fileName, Bundle extras, boolean askBeforeImport, CallbackWithObject> callback) { if (extras != null && extras.containsKey(SettingsHelper.SETTINGS_VERSION_KEY) && extras.containsKey(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY)) { int version = extras.getInt(SettingsHelper.SETTINGS_VERSION_KEY, -1); String latestChanges = extras.getString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY); diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java index 7e017f82fa..2da12e3c5e 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java @@ -139,16 +139,16 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(new LongDescriptionItem(getString(R.string.select_nav_profile_dialog_message))); for (int i = 0; i < profiles.size(); i++) { final RoutingProfileDataObject profile = (RoutingProfileDataObject) profiles.get(i); - boolean showBottomDivider = false; - if (i < profiles.size() - 1) { - RoutingProfileDataObject nextProfile = (RoutingProfileDataObject) profiles.get(i + 1); - if (profile.getFileName() == null) { - showBottomDivider = nextProfile.getFileName() != null; - } else { - showBottomDivider = !profile.getFileName().equals(nextProfile.getFileName()); - } - } - addProfileItem(profile, showBottomDivider); + boolean showBottomDivider = false; + if (i < profiles.size() - 1) { + RoutingProfileDataObject nextProfile = (RoutingProfileDataObject) profiles.get(i + 1); + if (profile.getFileName() == null) { + showBottomDivider = nextProfile.getFileName() != null; + } else { + showBottomDivider = !profile.getFileName().equals(nextProfile.getFileName()); + } + } + addProfileItem(profile, showBottomDivider); } items.add(new DividerItem(app)); items.add(new LongDescriptionItem(app.getString(R.string.osmand_routing_promo))); From 6d683b54b8e938c91020cbc352e66b42ec3d4e0c Mon Sep 17 00:00:00 2001 From: Nazar Date: Mon, 10 Feb 2020 15:02:14 +0200 Subject: [PATCH 41/42] Fix formatting p.2 --- .../plus/profiles/SelectProfileBottomSheetDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java index 2da12e3c5e..d0166a7c33 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheetDialogFragment.java @@ -139,7 +139,7 @@ public class SelectProfileBottomSheetDialogFragment extends MenuBottomSheetDialo items.add(new LongDescriptionItem(getString(R.string.select_nav_profile_dialog_message))); for (int i = 0; i < profiles.size(); i++) { final RoutingProfileDataObject profile = (RoutingProfileDataObject) profiles.get(i); - boolean showBottomDivider = false; + boolean showBottomDivider = false; if (i < profiles.size() - 1) { RoutingProfileDataObject nextProfile = (RoutingProfileDataObject) profiles.get(i + 1); if (profile.getFileName() == null) { From 4b2f0cf266012b8ab14126530fea1bed70c612e6 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 10 Feb 2020 16:16:35 +0200 Subject: [PATCH 42/42] Added information about new release 3.6 --- OsmAnd/res/values/strings.xml | 14 ++++++++++++++ OsmAnd/src/net/osmand/plus/AppInitializer.java | 2 +- .../plus/dialogs/WhatsNewDialogFragment.java | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index c423b3072d..eb85f2626e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -11,6 +11,20 @@ Thx - Hardy --> + + • Profiles: now you can change order, set icon for map, change all setting for base profiles and restore them back to defaults\n\n + • Added exit number in the navigation\n\n + • Reworked plugin settings\n\n + • Reworked Settings screen for quick access to all profiles\n\n + • Added option to copy settings from another profile\n\n + • Added ability to change an order or hide POI categories in Search\n\n + • Correctly aligned POI icons on the map\n\n + • Added Sunset / Sunrise data to Configure Map\n\n + • Added Home/Work icons on the map\n\n + • Added support for multiline description in Settings\n\n + • Added correct transliteration into the map of Japan\n\n + • Added Antarctica map\n\n + Copy coordinates Reset to default will reset sort order to the default state after installation. Use system screen timeout diff --git a/OsmAnd/src/net/osmand/plus/AppInitializer.java b/OsmAnd/src/net/osmand/plus/AppInitializer.java index 8fcb44f0dc..cff34c8eec 100644 --- a/OsmAnd/src/net/osmand/plus/AppInitializer.java +++ b/OsmAnd/src/net/osmand/plus/AppInitializer.java @@ -107,7 +107,7 @@ public class AppInitializer implements IProgress { private static final String VERSION_INSTALLED = "VERSION_INSTALLED"; //$NON-NLS-1$ private static final String EXCEPTION_FILE_SIZE = "EXCEPTION_FS"; //$NON-NLS-1$ - public static final String LATEST_CHANGES_URL = "https://osmand.net/blog/osmand-3-5-released"; + public static final String LATEST_CHANGES_URL = "https://osmand.net/blog/osmand-3-6-released"; // public static final String LATEST_CHANGES_URL = null; // not enough to read public static final int APP_EXIT_CODE = 4; public static final String APP_EXIT_KEY = "APP_EXIT_KEY"; diff --git a/OsmAnd/src/net/osmand/plus/dialogs/WhatsNewDialogFragment.java b/OsmAnd/src/net/osmand/plus/dialogs/WhatsNewDialogFragment.java index be0597a633..f7d697444b 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/WhatsNewDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/WhatsNewDialogFragment.java @@ -28,7 +28,7 @@ public class WhatsNewDialogFragment extends DialogFragment { final OsmandApplication osmandApplication = (OsmandApplication) getActivity().getApplication(); final String appVersion = Version.getAppVersion(osmandApplication); builder.setTitle(getString(R.string.whats_new) + " " + appVersion) - .setMessage(getString(R.string.release_3_5)) + .setMessage(getString(R.string.release_3_6)) .setNegativeButton(R.string.shared_string_close, null); if (AppInitializer.LATEST_CHANGES_URL != null) { builder.setPositiveButton(R.string.read_more, new DialogInterface.OnClickListener() {