diff --git a/OsmAnd-java/src/main/java/net/osmand/CollatorStringMatcher.java b/OsmAnd-java/src/main/java/net/osmand/CollatorStringMatcher.java index 7e1b23cc9fa..b8f66f4878c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/CollatorStringMatcher.java +++ b/OsmAnd-java/src/main/java/net/osmand/CollatorStringMatcher.java @@ -195,7 +195,7 @@ private static String alignChars(String fullText) { return fullText; } - private static boolean isSpace(char c){ + public static boolean isSpace(char c){ return !Character.isLetter(c) && !Character.isDigit(c); } diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/GeocodingUtilities.java b/OsmAnd-java/src/main/java/net/osmand/binary/GeocodingUtilities.java index 7d078ea9f57..f50474769e7 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/GeocodingUtilities.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/GeocodingUtilities.java @@ -1,11 +1,11 @@ package net.osmand.binary; +import net.osmand.CollatorStringMatcher; +import net.osmand.CollatorStringMatcher.StringMatcherMode; import net.osmand.PlatformUtil; import net.osmand.ResultMatcher; -import net.osmand.CollatorStringMatcher.StringMatcherMode; import net.osmand.binary.BinaryMapIndexReader.SearchRequest; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; -import net.osmand.binary.GeocodingUtilities.GeocodingResult; import net.osmand.data.Building; import net.osmand.data.City; import net.osmand.data.LatLon; @@ -17,7 +17,6 @@ import net.osmand.router.RoutingContext; import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; - import org.apache.commons.logging.Log; import java.io.IOException; @@ -51,6 +50,9 @@ public class GeocodingUtilities { @Override public int compare(GeocodingResult o1, GeocodingResult o2) { + if ((int) o1.getDistance() == (int) o2.getDistance()) { + return Double.compare(o1.getCityDistance(), o2.getCityDistance()); + } return Double.compare(o1.getDistance(), o2.getDistance()); } }; @@ -85,6 +87,7 @@ public GeocodingResult(GeocodingResult r) { public Street street; public City city; private double dist = -1; + private double cityDist = -1; public LatLon getLocation() { return connectionPoint; @@ -110,6 +113,18 @@ public double getDistance() { return dist; } + public void resetDistance() { + dist = -1; + getDistance(); + } + + public double getCityDistance() { + if (cityDist == -1 && city != null && searchPoint != null) { + cityDist = MapUtils.getDistance(city.getLocation(), searchPoint); + } + return cityDist; + } + @Override public String toString() { StringBuilder bld = new StringBuilder(); @@ -185,9 +200,9 @@ public List prepareStreetName(String s, boolean addCommonWords) { List ls = new ArrayList(); int beginning = 0; for (int i = 1; i < s.length(); i++) { - if (s.charAt(i) == ' ') { + if (CollatorStringMatcher.isSpace(s.charAt(i))) { addWord(ls, s.substring(beginning, i), addCommonWords); - beginning = i; + beginning = i + 1; } else if (s.charAt(i) == '(') { addWord(ls, s.substring(beginning, i), addCommonWords); while (i < s.length()) { @@ -254,6 +269,7 @@ && prepareStreetName(object.getName(), addCommonWordsFinal).equals(streetNamesUs // set connection point to sort rs.connectionPoint = rs.street.getLocation(); rs.city = rs.street.getCity(); + rs.dist = d; streetsList.add(rs); return true; } @@ -281,10 +297,10 @@ public boolean isCancelled() { for (GeocodingResult street : streetsList) { if (streetDistance == 0) { streetDistance = street.getDistance(); - } else if (streetDistance > 0 && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME && - isBuildingFound) { + } else if (isBuildingFound && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) { continue; } + street.resetDistance();//reset to road projection street.connectionPoint = road.connectionPoint; final List streetBuildings = loadStreetBuildings(road, reader, street); Collections.sort(streetBuildings, DISTANCE_COMPARATOR); @@ -435,12 +451,7 @@ public List sortGeocodingResults(List lis it.remove(); } } - Collections.sort(complete, new Comparator() { - @Override - public int compare(GeocodingResult o1, GeocodingResult o2) { - return Double.compare(o1.getDistance(), o2.getDistance()); - } - }); + Collections.sort(complete, DISTANCE_COMPARATOR); return complete; } diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java index ab6dea3e57f..3f296b204f2 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java @@ -660,6 +660,11 @@ public String getDestinationName(String lang, boolean transliterate, List() var widgets: List = ArrayList() private set var timeoutForInstantValuesSeconds = 0 - var fuelTank = 52f + var fuelTank = DEFAULT_FUEL_TANK_CAPACITY class OBDLocation(val time: Long, val latLon: KLatLon) @@ -430,4 +431,5 @@ object OBDDataComputer { } } } + } \ No newline at end of file diff --git a/OsmAnd/res/drawable/ic_action_turn_preview_disabled.xml b/OsmAnd/res/drawable/ic_action_turn_preview_disabled.xml new file mode 100644 index 00000000000..2228f478fa9 --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_turn_preview_disabled.xml @@ -0,0 +1,15 @@ + + + + diff --git a/OsmAnd/res/drawable/ic_action_turn_preview_enabled.xml b/OsmAnd/res/drawable/ic_action_turn_preview_enabled.xml new file mode 100644 index 00000000000..6db28f2d29b --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_turn_preview_enabled.xml @@ -0,0 +1,15 @@ + + + + diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 30f18d18653..a6fc3da5d2b 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -5937,4 +5937,15 @@ Verbunden mit %s Getrennt von %s Symbol ändert sich je nach Aktionsstatus. + Tankinhalt eingeben, um Kraftstoffstand und -verbrauch genau zu verfolgen + Abmessungen + Volumen des Kraftstofftanks + Liter + imp gal + gal + Imperial gallons + US gallons + Ausgewählte Einheiten werden auf alle volumenbezogenen Daten im aktuellen Profil angewendet. + Volumeneinheit + Fahrzeugmetriken aufzeichnen \ No newline at end of file diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 1cfb2891590..d686992be17 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -1202,7 +1202,7 @@ Elŝutu malkonektan vektoran mapon por tiu ĉi loko per la menuo “Elŝuti mapojn”, aŭ aktivigu la kromprogramon “Enretaj mapoj”. Ĉu alŝuti GPX-dosierojn al OSM? Etikedoj - Videblo + Videbla Priskribo Bonvolu enmeti vian uzantnomon kaj pasvorton al OSM por alŝuti GPX-dosierojn. Subteni @@ -5970,4 +5970,34 @@ %1$s — %2$s Aktivigi aŭ malaktivigi tuŝekranon por evitigi senintencajn frapetojn Ŝlosi ekranon + Registri statistikojn pri veturilo + Enigu enhavecon de via brulaĵujo por precize spuri nivelon kaj konsumon de brulaĵo + Enhaveco de brulaĵujo + Dimensioj + Litroj + gal + gal + Britaj galjonoj + Usonaj galjonoj + Elektata mezurunuo estos aplikita al ĉiuj volumen-rilataj datumoj en la elektita profilo. + Mezurunuo de volumeno + Bildsimbolo ŝanĝiĝas laŭ stato de ago. + Dinamika + Konektita kun %s + Malkonektita de %s + Konektata kun %s + Ne povas ekigi kupli la aparaton + Montras konsumon de brulaĵo de via veturilo surbaze de kalkuloj (%/h) + l/100km + Konsumo de brulaĵo (l/km) + Montras konsumon de brulaĵo de via veturilo surbaze de kalkuloj (l/km) + Simuli ODB-datumojn + Labortempo de motoro + Montras labortempon de motoro raportatan de OBD-sentilo + Premo de brulaĵo + Montras premon de brulaĵo raportatan de OBD-sentilo + Kalkulita ŝarĝo de motoro + Maksimumo + Pozicio de brulaĵ-valvo + kPa \ No newline at end of file diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index c4923da8128..6127a734037 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -5578,10 +5578,10 @@ Maradék üzemanyag (%) Maradék üzemanyag (l) Megtehető táv (km) - Fogyasztás %/óra + Fogyasztás (%/óra) Fogyasztás (l/óra) Fogyasztás (OBD) - Fogyasztás l/óra + Fogyasztás (l/óra) %/óra l Maximum diff --git a/OsmAnd/res/values-vi/strings.xml b/OsmAnd/res/values-vi/strings.xml index b61785426aa..848b11d19ed 100644 --- a/OsmAnd/res/values-vi/strings.xml +++ b/OsmAnd/res/values-vi/strings.xml @@ -2014,4 +2014,16 @@ Xem xét quyền truy cập của những phương tiện được ngựa kéo Thông tin văn bản bổ sung về phẩm chất bề mặt đáy biển, các loại bề mặt kết hợp, danh mục và phân loại rong biển hoặc cỏ biển Theo mặc định, OsmAnd được cài từ Cửa hàng Play sử dụng %1$s để xác định vị trí.\n\nNếu bạn thấy thông tin vị trí không đúng hoặc dùng thiết bị không có %2$s, hãy thử chuyển sang \"%3$s\" + Việc chọn hành động này sẽ tự động lưu điểm dừng với các tham số đã được xác định trước. + Ghi các số liệu về phương tiện + Nhập dung tích bình xăng để theo dõi mức nhiên liệu và mức tiêu thụ + Dung tích bình xăng + Kích thước + Lít + imp ga-lông + ga-lông + Ga-lông hệ đo imperial + Ga-lông hệ US + Những đơn vị đã chọn sẽ được áp dụng cho tất cả dữ liệu liên quan đến thể tích trong hồ sơ hiện tại. + Đơn vị thể tích \ No newline at end of file diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 319cd3c401f..3951bcf85d5 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -5637,4 +5637,15 @@ 與 %s 斷線 正在連線至 %s 圖示會根據動作狀態變更。 + 輸入油箱容量,精確追蹤油量與耗油量 + 油箱容量 + 尺寸 + 公升 + 英制加侖 + 加侖 + 英制加侖 + 美制加侖 + 選取的單位將套用於目前設定檔中所有與體積相關的資料。 + 體積單位 + 記錄車輛指標 \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 5182af6a063..f51cbee9c2b 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -10,7 +10,8 @@ - For wording and consistency, please note https://docs.osmand.net/docs/technical/contributions/translating-osmand Thx - Hardy --> - + + WunderLINQ Datagrid Enter your tank capacity to accurately track fuel levels and consumption Fuel tank capacity Dimensions diff --git a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java index ec2b7decf77..9459aebdc8a 100644 --- a/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java +++ b/OsmAnd/src/net/osmand/plus/OsmAndLocationProvider.java @@ -104,6 +104,7 @@ public interface OsmAndCompassListener { private long timeToNotUseOtherGPS; private net.osmand.Location cachedLocation; private net.osmand.Location customLocation; + private net.osmand.Location prevLocation; private boolean sensorRegistered; private final float[] mGravs = new float[3]; @@ -616,13 +617,14 @@ private boolean shouldIgnoreLocation(net.osmand.Location location) { if (customLocation != null && timeToNotUseOtherGPS >= System.currentTimeMillis()) { return location == null || !Algorithms.stringsEqual(customLocation.getProvider(), location.getProvider()); } - return false; + return prevLocation != null && location != null && prevLocation.getTime() == location.getTime(); } public void setLocationFromService(net.osmand.Location location) { if (locationSimulation.isRouteAnimating() || shouldIgnoreLocation(location)) { return; } + prevLocation = location; if (location != null) { lastTimeLocationFixed = System.currentTimeMillis(); notifyGpsLocationRecovered(); @@ -661,6 +663,7 @@ private void setLocation(net.osmand.Location location) { if (shouldIgnoreLocation(location)) { return; } + prevLocation = location; if (location == null) { gpsInfo.reset(); } diff --git a/OsmAnd/src/net/osmand/plus/quickaction/MapButtonsHelper.java b/OsmAnd/src/net/osmand/plus/quickaction/MapButtonsHelper.java index bce4dedab7d..88ddae6cf3c 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/MapButtonsHelper.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/MapButtonsHelper.java @@ -18,6 +18,7 @@ import net.osmand.plus.plugins.PluginsHelper; import net.osmand.plus.plugins.mapillary.ShowHideMapillaryAction; import net.osmand.plus.quickaction.actions.*; +import net.osmand.plus.quickaction.actions.special.OpenWunderLINQDatagridAction; import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.views.mapwidgets.configure.buttons.*; @@ -396,6 +397,7 @@ public void updateActionTypes() { // interface allTypes.add(OpenNavigationViewAction.TYPE); allTypes.add(OpenSearchViewAction.TYPE); + allTypes.add(OpenWunderLINQDatagridAction.TYPE); allTypes.add(ShowHideDrawerAction.TYPE); allTypes.add(NavigatePreviousScreenAction.TYPE); allTypes.add(LockScreenAction.TYPE); diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/special/OpenWunderLINQDatagridAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/special/OpenWunderLINQDatagridAction.java index 487ceaf8562..4dd5986fd03 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/special/OpenWunderLINQDatagridAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/special/OpenWunderLINQDatagridAction.java @@ -17,9 +17,11 @@ public class OpenWunderLINQDatagridAction extends QuickAction { public static final QuickActionType TYPE = new QuickActionType(OPEN_WUNDERLINQ_DATAGRID_ACTION, "open.wunderlinq.datagrid", OpenWunderLINQDatagridAction.class) - .nameRes(R.string.key_event_action_open_wunderlinq_datagrid) - .iconRes(R.drawable.ic_action_settings) - .nameActionRes(R.string.shared_string_open); + .nameActionRes(R.string.shared_string_open) + .nameRes(R.string.wunderlinq_datagrid) + .iconRes(R.drawable.ic_action_data_grid) + .category(QuickActionType.INTERFACE) + .nonEditable(); private static final String APP_PATH = "wunderlinq://datagrid"; diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index 4aea421bd89..5499857d289 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -96,6 +96,7 @@ import net.osmand.plus.wikipedia.WikiArticleShowImages; import net.osmand.render.RenderingRulesStorage; import net.osmand.shared.gpx.ColoringPurpose; +import net.osmand.shared.obd.OBDDataComputer; import net.osmand.shared.routing.ColoringType; import net.osmand.shared.settings.enums.MetricsConstants; import net.osmand.shared.settings.enums.SpeedConstants; @@ -314,9 +315,9 @@ public boolean setPreference(String key, Object value, ApplicationMode mode) { } return false; } - } else if (preference instanceof StringPreference) { - if (value instanceof String) { - return ((StringPreference) preference).setModeValue(mode, (String) value); + } else if (preference instanceof StringPreference stringPref) { + if (value instanceof String || (value == null && stringPref.isNullSupported(mode))) { + return stringPref.setModeValue(mode, (String) value); } } else { if (value instanceof String) { @@ -1134,7 +1135,7 @@ public VolumeUnit getProfileDefaultValue(ApplicationMode mode) { // fuel tank capacity stored in litres public final OsmandPreference FUEL_TANK_CAPACITY = new FloatPreference(this, - "fuel_tank_capacity", 0).makeProfile(); + "fuel_tank_capacity", OBDDataComputer.DEFAULT_FUEL_TANK_CAPACITY).makeProfile(); // cache of metrics constants as they are used very often diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/preferences/CommonPreference.java b/OsmAnd/src/net/osmand/plus/settings/backend/preferences/CommonPreference.java index 805dc01adee..0a6d4fee98c 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/preferences/CommonPreference.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/preferences/CommonPreference.java @@ -3,6 +3,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import net.osmand.plus.OsmandApplication; import net.osmand.plus.api.SettingsAPI; @@ -155,7 +156,7 @@ public boolean setModeValue(ApplicationMode mode, T obj) { return valueSaved; } - public T getProfileDefaultValue(ApplicationMode mode) { + public T getProfileDefaultValue(@Nullable ApplicationMode mode) { if (global) { return defaultValue; } @@ -182,7 +183,7 @@ public final boolean hasDefaultValueForMode(ApplicationMode mode) { } public T getDefaultValue() { - return getProfileDefaultValue(settings.APPLICATION_MODE.get()); + return getProfileDefaultValue(getApplicationMode()); } @Override @@ -191,7 +192,7 @@ public final void overrideDefaultValue(T newDefaultValue) { } @Override - public T getModeValue(ApplicationMode mode) { + public T getModeValue(@Nullable ApplicationMode mode) { if (global) { return get(); } else if (mode == null) { @@ -221,7 +222,7 @@ public T get() { @Override public final void resetToDefault() { - T o = getProfileDefaultValue(settings.APPLICATION_MODE.get()); + T o = getProfileDefaultValue(getApplicationMode()); set(o); } @@ -293,6 +294,14 @@ public OsmandPlugin getRelatedPlugin() { return pluginId != null ? PluginsHelper.getPlugin(pluginId) : null; } + public boolean isNullSupported() { + return isNullSupported(getApplicationMode()); + } + + public boolean isNullSupported(@NonNull ApplicationMode mode) { + return isGlobal() ? getDefaultValue() == null : getProfileDefaultValue(mode) == null; + } + protected String getLastModifiedTimeId() { return id + "_last_modified"; } @@ -337,7 +346,7 @@ public final String asString() { } @Override - public final String asStringModeValue(ApplicationMode m) { + public final String asStringModeValue(@Nullable ApplicationMode m) { T v = getModeValue(m); return toString(v); } diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java index 18de0a62473..ab37f74c2f9 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java @@ -45,8 +45,8 @@ public class QuickActionButtonState extends MapButtonState { public QuickActionButtonState(@NonNull OsmandApplication app, @NonNull String id) { super(app, id); this.visibilityPref = addPreference(settings.registerBooleanPreference(id + "_state", false)).makeProfile(); - this.namePref = addPreference(settings.registerStringPreference(id + "_name", null)).makeGlobal().makeShared(); - this.quickActionsPref = addPreference(settings.registerStringPreference(id + "_list", null)).makeGlobal().makeShared().storeLastModifiedTime(); + this.namePref = addPreference(settings.registerStringPreference(id + "_name", null)).makeGlobal(); + this.quickActionsPref = addPreference(settings.registerStringPreference(id + "_list", null)).makeGlobal().storeLastModifiedTime(); this.quickActionLayer = app.getOsmandMap().getMapLayers().getMapQuickActionLayer(); }