From 2838e408a964e16719439c8eadabd767a1a1c534 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 6 Apr 2021 16:30:35 +0300 Subject: [PATCH 01/37] Open track menu on short click --- .../net/osmand/plus/views/layers/GPXLayer.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index 69266746a9..ee4f2b5a5a 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -44,10 +44,10 @@ import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.PointImageDrawable; +import net.osmand.plus.itinerary.ItineraryGroup; import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint; import net.osmand.plus.mapcontextmenu.other.TrackChartPoints; import net.osmand.plus.mapmarkers.MapMarker; -import net.osmand.plus.itinerary.ItineraryGroup; import net.osmand.plus.mapmarkers.MapMarkersHelper; import net.osmand.plus.render.OsmandRenderer; import net.osmand.plus.render.OsmandRenderer.RenderingContext; @@ -56,6 +56,7 @@ import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.track.GradientScaleType; import net.osmand.plus.track.SaveGpxAsyncTask; import net.osmand.plus.track.TrackDrawInfo; +import net.osmand.plus.track.TrackMenuFragment; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.Renderable; @@ -1098,8 +1099,16 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } @Override - public boolean runExclusiveAction(Object o, boolean unknownLocation) { - return false; + public boolean runExclusiveAction(Object object, boolean unknownLocation) { + if (unknownLocation || !(object instanceof SelectedGpxPoint)) { + return false; + } + MapActivity mapActivity = (MapActivity) view.getContext(); + SelectedGpxPoint point = (SelectedGpxPoint) object; + WptPt wptPt = point.getSelectedPoint(); + TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), + new LatLon(wptPt.lat, wptPt.lon), null, null); + return true; } @Override From 01eb699e3b6eadf606595ce7ecd223f4b2d9d262 Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Thu, 8 Apr 2021 14:03:52 +0300 Subject: [PATCH 02/37] Plan route: Hide Widgets. Show: Compass, configure map, search --- .../osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java index 4c538ddba1..fd2d873a29 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java @@ -104,7 +104,6 @@ public class WidgetsVisibilityHelper { public boolean shouldHideCompass() { return mapActivity.shouldHideTopControls() || isTrackDetailsMenuOpened() - || isInMeasurementToolMode() || isInPlanRouteMode() || isInChoosingRoutesMode() || isInTrackAppearanceMode() @@ -116,7 +115,6 @@ public class WidgetsVisibilityHelper { public boolean shouldShowTopButtons() { return !mapActivity.shouldHideTopControls() && !isTrackDetailsMenuOpened() - && !isInMeasurementToolMode() && !isInPlanRouteMode() && !isInChoosingRoutesMode() && !isInTrackAppearanceMode() From 637f9f957cc673811f2ea031214b4a7b4889cf8f Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 8 Apr 2021 14:10:16 +0300 Subject: [PATCH 03/37] Open track point menu on long click --- .../plus/audionotes/AudioNotesLayer.java | 2 +- .../plus/mapillary/MapillaryVectorLayer.java | 2 +- .../measurementtool/MeasurementToolLayer.java | 2 +- .../net/osmand/plus/osmedit/OsmBugsLayer.java | 2 +- .../osmand/plus/osmedit/OsmEditsLayer.java | 2 +- .../osmand/plus/track/TrackMenuFragment.java | 2 +- .../plus/views/layers/AidlMapLayer.java | 2 +- .../plus/views/layers/ContextMenuLayer.java | 8 +++--- .../views/layers/DownloadedRegionsLayer.java | 2 +- .../plus/views/layers/FavouritesLayer.java | 2 +- .../osmand/plus/views/layers/GPXLayer.java | 26 +++++++++++++++++-- .../views/layers/ImpassableRoadsLayer.java | 2 +- .../plus/views/layers/MapMarkersLayer.java | 2 +- .../osmand/plus/views/layers/POIMapLayer.java | 2 +- .../plus/views/layers/PointLocationLayer.java | 2 +- .../views/layers/PointNavigationLayer.java | 2 +- .../osmand/plus/views/layers/RouteLayer.java | 2 +- .../views/layers/TransportStopsLayer.java | 2 +- 18 files changed, 44 insertions(+), 22 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java index ea0694aa8d..96ce49d8db 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java @@ -155,7 +155,7 @@ public class AudioNotesLayer extends OsmandMapLayer implements } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java index 51c12f07aa..09d7e7b7e4 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java @@ -316,7 +316,7 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java index 9d3f8812c4..7e6a1439ee 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java @@ -502,7 +502,7 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return isInMeasurementMode(); } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index f3865ad467..013ba37d5b 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -453,7 +453,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java index 59c07afbaa..a0fe1c1af2 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java @@ -180,7 +180,7 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java index e1a620269d..2d5c26313e 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java @@ -750,7 +750,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card @Override public int getStatusBarColorId() { - if (getViewY() <= getFullScreenTopPosY() || !isPortrait()) { + if (getView() != null && getViewY() <= getFullScreenTopPosY() || !isPortrait()) { return isNightMode() ? R.color.status_bar_color_dark : R.color.status_bar_color_light; } return -1; diff --git a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java index df110a14cb..8107943408 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java @@ -267,7 +267,7 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java index 5acf8999ba..4c2a63db9e 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java @@ -320,7 +320,7 @@ public class ContextMenuLayer extends OsmandMapLayer { @Override @RequiresPermission(Manifest.permission.VIBRATE) public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) { - if (disableLongPressOnMap()) { + if (disableLongPressOnMap(point, tileBox)) { return false; } if (pressedContextMarker(tileBox, point.x, point.y)) { @@ -877,7 +877,7 @@ public class ContextMenuLayer extends OsmandMapLayer { return res; } - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { if (mInChangeMarkerPositionMode || mInGpxDetailsMode || mInAddGpxPointMode || activity.getMapRouteInfoMenu().isVisible() || MapRouteInfoMenu.waypointsVisible || MapRouteInfoMenu.followTrackVisible) { @@ -886,7 +886,7 @@ public class ContextMenuLayer extends OsmandMapLayer { boolean res = false; for (OsmandMapLayer lt : view.getLayers()) { if (lt instanceof IContextMenuProvider) { - if (((IContextMenuProvider) lt).disableLongPressOnMap()) { + if (((IContextMenuProvider) lt).disableLongPressOnMap(point, tileBox)) { res = true; break; } @@ -1101,7 +1101,7 @@ public class ContextMenuLayer extends OsmandMapLayer { boolean disableSingleTap(); - boolean disableLongPressOnMap(); + boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox); boolean isObjectClickable(Object o); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java index 2993a90fef..a624b8412c 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java @@ -566,7 +566,7 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java index c2c00bcfe5..5e4f95f136 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java @@ -213,7 +213,7 @@ public class FavouritesLayer extends OsmandMapLayer implements IContextMenuProvi } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index ee4f2b5a5a..203e446c15 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -1089,8 +1089,16 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } @Override - public boolean disableLongPressOnMap() { - return isInTrackAppearanceMode(); + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { + if (isInTrackAppearanceMode()) { + return true; + } + if (tileBox.getZoom() >= START_ZOOM) { + List res = new ArrayList<>(); + getTracksFromPoint(tileBox, point, res); + return !Algorithms.isEmpty(res); + } + return false; } @Override @@ -1143,6 +1151,20 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM @Override public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) { + if (tileBox.getZoom() >= START_ZOOM) { + List trackPoints = new ArrayList<>(); + getTracksFromPoint(tileBox, point, trackPoints); + + if (!Algorithms.isEmpty(trackPoints)) { + MapActivity mapActivity = (MapActivity) view.getContext(); + SelectedGpxPoint selectedGpxPoint = (SelectedGpxPoint) trackPoints.get(0); + WptPt wptPt = selectedGpxPoint.getSelectedPoint(); + PointDescription description = getObjectName(selectedGpxPoint); + ContextMenuLayer contextMenuLayer = mapActivity.getMapLayers().getContextMenuLayer(); + contextMenuLayer.showContextMenu(new LatLon(wptPt.lat, wptPt.lon), description, selectedGpxPoint, this); + return true; + } + } return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java index 98a6bcb0dd..09f84ba6e3 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java @@ -128,7 +128,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java index 5c58dadd0d..a8d79b4519 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java @@ -497,7 +497,7 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return inPlanRouteMode; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java index 85b538b6c6..c264b67b0f 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java @@ -379,7 +379,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java index 3c60b1af49..2021f5d32f 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java @@ -226,7 +226,7 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java index e4398eab33..26899516e3 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java @@ -172,7 +172,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java index 71c74579a3..f73a44f0ba 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java @@ -802,7 +802,7 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return isInRouteLineAppearanceMode(); } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java index ba219f26b6..082b8998df 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java @@ -294,7 +294,7 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa } @Override - public boolean disableLongPressOnMap() { + public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) { return false; } From 733d152956f83c2ab8ce35f9b6ea51b326fc1907 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 8 Apr 2021 14:22:55 +0300 Subject: [PATCH 04/37] Fix map adjusting for track menu --- .../src/net/osmand/plus/track/TrackMenuFragment.java | 12 +++++++----- .../src/net/osmand/plus/views/layers/GPXLayer.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java index 2d5c26313e..dcb907f483 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java @@ -165,7 +165,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card private int menuTitleHeight; private int menuHeaderHeight; private int toolbarHeightPx; - private boolean mapPositionAdjusted; + private boolean adjustMapPosition = true; public enum TrackMenuType { @@ -596,7 +596,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card boolean backButtonVisible = !Algorithms.isEmpty(returnScreenName) && currentMenuState == MenuState.HALF_SCREEN; AndroidUiHelper.updateVisibility(backButtonContainer, backButtonVisible); } - if (currentMenuState != MenuState.FULL_SCREEN && (changed || !mapPositionAdjusted)) { + if (currentMenuState != MenuState.FULL_SCREEN && (changed || adjustMapPosition)) { adjustMapPosition(getMenuStatePosY(currentMenuState)); } } @@ -971,7 +971,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card if (r.left != 0 && r.right != 0) { mapActivity.getMapView().fitRectToMap(r.left, r.right, r.top, r.bottom, tileBoxWidthPx, tileBoxHeightPx, 0); } - mapPositionAdjusted = true; + adjustMapPosition = false; } } @@ -1318,7 +1318,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card public boolean processResult(SelectedGpxFile selectedGpxFile) { MapActivity mapActivity = mapActivityRef.get(); if (mapActivity != null && selectedGpxFile != null) { - showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName, callingFragmentTag); + showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName, callingFragmentTag, true); } return true; } @@ -1329,7 +1329,8 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card @NonNull SelectedGpxFile selectedGpxFile, @Nullable LatLon latLon, @Nullable String returnScreenName, - @Nullable String callingFragmentTag) { + @Nullable String callingFragmentTag, + boolean adjustMapPosition) { try { Bundle args = new Bundle(); args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuState.HEADER_ONLY); @@ -1340,6 +1341,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card fragment.setSelectedGpxFile(selectedGpxFile); fragment.setReturnScreenName(returnScreenName); fragment.setCallingFragmentTag(callingFragmentTag); + fragment.adjustMapPosition = adjustMapPosition; if (latLon != null) { fragment.setLatLon(latLon); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index 203e446c15..2171c4fc82 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -1115,7 +1115,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM SelectedGpxPoint point = (SelectedGpxPoint) object; WptPt wptPt = point.getSelectedPoint(); TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), - new LatLon(wptPt.lat, wptPt.lon), null, null); + new LatLon(wptPt.lat, wptPt.lon), null, null, false); return true; } From b1d3ebbaf1cba883e92098cd0eb66070f6073d94 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 8 Apr 2021 17:28:26 +0300 Subject: [PATCH 05/37] Display pin of point on track menu graphs --- .../net/osmand/plus/helpers/IntentHelper.java | 4 +- .../builders/SelectedGpxMenuBuilder.java | 8 +-- .../SelectedGpxMenuController.java | 19 +++++-- .../controllers/WptPtMenuController.java | 5 +- .../other/TrackDetailsMenu.java | 25 +++------- .../plus/myplaces/GPXItemPagerAdapter.java | 49 ++++++++----------- .../plus/search/QuickSearchListFragment.java | 2 +- .../net/osmand/plus/track/SegmentsCard.java | 23 ++++++++- .../osmand/plus/track/TrackMenuFragment.java | 28 ++++++++--- .../osmand/plus/views/layers/GPXLayer.java | 6 +-- 10 files changed, 96 insertions(+), 73 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java index ba48fe6899..6fce7b78a6 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/IntentHelper.java @@ -18,8 +18,8 @@ import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.PluginsFragment; import net.osmand.plus.dashboard.DashboardOnMap.DashboardType; -import net.osmand.plus.mapmarkers.MapMarkersDialogFragment; import net.osmand.plus.itinerary.ItineraryGroup; +import net.osmand.plus.mapmarkers.MapMarkersDialogFragment; import net.osmand.plus.mapsource.EditMapSourceDialogFragment; import net.osmand.plus.openplacereviews.OPRConstants; import net.osmand.plus.openplacereviews.OprAuthHelper.OprAuthorizationListener; @@ -259,7 +259,7 @@ public class IntentHelper { String path = intent.getStringExtra(TRACK_FILE_NAME); String name = intent.getStringExtra(RETURN_SCREEN_NAME); boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false); - TrackMenuFragment.showInstance(mapActivity, path, currentRecording, null, name, null); + TrackMenuFragment.showInstance(mapActivity, path, currentRecording, name, null); mapActivity.setIntent(null); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/SelectedGpxMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/SelectedGpxMenuBuilder.java index e4c2bc71ed..a87e35590e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/SelectedGpxMenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/SelectedGpxMenuBuilder.java @@ -153,9 +153,11 @@ public class SelectedGpxMenuBuilder extends MenuBuilder { OsmAndFormatter.getFormattedSpeed((float) selectedPoint.speed, app), 0, null, false, null, false, 0, false, false, false, null, false); } - buildRow(view, getThemedIcon(R.drawable.ic_action_relative_bearing), null, app.getString(R.string.shared_string_bearing), - OsmAndFormatter.getFormattedAzimuth(selectedGpxPoint.getBearing(), app), 0, null, - false, null, false, 0, false, false, false, null, false); + if (!Float.isNaN(selectedGpxPoint.getBearing())) { + buildRow(view, getThemedIcon(R.drawable.ic_action_relative_bearing), null, app.getString(R.string.shared_string_bearing), + OsmAndFormatter.getFormattedAzimuth(selectedGpxPoint.getBearing(), app), 0, null, + false, null, false, 0, false, false, false, null, false); + } } private void buildCategoryView(View view, String name) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/SelectedGpxMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/SelectedGpxMenuController.java index 80dd39f959..76b8ff1c7b 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/SelectedGpxMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/SelectedGpxMenuController.java @@ -43,11 +43,8 @@ public class SelectedGpxMenuController extends MenuController { @Override public void buttonPressed() { mapContextMenu.close(); - WptPt wptPt = selectedGpxPoint.selectedPoint; - LatLon latLon = new LatLon(wptPt.lat, wptPt.lon); SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile(); - String path = selectedGpxFile.getGpxFile().path; - TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), latLon, null, null); + TrackMenuFragment.showInstance(mapActivity, selectedGpxFile, selectedGpxPoint, null, null, false); } }; leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track); @@ -215,11 +212,15 @@ public class SelectedGpxMenuController extends MenuController { public static class SelectedGpxPoint { + private final WptPt prevPoint; + private final WptPt nextPoint; private final WptPt selectedPoint; private final SelectedGpxFile selectedGpxFile; private final float bearing; - public SelectedGpxPoint(SelectedGpxFile selectedGpxFile, WptPt selectedPoint, float bearing) { + public SelectedGpxPoint(SelectedGpxFile selectedGpxFile, WptPt selectedPoint, WptPt prevPoint, WptPt nextPoint, float bearing) { + this.prevPoint = prevPoint; + this.nextPoint = nextPoint; this.selectedPoint = selectedPoint; this.selectedGpxFile = selectedGpxFile; this.bearing = bearing; @@ -236,5 +237,13 @@ public class SelectedGpxMenuController extends MenuController { public float getBearing() { return bearing; } + + public WptPt getPrevPoint() { + return prevPoint; + } + + public WptPt getNextPoint() { + return nextPoint; + } } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/WptPtMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/WptPtMenuController.java index d9ad62cad9..95a266563c 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/WptPtMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/WptPtMenuController.java @@ -17,6 +17,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.PointImageDrawable; import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuController; +import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint; import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.mapmarkers.MapMarkersHelper; import net.osmand.plus.track.TrackMenuFragment; @@ -49,8 +50,8 @@ public class WptPtMenuController extends MenuController { GpxSelectionHelper selectionHelper = mapActivity.getMyApplication().getSelectedGpxHelper(); SelectedGpxFile selectedGpxFile = selectionHelper.getSelectedGPXFile(wpt); if (selectedGpxFile != null) { - String path = selectedGpxFile.getGpxFile().path; - TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), new LatLon(wpt.lon, wpt.lat), null, null); + SelectedGpxPoint gpxPoint = new SelectedGpxPoint(selectedGpxFile, wpt, null, null, Float.NaN); + TrackMenuFragment.showInstance(mapActivity, selectedGpxFile, gpxPoint, null, null, false); } } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenu.java index bf86142181..4ee35b6b36 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenu.java @@ -23,7 +23,6 @@ import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; import net.osmand.AndroidUtils; -import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; import net.osmand.GPXUtilities.TrkSegment; @@ -43,6 +42,7 @@ import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType; import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet; +import net.osmand.plus.myplaces.GPXItemPagerAdapter; import net.osmand.plus.views.layers.GPXLayer; import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory; import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController; @@ -299,18 +299,7 @@ public class TrackDetailsMenu { List ds = lineData != null ? lineData.getDataSets() : null; GpxDisplayItem gpxItem = getGpxItem(); if (ds != null && ds.size() > 0 && gpxItem != null) { - for (GPXUtilities.Track t : gpxItem.group.getGpx().tracks) { - for (TrkSegment s : t.segments) { - if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) { - segment = s; - break; - } - } - if (segment != null) { - break; - } - } - this.segment = segment; + this.segment = GPXItemPagerAdapter.getSegmentForAnalysis(gpxItem, gpxItem.analysis); } } return segment; @@ -755,21 +744,21 @@ public class TrackDetailsMenu { final List availableTypes = new ArrayList<>(); boolean hasSlopeChart = false; if (analysis.hasElevationData) { - availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE}); + availableTypes.add(new GPXDataSetType[] {GPXDataSetType.ALTITUDE}); if (gpxItem.chartAxisType != GPXDataSetAxisType.TIME && gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) { - availableTypes.add(new GPXDataSetType[]{GPXDataSetType.SLOPE}); + availableTypes.add(new GPXDataSetType[] {GPXDataSetType.SLOPE}); } } if (analysis.hasSpeedData) { - availableTypes.add(new GPXDataSetType[]{GPXDataSetType.SPEED}); + availableTypes.add(new GPXDataSetType[] {GPXDataSetType.SPEED}); } if (analysis.hasElevationData && gpxItem.chartAxisType != GPXDataSetAxisType.TIME && gpxItem.chartAxisType != GPXDataSetAxisType.TIMEOFDAY) { - availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE}); + availableTypes.add(new GPXDataSetType[] {GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE}); } if (analysis.hasElevationData && analysis.hasSpeedData) { - availableTypes.add(new GPXDataSetType[]{GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED}); + availableTypes.add(new GPXDataSetType[] {GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED}); } for (GPXDataSetType t : gpxItem.chartTypes) { diff --git a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java index 6f5083d8b2..38519a76fe 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java @@ -26,7 +26,6 @@ import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; import net.osmand.AndroidUtils; -import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; import net.osmand.GPXUtilities.Track; @@ -34,7 +33,6 @@ import net.osmand.GPXUtilities.TrkSegment; import net.osmand.GPXUtilities.WptPt; import net.osmand.plus.GPXDatabase.GpxDataItem; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; -import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; @@ -52,7 +50,6 @@ import net.osmand.plus.views.controls.WrapContentHeightViewPager.ViewAtPositionI import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; -import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -181,17 +178,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid LineData lineData = chart.getLineData(); List ds = lineData != null ? lineData.getDataSets() : null; if (ds != null && ds.size() > 0) { - for (GPXUtilities.Track t : gpxItem.group.getGpx().tracks) { - for (TrkSegment s : t.segments) { - if (s.points.size() > 0 && s.points.get(0).equals(analysis.locationStart)) { - segment = s; - break; - } - } - if (segment != null) { - break; - } - } + segment = getSegmentForAnalysis(gpxItem, analysis); } } return segment; @@ -741,6 +728,14 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid } if (gpxItem.chartHighlightPos != -1) { chart.highlightValue(gpxItem.chartHighlightPos, 0); + } else if (gpxItem.locationOnMap != null) { + LineData lineData = chart.getLineData(); + List ds = lineData != null ? lineData.getDataSets() : null; + if (ds != null && ds.size() > 0) { + OrderedLineDataSet dataSet = (OrderedLineDataSet) ds.get(0); + gpxItem.chartHighlightPos = (float) (gpxItem.locationOnMap.distance / dataSet.getDivX()); + chart.highlightValue(gpxItem.chartHighlightPos, 0); + } } } else { chart.highlightValue(null); @@ -818,18 +813,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid gpxItem.chartTypes[i] = orderedDataSet.getDataSetType(); } if (gpxItem.chartHighlightPos != -1) { - TrkSegment segment = null; - for (Track t : gpxItem.group.getGpx().tracks) { - for (TrkSegment s : t.segments) { - if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) { - segment = s; - break; - } - } - if (segment != null) { - break; - } - } + TrkSegment segment = getSegmentForAnalysis(gpxItem, gpxItem.analysis); if (segment != null) { OrderedLineDataSet dataSet = (OrderedLineDataSet) dataSets.get(0); float distance = gpxItem.chartHighlightPos * dataSet.getDivX(); @@ -849,7 +833,16 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid } } - private void openSplitIntervalScreen() { - actionsListener.openSplitInterval(gpxItem, getTrkSegment()); + public static TrkSegment getSegmentForAnalysis(GpxDisplayItem gpxItem, GPXTrackAnalysis analysis) { + for (Track track : gpxItem.group.getGpx().tracks) { + for (TrkSegment segment : track.segments) { + int size = segment.points.size(); + if (size > 0 && segment.points.get(0).equals(analysis.locationStart) + && segment.points.get(size - 1).equals(analysis.locationEnd)) { + return segment; + } + } + } + return null; } } diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java index 89e918284c..410f011154 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java @@ -306,7 +306,7 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment { SearchHistoryHelper.getInstance(app).addNewItemToHistory(gpxInfo); File file = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxInfo.getFileName()); String path = file.getAbsolutePath(); - TrackMenuFragment.showInstance(mapActivity, path, false, null, null, QuickSearchDialogFragment.TAG); + TrackMenuFragment.showInstance(mapActivity, path, false, null, QuickSearchDialogFragment.TAG); dialogFragment.dismiss(); } diff --git a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java index a3ed324543..6cddd3ffec 100644 --- a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java +++ b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java @@ -4,11 +4,14 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import net.osmand.GPXUtilities.TrkSegment; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint; import net.osmand.plus.myplaces.GPXItemPagerAdapter; import net.osmand.plus.myplaces.SegmentActionsListener; import net.osmand.plus.myplaces.SegmentGPXAdapter; @@ -23,12 +26,14 @@ public class SegmentsCard extends BaseCard { private TrackDisplayHelper displayHelper; private GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_SEGMENT}; private SegmentActionsListener listener; + private SelectedGpxPoint gpxPoint; public SegmentsCard(@NonNull MapActivity mapActivity, @NonNull TrackDisplayHelper displayHelper, - @NonNull SegmentActionsListener listener) { + @Nullable SelectedGpxPoint gpxPoint, @NonNull SegmentActionsListener listener) { super(mapActivity); - this.displayHelper = displayHelper; this.listener = listener; + this.displayHelper = displayHelper; + this.gpxPoint = gpxPoint; } @Override @@ -42,6 +47,8 @@ public class SegmentsCard extends BaseCard { container.removeAllViews(); List items = TrackDisplayHelper.flatten(displayHelper.getOriginalGroups(filterTypes)); for (GpxDisplayItem displayItem : items) { + updateLocationOnMap(displayItem); + View segmentView = SegmentGPXAdapter.createGpxTabsView(displayHelper, container, listener, nightMode); WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager); @@ -53,4 +60,16 @@ public class SegmentsCard extends BaseCard { container.addView(segmentView); } } + + private void updateLocationOnMap(GpxDisplayItem item) { + if (gpxPoint != null) { + TrkSegment segment = GPXItemPagerAdapter.getSegmentForAnalysis(item, item.analysis); + if (segment != null && (segment.points.contains(gpxPoint.getSelectedPoint()) + || segment.points.contains(gpxPoint.getPrevPoint()) + && segment.points.contains(gpxPoint.getNextPoint()))) { + item.locationOnMap = gpxPoint.getSelectedPoint(); + listener.onPointSelected(segment, item.locationOnMap.lat, item.locationOnMap.lon); + } + } + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java index dcb907f483..4e5e6f6e0c 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java @@ -39,6 +39,7 @@ import net.osmand.FileUtils; import net.osmand.FileUtils.RenameCallback; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.TrkSegment; +import net.osmand.GPXUtilities.WptPt; import net.osmand.Location; import net.osmand.PlatformUtil; import net.osmand.data.LatLon; @@ -66,6 +67,7 @@ import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.OpenGpxDetailsTask; +import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint; import net.osmand.plus.mapcontextmenu.other.TrackChartPoints; import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu; import net.osmand.plus.measurementtool.GpxData; @@ -154,6 +156,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card private String gpxTitle; private String returnScreenName; private String callingFragmentTag; + private SelectedGpxPoint gpxPoint; private TrackChartPoints trackChartPoints; private Float heading; @@ -320,6 +323,14 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card this.callingFragmentTag = callingFragmentTag; } + public void setGpxPoint(SelectedGpxPoint point) { + this.gpxPoint = point; + } + + public void setAdjustMapPosition(boolean adjustMapPosition) { + this.adjustMapPosition = adjustMapPosition; + } + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); @@ -506,7 +517,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card } cardsContainer.addView(segmentsCard.getView()); } else { - segmentsCard = new SegmentsCard(mapActivity, displayHelper, this); + segmentsCard = new SegmentsCard(mapActivity, displayHelper, gpxPoint, this); segmentsCard.setListener(this); cardsContainer.addView(segmentsCard.build(mapActivity)); } @@ -1258,7 +1269,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card boolean currentRecording = file == null; String path = file != null ? file.getAbsolutePath() : null; if (context instanceof MapActivity) { - TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null, null, null); + TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null, null); } else { Bundle bundle = new Bundle(); bundle.putString(TRACK_FILE_NAME, path); @@ -1309,7 +1320,6 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card public static void showInstance(@NonNull MapActivity mapActivity, @Nullable String path, boolean showCurrentTrack, - @Nullable final LatLon latLon, @Nullable final String returnScreenName, @Nullable final String callingFragmentTag) { final WeakReference mapActivityRef = new WeakReference<>(mapActivity); @@ -1318,7 +1328,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card public boolean processResult(SelectedGpxFile selectedGpxFile) { MapActivity mapActivity = mapActivityRef.get(); if (mapActivity != null && selectedGpxFile != null) { - showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName, callingFragmentTag, true); + showInstance(mapActivity, selectedGpxFile, null, returnScreenName, callingFragmentTag, true); } return true; } @@ -1327,7 +1337,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card public static boolean showInstance(@NonNull MapActivity mapActivity, @NonNull SelectedGpxFile selectedGpxFile, - @Nullable LatLon latLon, + @Nullable SelectedGpxPoint gpxPoint, @Nullable String returnScreenName, @Nullable String callingFragmentTag, boolean adjustMapPosition) { @@ -1341,10 +1351,12 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card fragment.setSelectedGpxFile(selectedGpxFile); fragment.setReturnScreenName(returnScreenName); fragment.setCallingFragmentTag(callingFragmentTag); - fragment.adjustMapPosition = adjustMapPosition; + fragment.setAdjustMapPosition(adjustMapPosition); - if (latLon != null) { - fragment.setLatLon(latLon); + if (gpxPoint != null) { + WptPt wptPt = gpxPoint.getSelectedPoint(); + fragment.setLatLon(new LatLon(wptPt.lat, wptPt.lon)); + fragment.setGpxPoint(gpxPoint); } else { QuadRect rect = selectedGpxFile.getGpxFile().getRect(); LatLon latLonRect = new LatLon(rect.centerY(), rect.centerX()); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index 2171c4fc82..24a6d244bb 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -1025,7 +1025,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM float bearing = prevPointLocation.bearingTo(nextPointLocation); - return new SelectedGpxPoint(selectedGpxFile, projectionPoint, bearing); + return new SelectedGpxPoint(selectedGpxFile, projectionPoint, prevPoint, nextPoint, bearing); } public static WptPt createProjectionPoint(WptPt prevPoint, WptPt nextPoint, LatLon latLon) { @@ -1113,9 +1113,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM } MapActivity mapActivity = (MapActivity) view.getContext(); SelectedGpxPoint point = (SelectedGpxPoint) object; - WptPt wptPt = point.getSelectedPoint(); - TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), - new LatLon(wptPt.lat, wptPt.lon), null, null, false); + TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), point, null, null, false); return true; } From 388be5c3ef02fe744f2c07b0b3935822fd69d4ae Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Thu, 8 Apr 2021 23:07:02 +0300 Subject: [PATCH 06/37] =?UTF-8?q?Hide=20widgets:=20Select=20track=20on=20t?= =?UTF-8?q?he=20map,=20tap=20on=20the=20"Edit"=20button,=20"Plan=20route"?= =?UTF-8?q?=20will=20be=20opened,=20map=20widgets=20will=20be=20visible.?= =?UTF-8?q?=20If=20you=20open=20Menu=20=E2=80=93=20Plan=20Route=20?= =?UTF-8?q?=E2=80=93=20Select=20the=20same=20track,=20widgets=20would=20be?= =?UTF-8?q?=20visible.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java | 2 +- .../plus/views/mapwidgets/WidgetsVisibilityHelper.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java index e1a620269d..ae32e57fef 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackMenuFragment.java @@ -841,9 +841,9 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card osmEditingPlugin.sendGPXFiles(mapActivity, this, gpxInfo); } } else if (buttonIndex == EDIT_BUTTON_INDEX) { + dismiss(); String fileName = Algorithms.getFileWithoutDirs(gpxFile.path); MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager(), fileName); - dismiss(); } else if (buttonIndex == RENAME_BUTTON_INDEX) { FileUtils.renameFile(mapActivity, new File(gpxFile.path), this, true); } else if (buttonIndex == CHANGE_FOLDER_BUTTON_INDEX) { diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java index fd2d873a29..72d8814a80 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/WidgetsVisibilityHelper.java @@ -21,10 +21,10 @@ import java.lang.ref.WeakReference; public class WidgetsVisibilityHelper { - private MapActivity mapActivity; - private OsmandSettings settings; - private RoutingHelper routingHelper; - private MapActivityLayers mapLayers; + private final MapActivity mapActivity; + private final OsmandSettings settings; + private final RoutingHelper routingHelper; + private final MapActivityLayers mapLayers; public WidgetsVisibilityHelper(@NonNull MapActivity mapActivity) { this.mapActivity = mapActivity; From 3560de5e3e82df9633ff49614bc6cc5bdb16c72f Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Fri, 9 Apr 2021 14:02:27 +0300 Subject: [PATCH 07/37] Review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use this arrow LTR: "▶", RTL: "◀". Check how it work with RTL. --- OsmAnd/res/values/strings.xml | 2 +- .../quickaction/actions/MapStyleAction.java | 9 ++++++--- .../plus/rastermaps/MapOverlayAction.java | 7 +++++-- .../osmand/plus/rastermaps/MapSourceAction.java | 17 ++++++++++------- .../plus/rastermaps/MapUnderlayAction.java | 9 ++++++--- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 97cfcf3a42..5bac9b0326 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -12,7 +12,7 @@ --> - %1$s → … + %1$s %2$s … Output User points Announce when exceeded diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java index 5838bfc1a2..c487cd494c 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java @@ -30,6 +30,8 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import static net.osmand.AndroidUtils.isLayoutRtl; + public class MapStyleAction extends SwitchableAction { @@ -54,7 +56,7 @@ public class MapStyleAction extends SwitchableAction { if (current != null) { return current.getName(); } else { - return RendererRegistry.DEFAULT_RENDER; + return RendererRegistry.DEFAULT_RENDER; } } @@ -77,7 +79,7 @@ public class MapStyleAction extends SwitchableAction { executeWithParams(activity, nextStyle); } else { Toast.makeText(activity, R.string.quick_action_need_to_add_item_to_list, - Toast.LENGTH_LONG).show(); + Toast.LENGTH_LONG).show(); } } @@ -249,7 +251,8 @@ public class MapStyleAction extends SwitchableAction { @Override public String getActionText(OsmandApplication application) { String currentSource = application.getSettings().RENDERER.get(); + String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource)); + return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java index 8190b6c995..cc01b93e24 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java @@ -15,19 +15,21 @@ import com.google.gson.reflect.TypeToken; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.quickaction.QuickActionType; import net.osmand.plus.quickaction.SwitchableAction; +import net.osmand.plus.settings.backend.OsmandSettings; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Map; +import static net.osmand.AndroidUtils.isLayoutRtl; + public class MapOverlayAction extends SwitchableAction> { private final static String KEY_OVERLAYS = "overlays"; @@ -229,7 +231,8 @@ public class MapOverlayAction extends SwitchableAction> { public String getActionText(OsmandApplication application) { String currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY : application.getSettings().MAP_OVERLAY.get(); + String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource)); + return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); } } diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java index d81b1f12ed..187e6e262a 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java @@ -15,13 +15,13 @@ import com.google.gson.reflect.TypeToken; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.quickaction.QuickAction; import net.osmand.plus.quickaction.QuickActionType; import net.osmand.plus.quickaction.SwitchableAction; +import net.osmand.plus.settings.backend.OsmandSettings; import java.lang.reflect.Type; import java.util.ArrayList; @@ -29,6 +29,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static net.osmand.AndroidUtils.isLayoutRtl; + public class MapSourceAction extends SwitchableAction> { public static final String LAYER_OSM_VECTOR = "LAYER_OSM_VECTOR"; @@ -98,8 +100,8 @@ public class MapSourceAction extends SwitchableAction> { } Pair currentSource = settings.MAP_ONLINE_DATA.get() - ? new Pair<>(settings.MAP_TILE_SOURCES.get(), settings.MAP_TILE_SOURCES.get()) - : new Pair<>(LAYER_OSM_VECTOR, activity.getString(R.string.vector_data)); + ? new Pair<>(settings.MAP_TILE_SOURCES.get(), settings.MAP_TILE_SOURCES.get()) + : new Pair<>(LAYER_OSM_VECTOR, activity.getString(R.string.vector_data)); Pair nextSource = sources.get(0); int index = sources.indexOf(currentSource); @@ -135,7 +137,7 @@ public class MapSourceAction extends SwitchableAction> { return item; } } - + @Override protected int getAddBtnText() { return R.string.quick_action_map_source_action; @@ -218,9 +220,10 @@ public class MapSourceAction extends SwitchableAction> { @Override public String getActionText(OsmandApplication application) { String currentSource = application.getSettings().MAP_ONLINE_DATA.get() - ? application.getSettings().MAP_TILE_SOURCES.get() - : application.getString(R.string.vector_data); + ? application.getSettings().MAP_TILE_SOURCES.get() + : application.getString(R.string.vector_data); + String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource)); + return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); } } diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java index ddb941e10b..fa7aae54c0 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java @@ -28,6 +28,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import static net.osmand.AndroidUtils.isLayoutRtl; + public class MapUnderlayAction extends SwitchableAction> { @@ -103,7 +105,7 @@ public class MapUnderlayAction extends SwitchableAction> { int index = -1; final String currentSource = settings.MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY - : settings.MAP_UNDERLAY.get(); + : settings.MAP_UNDERLAY.get(); for (int idx = 0; idx < sources.size(); idx++) { if (sources.get(idx).first.equals(currentSource)) { @@ -157,7 +159,7 @@ public class MapUnderlayAction extends SwitchableAction> { return item; } } - + @Override protected int getAddBtnText() { return R.string.quick_action_map_underlay_action; @@ -231,7 +233,8 @@ public class MapUnderlayAction extends SwitchableAction> { public String getActionText(OsmandApplication application) { String currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY : application.getSettings().MAP_UNDERLAY.get(); + String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource)); + return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); } } From 7f2472df54462c9c8cf28b825bf40be1229ae3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Fri, 9 Apr 2021 17:16:49 +0000 Subject: [PATCH 08/37] Translated using Weblate (Portuguese) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-pt/strings.xml | 374 +++++++++++++++---------------- 1 file changed, 187 insertions(+), 187 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index e1558ef4be..d805e31c37 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -61,7 +61,7 @@ Descarregar e gerir ficheiros de mapas offline armazenados no seu dispositivo. Gerir ficheiros de mapas Modo em segundo plano - Executar o serviço de segundo plano para usar OsmAnd enquanto o ecrã está desligado. + Executar o serviço em segundo plano para usar OsmAnd enquanto o ecrã está desligado. Caminho mais rápido Ativar para calcular a rota mais rápida ou desativar para a rota de poupança de combustível. Na ampliação {0}: descarrega {1} mosaicos ({2} MB) @@ -118,8 +118,8 @@ Tráfego Yandex Rota Favoritos - Anotações OSM (online) - Sobreposição de POI… + Notas OSM (online) + Camada superior de POI… Origem dos mapas… Camada de mapa Busca por POI @@ -140,7 +140,7 @@ Rastreia a sua posição enquanto o ecrã está desligado. Executar OsmAnd em segundo plano O serviço em segundo plano necessita aa ativação de um fornecedor da localização. - Especifique opções da rota. + Especifique as opções da rota. Navegação Ocultar filtro Mostrar filtro @@ -227,7 +227,7 @@ Descarregar {0} - {1} \? Já existem dados offline para {0} ({1}). Atualizá-los ({2})\? Endereço - Descarregado + A descarregar A descarregar a lista de regiões disponíveis… Não foi possível obter uma lista de regiões em https://osmand.net. Nada encontrado. Se não conseguir encontrar a sua região, pode fazê-lo por si mesmo (ver https://osmand.net). @@ -238,7 +238,7 @@ Iniciar orientação Meio de transporte: Por favor defina primeiro o destino - Navegação + Direções A aplicação do estado do GPS não está instalada. Pesquisar na loja de aplicações\? Horário de abertura A abrir o conjunto de alterações… @@ -263,7 +263,7 @@ Fechar A carregar dados… A ler dados locais… - A aplicação foi interrompida inesperadamente. O ficheiro de registo encontra-se em {0}. Por favor, relate o problema e inclua o ficheiro de registo. + O OsmAnd foi interrompido inesperadamente. O ficheiro de registo encontra-se em {0}. Por favor, relate o problema e inclua o ficheiro de registo. A gravar o ficheiro GPX… Concluído Utilizar a Internet para calcular uma rota. @@ -273,7 +273,7 @@ Especifique o idioma, descarregar/enviar dados. Dados Edição do OpenStreetMap - Nível de zoom de acordo com a sua velocidade (enquanto o mapa é sincronizado com a posição atual). + Nível de zoom automático de acordo com a sua velocidade (enquanto o mapa é sincronizado com a posição atual). Ampliação automática do mapa Outras configurações A vista do mapa e as configurações de navegação são guardadas por perfil. Defina aqui o seu. @@ -302,7 +302,7 @@ Mostrar ângulo de visão Ativar a visualização em 3D do mapa. Visualização em 3D - Mostrar a última sobreposição POI utilizada. + Mostrar a última camada superior de POI utilizada. Mostrar camada superior de POI Escolha a origem dos mosaicos de mapas online ou offline. Origem dos mosaicos do mapa @@ -341,7 +341,7 @@ Edifício Rua transversal Atualizar mapa - Criar POI + Criar POI OSM Sim Cancelar Aplicar @@ -359,7 +359,7 @@ Comentário adicionado Não foi possível adicionar um comentário. Editar POI - Criar POI + Criar POI OpenStreetMap Eliminar {0} (comentário)\? Eliminar POI Eliminar @@ -404,9 +404,9 @@ Configurar origens de mosaicos ou de mapas on-line. Aceda a muitos tipos de mapas on-line (também chamados de mosaico ou raster) pré-definidos do OpenStreetMap (como Mapnik) para imagens de satélite e camadas especiais, como mapas aquáticos, climáticos, geológicos, camadas de sombra de relevo, etc. \n -\nQuaisquer desses mapas podem ser usados como mapa principal (base) para ser mostrado no OsmAnd, ou como uma sobreposição ou sub-camada para outro mapa base (como o mapa off-line normal de OsmAnd). Para fazer qualquer sub-camada do mapa mais visível, certos elementos do mapa vetorial do OsmAnd podem facilmente ser ocultados através do menu \'Configurar mapa\'. +\nQuaisquer desses mapas podem ser usados como mapa principal (base) para ser mostrado no OsmAnd ou na camada superior ou inferior para outro mapa base (como o mapa off-line normal de OsmAnd). Para tornar qualquer camada inferior do mapa mais visível, certos elementos do mapa vetorial do OsmAnd podem facilmente ser ocultados através do menu \'Configurar mapa\'. \n -\nOs mosaicos dos mapas podem ser obtidos diretamente através de fontes on-line ou podem ser preparados para uso off-line (e copiados manualmente para o diretório de dados do OsmAnd) como uma base de dados sqlite, que pode ser produzido por uma variedade de ferramentas de terceiros para preparação de mapas. +\nOs mosaicos dos mapas podem ser obtidos diretamente através de origens on-line ou podem ser preparados para uso off-line (e copiados manualmente para o diretório de dados do OsmAnd) como uma base de dados sqlite, que pode ser produzido por uma variedade de ferramentas de terceiros para preparação de mapas. Mostra as configurações para ativar o rastreamento em segundo plano e a navegação, despertando periodicamente o dispositivo GPS (com o ecrã desligado). Mostra os recursos de acessibilidade do dispositivo disponíveis diretamente no OsmAnd. Facilita, por exemplo, o ajuste da velocidade da fala para vozes TTS, configurando a navegação no ecrã do teclado direcional, usando um trackball para controlo da ampliação, ou feedback texto-para-fala, por exemplo, para anunciar automaticamente a sua posição. Mostra configurações para recursos de desenvolvimento e depuração como testar ou simular roteamento, o desempenho de renderização do ecrã ou solicitação de voz. Essas configurações são destinadas a programadores e não são necessárias para o utilizador em geral. @@ -433,8 +433,8 @@ Ajuda Modo de acessibilidade Ativa os recursos para utilizadores deficientes. - Ligado - Desligado + Ativado + Desativado De acordo com a configuração do sistema Android Voltar ao menu Afastar @@ -480,19 +480,19 @@ Usar trackball para controlo da ampliação Preferências relacionadas com a acessibilidade. Acessibilidade - Sobreposições fluorescentes + Camada superior fluorescente Usar cores fluorescentes para mostrar trajetos e rotas. Edição offline Se a edição offline estiver ativada, as alterações serão primeiro gravadas localmente e enviadas por pedido, caso contrário, as alterações serão enviadas imediatamente. As alterações de POI dentro da aplicação não afetam os ficheiros de mapas descarregados; essas alterações são guardadas num ficheiro separado no seu dispositivo. A enviar… - {0} POI/anotações enviados + {0} POI/notas enviados Enviar todos Enviar edição para o OpenStreetMap Eliminar alteração Edição assíncrona de OSM: - POIs / anotações guardados no dispositivo - Mostrar e gerir POIs/anotações OSM guardados localmente. + POIs / notas guardados no dispositivo + Mostrar e gerir POIs/notas do OSM guardados localmente. Especifique o intervalo de rastreamento on-line. Intervalo de rastreamento on-line Especifique o endereço web com a sintaxe de parâmetros: lat={0}, lon={1}, data/hora={2}, hdop={3}, altitude={4}, velocidade={5}, bearing={6}. @@ -534,12 +534,12 @@ Auto-centrar a posição no mapa apenas durante a navegação. Mapa automaticamente centrado. Opções específicas para dados vetoriais - Sobreposição / sub-posição + Camada superior / inferior Configurações de origens dos mapas Definições de mapas vetoriais Eliminar %1$s\? Subúrbio - Aldeia + Aldeia;Lugar Sede de freguesia Sede de concelho Capital de distrito @@ -624,17 +624,17 @@ Áudio de notificação Áudio de mídia/navegação A aplicação não conseguiu descarregar a camada do mapa %1$s, se a tornar a instalar pode resolver o problema. - Ajustar a transparência da sobreposição. - Transparência da sobreposição + Ajustar a transparência da camada superior. + Transparência da camada superior Ajustar a transparência do mapa base. Transparência do mapa base - Mapa de camada inferior… - Mapa de camada inferior - Escolha o mapa da sub-camada + Mapa da camada inferior… + Mapa da camada inferior + Escolha o mapa da camada inferior Mapa da camada superior… Nenhum Mapa da camada superior - Escolha o mapa da sobreposição + Escolha o mapa da camada superior Mapa previamente instalado, as \"Configurações\" serão atualizadas. Selecione mosaicos de mapas para instalar ou atualizar. Não é possível executar a operação sem uma conexão com a Internet. @@ -678,9 +678,9 @@ A carregar compilações OsmAnd… Selecionar a compilação OsmAnd a instalar Instalar versão - GGG.GGGGG - GGG MM.MMM - GGG MM SS.S + DDD.DDDDD + DDD MM.MMM + DDD MM SS.S Tornar transparentes todas as características do terreno no mapa. Polígonos Modo de visualização @@ -900,13 +900,13 @@ Gravação Parar Iniciar - Anotações de áudio/vídeo + Notas de áudio/vídeo Extensão OsmAnd para curvas de nível off-line Medição da distância - Local para associar com a anotação ainda não está definido. \"Usar posição…\" para atribuir uma anotação para o local especificado. - Anotações de áudio + O local para associar à nota ainda não está definido. Toque em \"Usar posição…\" para atribuir uma nota ao local especificado. + Notas de áudio Faça notas de áudio/fotografia/vídeo durante uma viagem, usando um botão no ecrã do mapa ou diretamente do menu de contexto para qualquer posição no mapa. - Anotações de áudio/vídeo + Notas de áudio/vídeo Partes Curvas de nível Foto %1$s de %2$s @@ -950,14 +950,14 @@ Versão completa Descartar a rota\? Parar navegação - Ficheiro de alterações OSM gerado %1$s - Não foi possível fazer backup das alterações do OSM. - Fazer backup como mudança de OSM + Ficheiro de alterações OSM %1$s gerado + Não foi possível fazer a cópia de segurança das alterações do OSM. + Fazer uma cópia de segurança como alterações do OSM Eliminar ponto tempo precisão velocidade - altitude + elevação Ponto Nome do ficheiro GPX Ficheiro GPX guardado em {0} @@ -970,7 +970,7 @@ Europa, Ásia, América Latina e similares Reino Unido, Índia e similares Anunciar… - Configurar anúncio de nomes de ruas, avisos de trânsito (paragens forçadas, lombos de velocidade), avisos de radares de trânsito, limites de velocidade. + Configurar anúncio de nomes de ruas, avisos de trânsito (paragens forçadas, lombas de velocidade), avisos de radares de trânsito, limites de velocidade. Nomes das ruas (TTS) Limite de velocidade Radares de velocidade @@ -1009,7 +1009,7 @@ Usar sensor magnético Outro Curvas de nível - Mapas OsmAnd e Navegação + Mapas OsmAnd e navegação Mapas OsmAnd+ e Navegação A descarregar… Palavra-passe no OSM (opcional) @@ -1114,7 +1114,7 @@ Africâner Arménio Cálculo off-line do segmento de rota OsmAnd - Calcular rota de OsmAnd para o primeira e último segmeto de rota + Calcular rota de OsmAnd para o primeiro e último segmento da rota Usar o trajeto indicado para a navegação\? Adicionar como destino posterior Selecionar GPX… @@ -1135,10 +1135,10 @@ Evita autoestradas Peso máximo Especifique o limite de peso permitido para veículos em rotas. - Desde a versão KitKat que não se pode descarregar e atualizar mapas no local de armazenamento anterior (%s). Quer alterar para um local com permissão e copiar todos os ficheiros para lá\? + Desde a versão Android 4.4 (KitKat) que não se pode descarregar e atualizar mapas no local de armazenamento anterior (%s). Quer alterar para um local com permissão e copiar todos os ficheiros do OsmAnd para lá\? \n Nota 1: os ficheiros antigos permanecerão intocados (mas podem ser eliminados manualmente). \n Nota 2: não será possível partilhar ficheiros entre o OsmAnd e o OsmAnd+ no novo armazenamento. - Copiando o ficheiro (%s) para novo destino… + A copiar o ficheiro (%s) para novo destino… A copiar os ficheiros OsmAnd para o novo destino (%s)… A copiar ficheiros de dados do OsmAnd… Cálculo de rota OsmAnd off-line @@ -1162,7 +1162,7 @@ %1$s \nTrajeto %2$s O ficheiro GPX está vazio - Trajetos + Trilhos Favoritos Meus locais Catalão @@ -1203,7 +1203,7 @@ Cálculo rápido de rota falhou (%s), voltando para cálculo lento. Desativar encaminhamento de 2 fases para navegação automóvel. Desativar roteamento complexo - Avisos de voz pausam a reprodução de música. + Os avisos de voz pausam a reprodução de música. Pausar a música Partilhar rota como ficheiro GPX Rota partilhada via OsmAnd @@ -1218,10 +1218,10 @@ Formato inválido: %s Guardar como grupo de favoritos Definir destinos - Rótulos de sobreposições de POI + Nomes dos POI A carregar %1$s… Tempo atual - Ponto + Ponto de rota " \n \nToque longo para ver no mapa" @@ -1268,20 +1268,20 @@ Privacidade Pontos A minha posição - Inciar rotas alternativas selecionando estradas a serem evitadas + Gerar rota alternativa selecionando as estradas a serem evitadas Passadeiras Estilo das vias Predefinido Laranja Atlas de vias alemãs - Cruzamento de ferrovia + Passagem de nível Travessia de pedestres Passagens de nível Travessia pedestre Atlas de vias americanas Evitar regras de roteamento da v1.9 REMOVER A ETIQUETA - Não use as regras de roteamento introduzidas na v1.9. + Não usar as regras de roteamento introduzidas na versão 1.9. Descarregar mapas offline\? Descarregou %1$s mapas Descarregar novo mapa @@ -1290,7 +1290,7 @@ Todos os descarregamentos Atualizações Local - Não é possível descarregar, por favor, verifique sua conexão com a internet. + Não é possível descarregar, por favor, verifique a sua ligação à Internet. Todos os ficheiros foram atualizados Usar o renderizador OpenGL Início @@ -1336,7 +1336,7 @@ Últimos dados A-GPS descarregados: %1$s Em diversos países (Alemanha, França, Itália, etc.) o uso de alertas de radar é proibido por lei. O OsmAnd não assume qualquer responsabilidade se você violar a lei. Por favor, toque em \"sim\" apenas se você pode aceitar o uso deste recurso. Descarregar mapas - Preparando pista + Preparação de pista dias atrás Ver Norte @@ -1352,7 +1352,7 @@ Rotas de elétricos e comboios Iluminação pública Predefinido - Vias em alto contraste + Estradas em alto contraste OsmAnd fornece mapas de navegação globais e navegação off-line. Bem-vindo(a) Rota atual @@ -1407,9 +1407,9 @@ Ver mapa de esqui Renomeação falhou. Voltar ao mapa - Partilhar anotação + Partilhar nota Posição:\n Lat %1$s\n Lon %2$s - Anotações de A/V + Notas de áudio/vídeo Mapa on-line Apenas estradas Pistas de esqui @@ -1418,7 +1418,7 @@ Para mostrar mapas de esqui, tem de descarregar o mapa off-line especial. Para mostrar mapas náuticos, tem de descarregar o mapa off-line especial. Editar grupo - Vaga de estacionamento + Lugar de estacionamento Compilações Iniciar a navegação ao longo do trilho\? Paragens de transporte @@ -1434,7 +1434,7 @@ Mais detalhes Colorir edifícios por tipo Escala de montanhismo (SAC) - Sobreposição de símbolo de montanhismo + Camada superior de símbolos de montanhismo Mostrar rotas para bicicletas Edifícios Rotas de troleicarros @@ -1448,7 +1448,7 @@ Curvas de nível desativadas Adicionar novo Selecionar categoria - Definir unidades de velocidade. + Definir unidade de velocidade. Unidade de velocidade Milhas náuticas Quilómetros por hora @@ -1472,7 +1472,7 @@ Mostrar no arranque Copiado para a área de transferência Guardar off-line - Ponto de interesse OSM alterado + POI do OpenStreetMap alterado Escolha as estradas que quer evitar durante a navegação. Som Conceder acesso aos dados de localização. @@ -1495,17 +1495,17 @@ POI do OSM eliminado Abrir nota OSM Reabrir nota OSM - Anotação OSM comentada - Anotação OSM adicionada - Anotação OSM - Adicionar anotação OSM + Nota do OSM comentada + Nota do OSM adicionada + Nota do OSM + Adicionar nota ao OSM Adicionar comentário Reabrir nota - Fechar anotação - Anotação adicionada com sucesso - Não foi possível criar a anotação. - Anotação fechada com sucesso - Não foi possível fechar a anotação. + Fechar nota + Nota adicionada com sucesso + Não foi possível criar a nota. + Nota fechada com sucesso + Não foi possível fechar a nota. Enviar Eliminar ponto GPX\? Editar ponto GPX @@ -1591,7 +1591,7 @@ Tamil Tem dados guardados da Wikipédia que são antigos e incompatíveis. Quer arquivá-los\? Quer descarregar dados adicionais da Wikipédia (%1$s MB)\? - Serviço de localização não ativado. Ligá-lo\? + O serviço de localização não está ativado. Ativar\? Importar para o OsmAnd Ler o artigo completo (on-line) Wikipédia @@ -1602,8 +1602,8 @@ Cor pela afiliação da rede Cor pelo símbolo de caminhada de OSMC Sair - Tem a certeza que quer eliminar %1$d anotações\? - Esta opção muda o estilo de mapa do Osmand para a \"visão Touring \', uma visão especial de alto detalhe, para viajantes e motoristas profissionais. + Tem a certeza que quer eliminar %1$d notas\? + Esta opção muda o estilo de mapa do OsmAnd para a \"visão Touring\", uma visão especial de alto detalhe, para viajantes e motoristas profissionais. \n \nEsta visualização fornece, em qualquer zoom de mapa, a quantidade máxima de informação de viagem disponível no mapa (particularmente estradas, trilhos, caminhos, e marcas de orientação). \n @@ -1616,7 +1616,7 @@ \nEssa vista pode ser revertida, basta desativá-la, ou alterar o estilo de mapa em \'Configurar mapa\'. Estilo de estrada Nenhum desvio encontrado - Ligar o ecrã do dispositivo (se estiver desligado) ao fazer a aproximação a uma curva. + Ligar o ecrã do dispositivo (se estiver desligado) ao fazer a aproximação à próxima viragem. Barra de estado Painel direito Painel esquerdo @@ -1726,7 +1726,7 @@ \nPara ativar todos os novos recursos tem que reiniciar o OsmAnd. Parte da sua doação será enviada aos utilizadores OSM que submetem alterações ao mapa nessa região. Configurações da assinatura - Por favor primeiro compre a assinatura do OSM Live + Por favor primeiro compre a assinatura do OsmAnd Live Esta assinatura permite atualizações hora a hora de todos os mapas à volta do mundo. \nParte da renda regressa à comunidade do OpenStreetMap e paga-se para cada contribuição no OpenStreetMap. \nSe gosta do OsmAnd e do OpenStreetMap e quer apoiar e ser apoiado por eles, esta é a maneira perfeita para o fazer. @@ -1738,8 +1738,8 @@ \n (Apenas {2} MB disponível.) Descarregar {0} ficheiro(s)\? \n {3} MB é usado temporariamente, {1}. MB permanentemente. (De {2} MB.) - Envie a sua anotação OSM anonimamente ou utilizando o seu perfil do OpenStreetMap.org. - Enviar a anotação OSM + Envie a sua nota do OpenStreetMap anonimamente ou utilizando o seu perfil do OpenStreetMap.org. + Enviar a nota para o OSM Primeiro marcador de mapa Segundo marcador de mapa Barra de ferramentas @@ -1801,13 +1801,13 @@ Mover o mapa para alterar a posição do marcador Siga-nos - Saltar o descarregamento de mapas - Obter direções e descobrir novos lugares sem coneção à Internet + Ignorar o descarregamento de mapas + Obter direções e descobrir novos lugares sem ligação à Internet Ignorar Selecione outra região Alterar Cartão de memória - Não tem o mapa off-line instalado. Pode escolher um mapa na lista ou descarregar mapas mais tarde através do \'menu - %1$s\'. + Não tem nenhum mapa off-line instalado. Pode escolher um mapa na lista ou descarregar mapas mais tarde através do \'menu - %1$s\'. Marcadores Formato de coordenadas Usar teclado do sistema @@ -1819,7 +1819,7 @@ Adicionar a sua posição como ponto de partida para planear uma rota perfeita. A minha posição Terminar - Planear percurso + Planear rota Ordenar Introdução de coordenadas Exporte os seus marcadores para um ficheiro que pode especificar aqui: @@ -1912,12 +1912,12 @@ O seu destino está localizado numa área de acesso privado. Permitir uso de estradas privadas para esta viagem\? Reiniciar pesquisa Aumentar raio de pesquisa - Nada encontrado + Não foi encontrado nada Altere a pesquisa ou aumente o raio dela. - Botão para mostrar ou ocultar anotações OSM no mapa. + Botão para mostrar ou ocultar notas do OpenStreetMap no mapa. Ordenar por distância Pesquisar nos favoritos - Descarregar o mapa sobreposição de \'Sombras de relevo\' para mostrar as sombras verticais. + Descarregar o mapa da camada superior de \'Sombras de relevo\' para mostrar as sombras verticais. Instale a extensão \'Curvas de nível\' para mostrar áreas verticais graduadas. Ocultar a partir do nível de zoom Descarregue o mapa de \'Curvas de nível\' para usar nesta região. @@ -1937,7 +1937,7 @@ Selecionar rua em %1$s Escreva morada - Digite cidade/vila/localidade + Digite a cidade, vila ou localidade Escreva código postal Cidades próximas Selecionar cidade @@ -1952,13 +1952,13 @@ Um botão para fazer com que o ecrã centralize o destino da rota, um destino selecionado anteriormente tornar-se-ia o último destino intermédio. Um botão para fazer com que o ecrã centralize o novo destino da rota, substituindo o destino selecionado anteriormente (se houver). Um botão para fazer com que o ecrã centralize o primeiro destino intermédio. - Sem sobreposição - Sem subposição + Sem camada superior + Sem camada inferior Erro Assine a nossa lista de e-mail sobre descontos da aplicação e ganhe mais 3 descarregamentos de mapas! Curvas de nível de profundidade marítima e seamarks. Muito obrigado por comprar \'Contornos de profundidade náutica\' - Contornos de profundidade náutica + Curvas de profundidades náuticas Pontos de profundidade náutica do hemisfério sul Pontos de profundidade náutica do hemisfério norte Contornos de profundidade náutica @@ -1966,7 +1966,7 @@ Analisar no mapa Visível Restaurar compras - Fontes do mapa + Origens do mapa Circulação pela direita Automático Não enviar estatísticas anónimas de utilização da aplicação @@ -2000,7 +2000,7 @@ Selecionar diretório do ficheiro GPX Não foi possível mover o ficheiro. Mover - Percursos + Trilhos Estilo de condução Elevação do percurso Descida @@ -2075,11 +2075,11 @@ Guardar filtro Eliminar filtro Novo filtro - Por favor introduza o nome do novo filtro, este vai ser adicionado ao seu separador \'Categorias\'. - A assinatura é cobrada período selecionado. Cancele a assinatura no Google Play a qualquer altura. - Doação para a comunidade OSM + Por favor introduza o nome do novo filtro, este vai ser adicionado ao separador \'Categorias\'. + A assinatura é cobrada no período selecionado. Cancele a assinatura no Google Play a qualquer altura. + Doação para a comunidade OpenStreetMap Parte da sua doação é enviada aos colaboradores do OSM. O custo da assinatura permanece o mesmo. - Subscrição permite atualizações a cada hora, diárias, semanais, e descarregamentos ilimitados de todos os mapas globalmente. + A subscrição permite atualizações a cada hora, diárias, semanais e descarregamentos ilimitados de todos os mapas globalmente. Obter Comprar por %1$s Obter descarregamentos ilimitados de mapas, adicionando atualizações semanais, diárias e a cada hora. @@ -2124,7 +2124,7 @@ Adicionou %1$s pontos. Introduza um nome do ficheiro e toque em \"Guardar\". Por favor envie uma captura de ecrã desta notificação para support@osmand.net Editar ações - Adquira OsmAnd Live para desbloquear todos as funcionalidades: atualizações de mapas diárias com descarregamentos ilimitados, todos as extensões pagas e gratuitas, Wikipédia, Wikivoyage e muito mais. + Adquira o OsmAnd Live para desbloquear todas as funcionalidades: atualizações diárias de mapas com descarregamentos ilimitados, todas as extensões pagas e gratuitas, Wikipédia, Wikivoyage e muito mais. Alteração do estilo padrão para aumentar o contraste de caminhos pedestres e ciclovias. Usa cores clássicas do Mapnik. Marcador Esconder descrição completa @@ -2140,7 +2140,7 @@ Editar marcador de mapa Aplicação de terceiros Primeiro especificar cidade/sítio/localidade - Plano e preços + Planos e preços Mensalmente A cada três meses Anualmente @@ -2152,9 +2152,9 @@ Renova trimestralmente Renova anualmente %1$.2f %2$s - Período de pagamento: - As doações ajudam a financiar a cartografia do OSM. - Para condução todo-o-terreno com base no estilo \'Topo\' e para utilização com imagens de satélite verdes como base. Redução da espessura da estrada principal, aumento da espessura dos trajetos, caminhos, ciclovias e outras vias. + Frequência do pagamento: + As doações ajudam a financiar a cartografia do OpenStreetMap. + Para condução todo-o-terreno com base no estilo \'Topo\' e para utilização com imagens de satélite verdes na camada inferior. Redução da espessura das estradas principais, aumento da espessura dos trajetos, caminhos, ciclovias e outras vias. Para navegação náutica. Características: bóias, faróis, cursos de rios, vias marítimas e marcas, portos, serviços de navegação, contornos de profundidade. Para esquiar. Contém pistas de esqui, elevadores, pistas de cross country, etc. Escurece objetos de mapa secundários. Estilo simples e contrastante para a navegação do carro. É suave para os olhos no modo noturno. Características principais: curvas de nível, estradas contrastantes de estilo laranja, menos objetos secundários do mapa para evitar distrações. @@ -2190,15 +2190,15 @@ Bem-vindo ao beta aberto Guias de viagem Guias para os lugares mais interessantes do mundo dentro do OsmAnd, sem uma conexão com a Internet. - Atualizações de mapa mensais - Atualizações de mapa a cada hora + Atualizações de mapas mensais + Atualizações de mapas a cada hora Compra na aplicação Pagamento de uma só vez Uma vez comprado, estará sempre disponível para si. Comprar - %1$s Wikivoyage offline Descarregamentos ilimitados - A Wikipédia offline + Wikipédia offline Mapas de curvas de nível e de sombras de relevo Desbloquear todas as características de OsmAnd Escolher plano @@ -2255,23 +2255,23 @@ Digite o nome do ficheiro. Erro ao importar mapa Mapa importado - Fazer este o ponto de partida + Usar como ponto de partida Atual - Adiciona paragem intermédia - Adiciona paragem inicial - Mover o destino para cima e criá-lo - Mostrar anotações fechadas - Mostrar ou ocultar anotações do OSM no mapa. + Adicionar paragem intermédia + Adicionar paragem inicial + Mover destino para cima e criar destino + Mostrar notas fechadas + Mostrar ou ocultar notas do OpenStreetMap no mapa. GPX - adequado para exportar para o JOSM ou outros editores do OSM. OSC - adequado para exportar para o OSM. Ficheiro GPX Ficheiro OSC Selecione o tipo de ficheiro - Selecione a categoria de exportação: anotações do OSM, POIs ou ambos. + Selecione a categoria de exportação: notas do OSM, POIs ou ambos. Todos os dados - Anotações do OSM + Notas do OSM Abre amanhã às - Etiquetas de POI + Nomes dos POI Sem nome O que há aqui: estacionado em @@ -2286,8 +2286,8 @@ Abre às Abre às Ações adicionais - Ficheiro GPX com coordenadas e dados das anotações selecionadas. - Ficheiro GPX com coordenadas e dados de todas as anotações. + Ficheiro GPX com coordenadas e dados das notas selecionadas. + Ficheiro GPX com coordenadas e dados de todas as notas. Altere a sua pesquisa. Ações Marcador @@ -2299,9 +2299,9 @@ Marcador %s ativado. Toque num marcador no mapa para movê-lo para a parte superior dos marcadores ativos sem abrir o menu de contexto. \'Um toque\' ativo - Faça anotações! - Adicione anotações de áudio, vídeo ou foto em qualquer ponto do mapa, usando o widget ou o menu de contexto. - Anotações de A/V por data + Faça notas! + Adicione notas de áudio, vídeo ou foto em qualquer ponto do mapa, usando o widget ou o menu de contexto. + Notas de áudio/vídeo por data Por data Por tipo Procurando trilhos com pontos de rota @@ -2363,7 +2363,7 @@ Distrito Bairro Procurar - Aberto todos dias por 24 horas + Aberto 24/7 Formato de coordenadas Formato para as coordenadas geográficas. Autocarro @@ -2442,7 +2442,7 @@ Máx/mín Mín/máx Excursões - Todos + Tudo Descarregar mapas que faltam %1$s (%2$d MB)\? Explorar o mapa Carro @@ -2451,7 +2451,7 @@ Continuar a navegação Pausar navegação Manter - Idioma preferido para os rótulos no mapa (se indisponível será usado o inglês ou nomes locais). + Idioma preferido para os nomes dos POI no mapa (se indisponível será usado o inglês ou o nome local). Idioma preferido do mapa Nomes locais Suaíli @@ -2495,7 +2495,7 @@ Especifique a altura permitida do veículo nas rotas. Para longas distâncias: por favor adicione destinos intermédios se nenhuma rota for encontrada dentro de 10 minutos. Austrália - Hora de chegada intermediária + Hora de chegada intermédia Wikipédia Renderizar caminhos de acordo com a escala de SAC. Renderizar caminhos de acordo com traços OSMC. @@ -2717,7 +2717,7 @@ Um botão para adicionar um POI no local do centro do ecrã. Um botão para ativar ou desativar a orientação por voz durante a navegação. Um botão para adicionar um lugar de estacionamento no local do centro do ecrã. - Mostrar um diálogo temporal + Mostrar uma janela temporal " gravado em " Local O nome da ação rápida foi alterado para %1$s para evitar duplicação. @@ -2742,13 +2742,13 @@ Preencha todos os parâmetros Estilos de mapa Mudar camada superior de mapa - Camada superior de mapa - Adicionar sobreposição - A sobreposição de mapa foi alterada para \"%s\". - A sub-camada de mapa foi alterada para \"%s\". - Mudar camada inferior de mapa - Camadas inferiores de mapa - Adicionar camada inferior + Mapas na camada superior + Adicionar camada superior + O mapa da camada superior foi alterado para \"%s\". + O mapa da camada inferior foi alterado para \"%s\". + Mudar mapa da camada inferior + Mapas das camadas inferiores + Adicionar mapa da camada inferior Alterar origem do mapa Origens dos mapas Adicionar origem do mapa @@ -2772,7 +2772,7 @@ Mover ponto Destinatários OSM Total de doações - desligado + fechado Inverno e esqui Vista de turismo Náutico @@ -2806,7 +2806,7 @@ Capacidade Largura Altura - Defina destino + Definir destino Adicionar ponto intermédio Defina o ponto de partida Ponto intermédio @@ -2832,7 +2832,7 @@ A pé Reduza o comprimento da etiqueta \"%s\" para menos de 255 caracteres. Comprimento do valor de \"%s - Leia mais sobre o roteamento do OsmAnd no nosso blog. + Leia mais sobre o roteamento do OsmAnd no nosso blogue. A navegação em transportes públicos está atualmente em testes beta, podem ocorrer erros e imprecisões. Adicionar ponto intermédio %1$d transbordos @@ -2851,7 +2851,7 @@ Neve Asfalto Pavimentado - Betão + Cimento Pedras irregulares Pedras de pavimentação Pedra @@ -2897,7 +2897,7 @@ Sem táxis partilhados Evita táxis partilhados Sem comboios - Evita comboios + Evitar comboios Sem metropolitanos Evitar metropolitanos subterrâneos e de superfície Sem balsas/ferries @@ -2915,8 +2915,8 @@ Superfície Suavidade do piso Inclinação - Sem paralelepípedos ou pavimentos - Evita paralelepípedo e pavimentos + Sem pedras irregulares ou paralelos + Evita pedras irregulares e paralelos Enviar registo Embarque na paragem %1$d ficheiros movidos (%2$s). @@ -2925,7 +2925,7 @@ %1$d ficheiros (%2$s) estão presentes na localização anterior \'%3$s\'. Mover mapas Não mover - A rota a pé é de cerca de %1$s e pode ser mais rápida do que através de transportes públicos + O percurso a pé é aproximadamente de %1$s e pode ser mais rápido do que o transporte público Infelizmente, o OsmAnd não conseguiu encontrar uma rota adequada para a sua configuração. Tente a navegação pedestre. Tente alterar a configuração. @@ -2970,7 +2970,7 @@ Perfil de base Selecione o tipo de navegação Por favor selecione o tipo de navegação para o novo perfil da aplicação - Entrar o nome do perfil + Introduzir o nome do perfil É necessário especificar primeiro um nome de perfil. Nome duplicado Já existe um perfil com esse nome @@ -2991,22 +2991,22 @@ Geocodificação Linha reta BRouter (offline) - Roteamento de OsmAnd + Roteamento OsmAnd Perfil de roteamento personalizado Roteamento especial Roteamento de terceiros Escolha os perfis mostrados na aplicação. Perfis da aplicação Adicione pelo menos um item à lista nas configurações de \'Ação rápida\' - Esqui alpino e downhill + Esqui alpino e descendente Pistas para esqui alpino ou downhill e acesso a teleféricos de esqui. - Cross Country e esqui nórdico + Esqui de travessia e nórdico Trilhos para esqui nórdico ou cross-country. Passeios de esqui Rotas para excursões de esqui. Trenó Pistas para trenó. - Permitir rotas intermediárias + Permitir rotas intermédias Rotas mais difíceis com secções mais íngremes. Geralmente, contém alguns obstáculos que deviam ser evitados. Permitir rotas avançadas Rotas difíceis, com obstáculos perigosos e secções íngremes. @@ -3055,7 +3055,7 @@ \n - Correções de outros erros \n \n - Transportador pessoal + Transporte pessoal Monoroda Scooter Precisão horizontal: %1$s, vertical: %2$s @@ -3096,8 +3096,8 @@ %s está gravado Abrir trilho O trilho %s está gravado - Mostrar zonas de baixa emissão no mapa. Não afeta o roteamento. - Mostrar zonas de baixa emissão + Mostrar zonas de baixas emissões (proibida circulação de veículos poluentes) no mapa. Não afeta o roteamento. + Mostrar zonas de baixas emissões Considerar limitações temporárias Padrão Rota: distância %1$s, tempo do roteador %2$s \nCálculo: %3$.1f seg, %4$d estradas, %5$d telhas) @@ -3118,7 +3118,7 @@ Anos Três meses Grátis - Obter %1$d %2$s de %3$s desconto. + Obter %1$d %2$s com %3$s de desconto. depois %1$s Cancelar subscrição %1$s - Poupe %2$s @@ -3209,7 +3209,7 @@ Lado a lado Conexão Calcular - Uso de OsmAnd + Utilização do OsmAnd Mosaicos Mapas %1$s TB @@ -3266,7 +3266,7 @@ Grosso Para desertos e outras áreas pouco povoadas. Mais detalhado. Ícone de posição durante a movimentação - Ícone de posição em repouso + Ícone de posição quando parado Tocar em \'Aplicar\' eliminará os perfis removidos de forma permanente. Perfil principal Selecionar a cor @@ -3287,7 +3287,7 @@ Adicione um perfil abrindo o seu ficheiro com OsmAnd. %1$s erro de importação: %2$s %1$s importado(s). - Trocar %1$s com %2$s + Trocar %1$s por %2$s Ponto de partida Trilho gravado O nome do ficheiro está vazio @@ -3297,7 +3297,7 @@ Limpar %1$s\? Diálogo de descarregar mapas Diálogos e notificações - Controlar popups, diálogos e notificações. + Controlar janelas sobrepostas, diálogos e notificações. Redes de nós Mapas sugeridos Estes mapas são necessários para a extensão. @@ -3342,16 +3342,16 @@ Recalcular rota em caso de desvio Selecione a distância após a qual o percurso será recalculado. A rota será recalculada se a distância da rota até o local atual for maior que o valor selecionado. - Todos os dados de %1$s são importados. Pode usar os botões abaixo para abrir a parte necessária da aplicação para gerá-lo. - Importação concluída + Todos os dados de %1$s são importados. Pode usar os botões abaixo para abrir a parte necessária da aplicação para o gerir. + Importação terminada Itens adicionados - O OsmAnd verifica %1$s se existem duplicados nos itens existentes na aplicação. + O OsmAnd verifica %1$s para ver se existem duplicados nos itens existentes na aplicação. \n \nPode demorar algum tempo. A importar - Importando dados de %1$s + A importar dados de %1$s Tem a certeza que quer limpar os dados gravados\? - Não foi possível fazer o backup do perfil. + Não foi possível fazer a cópia de segurança do perfil. Gravando novo perfil Restaurar todas as configurações de perfil\? Todas as configurações do perfil serão restauradas para o seu estado original após a criação/importação deste perfil. @@ -3359,8 +3359,8 @@ Estilo de renderização Selecione os dados a serem importados. Alguns itens já existem - OsmAnd já possui elementos com os mesmos nomes dos importados. -\n + O OsmAnd já tem elementos com os mesmos nomes dos importados. +\n \nSelecione uma ação. Os itens importados serão adicionados com prefixo Manter os dois @@ -3431,7 +3431,7 @@ Nascer do sol em %1$s Pôr do sol em %1$s %1$s/%2$s - Todas as configurações do perfil foram repostas nos valores de origem. + Todas as configurações do perfil foram repostas para os valores de origem. Todas as configurações da extensão foram repostas para os valores de origem. Adicionar categoria personalizada Disponível @@ -3452,21 +3452,21 @@ Endereço da Web Intervalo de rastreamento Memória intermédia - Recomendação: uma configuração de 5 metros pode funcionar bem se não precisar capturar detalhes mais refinados do que isso e não quer capturar dados explicitamente enquanto estiver em repouso. - Efeitos colaterais: períodos em repouso não são registados em absoluto ou em apenas um ponto cada. Pequenos movimentos (do mundo real) (por exemplo, de lado, para marcar um possível desvio na sua viagem) podem ser filtrados. O seu ficheiro contém menos informações para pós-processamento e possui estatísticas piores ao filtrar pontos obviamente redundantes no tempo de gravação, mantendo potencialmente artefactos causados por má receção ou efeitos de chipset GPS. + Recomendação: uma configuração de 5 metros pode funcionar bem se não precisar capturar detalhes mais refinados do que isso e não quer capturar dados explicitamente enquanto estiver parado. + Efeitos colaterais: os períodos em que está parado não são registados em absoluto ou em apenas um ponto cada. Pequenos movimentos (do mundo real) (por exemplo, de lado, para marcar um possível desvio na sua viagem) podem ser filtrados. O seu ficheiro contém menos informações para pós-processamento e possui estatísticas piores ao filtrar pontos obviamente redundantes no tempo de gravação, mantendo potencialmente artefactos causados por má receção ou efeitos de chipset GPS. Este filtro evita que pontos duplicados sejam gravados onde muito pouco movimento real possa ter ocorrido, cria uma aparência espacial mais agradável dos trilhos que não são processados posteriormente. Observação: se o GPS estava desligado imediatamente antes de uma gravação, o primeiro ponto medido pode ter uma precisão diminuída; portanto, no nosso código, podemos esperar um segundo antes da gravação de um ponto (ou gravar o melhor de três pontos consecutivos, etc.), mas isso ainda não foi implementado. Recomendação: é difícil prever o que será gravado e o que não será, talvez seja melhor desativar este filtro. Efeito colateral: como resultado da filtragem por precisão, os pontos podem estar totalmente ausentes por ex. debaixo de pontes, sob árvores, entre prédios altos ou com certas condições climáticas. Isto irá registar apenas pontos medidos com uma indicação de precisão mínima (em metros/pés, conforme reportado pelo Android para o seu chipset). A precisão é a proximidade das medições à posição verdadeira e não está diretamente relacionada com a precisão, que é a dispersão de medições repetidas. Observação: verificação de velocidade > 0: A maioria dos chipsets GPS relata uma velocidade apenas se o algoritmo determinar que esteja em movimento e nenhum se não estiver. Portanto, o uso da configuração > 0 neste filtro usa a deteção de movimento do chipset GPS. Mas mesmo que não seja filtrado no momento da gravação, ainda usamos esse recurso na nossa análise GPX para determinar a Distância corrigida, ou seja, o valor mostrado nesse campo é a distância registada enquanto estiver em movimento. - Recomendação: tente primeiro usar a deteção de movimento através do filtro de deslocamento mínimo de registo (B), pode produzir melhores resultados e você perderá menos dados. Se os seus trilhos permanecerem irregulares em baixas velocidades, tente valores diferentes de zero. Observe que algumas medições podem não relatar nenhuma velocidade (alguns métodos baseados em rede); nesse caso, não gravaria nada. + Recomendação: tente primeiro usar a deteção de movimento através do filtro de deslocamento mínimo de registo (B), pois pode produzir melhores resultados e perderá menos dados. Se os trilhos permanecerem irregulares a velocidades baixas, tente valores diferentes de zero. Note que algumas medições podem não relatar nenhuma velocidade (em alguns métodos baseados em rede); nesse caso, não gravaria nada. Efeito colateral: o trilho estará ausente de todas as secções em que o critério de velocidade mínima não foi atendido (por exemplo, onde empurra a sua bicicleta por uma colina íngreme). Além disso, não haverá informações sobre períodos de descanso, como intervalos. Isso afeta qualquer análise ou pós-processamento, como ao tentar determinar a duração total da sua viagem, o tempo em movimento ou a sua velocidade média. - Este é um filtro de corte de baixa velocidade para não registar pontos abaixo de uma determinada velocidade. Isso pode fazer com que os trilhos gravados pareçam mais suaves quando visualizados no mapa. + Isto é um filtro de corte de baixa velocidade para não registar pontos abaixo de uma determinada velocidade. Isto pode fazer com que os trilhos gravados pareçam mais suaves quando visualizados no mapa. É necessária permissão para usar esta opção. Não foi possível analisar a intenção geográfica \'%s\'. Verifique e partilhe registos detalhados da aplicação - Ícone mostrado em repouso. + Ícone mostrado quando parado. Ícone mostrado ao navegar ou mover. Veja todas as suas edições ainda não enviadas ou bugs OSM em %1$s. Os pontos enviados não vão aparecer no OsmAnd. Edição OSM @@ -3474,9 +3474,9 @@ Utilizador e palavra-passe Anunciar Recálculo da rota - Anotações fotográficas - Anotações de vídeo - Pode encontrar todas as suas anotações em %1$s. + Notas fotográficas + Notas de vídeo + Pode encontrar todas as suas notas em %1$s. Pode encontrar todos os seus trilhos gravados em %1$s ou na pasta OsmAnd. Precisão de registo Rastreamento online @@ -3496,7 +3496,7 @@ Moto de neve Extensão personalizada OsmAnd Alterações aplicadas ao perfil \'%1$s\'. - Não foi possível ler de \'%1$s\'. + Não foi possível ler \'%1$s\'. Não foi possível gravar em \'%1$s\'. Não foi possível importar de \'%1$s\'. Personalize a quantidade de itens em \"Gaveta\", \"Configurar Mapa\" e \"Menu de Contexto\". @@ -3511,7 +3511,7 @@ Elementos abaixo deste ponto separados por um divisor. Ocultado Estes itens não aparecem no menu, mas as opções ou extensões representadas continuarão a funcionar. - Ocultar configurações redefine-os ao seu estado original. + Ocultar configurações redefine-os para o estado original delas. Apenas tem 4 botões. Principais ações Pode mover itens apenas dentro desta categoria. @@ -3524,7 +3524,7 @@ São necessários mapas adicionais para visualizar os POIs da Wikipédia no mapa. Selecione as línguas dos artigos da Wikipédia no mapa. Mude para qualquer língua disponível enquanto lê o artigo. OsmAnd + Mapillary - Rastreador do OsmAnd + OsmAnd Tracker Ação rápida Régua radial Medir distância @@ -3574,7 +3574,7 @@ Lombardo Cor personalizada Combinar categorias de POI de categorias diferentes. Toque em trocar para selecionar tudo, toque no lado esquerdo para seleção da categoria. - Botão que mostra ou oculta o transporte público no mapa. + Botão que mostra ou oculta os transportes públicos no mapa. Criar ou editar um POI Posições de estacionamento Adicionar ou editar um favorito @@ -3605,24 +3605,24 @@ Um ficheiro de imagem por mosaico Ficheiro SQLiteDB Forneça um nome para a origem do mapa on-line. - Insira ou cole a URL para a fonte on-line. - Editar fonte on-line + Insira ou cole a URL para a origem on-line. + Editar origem on-line Tempo de validade Projeção de Mercator Formato de armazenamento Defina um nível mínimo e máximo de ampliação para mostrar ou carregar o mapa on-line. - Afeta o ecrã quando usado como mapa ou sobreposição/segundo plano. + Afeta o ecrã quando usado como mapa ou na camada superior ou inferior. \n \n%1$s: o mapa está limitado ao intervalo de nível de ampliação selecionado. \n \n%2$s são os níveis em que os mosaicos originais serão visíveis, o aumento ou redução de escala ocorrerá fora destes valores. - Os mosaicos serão descarregados novamente após um tempo especificado em minutos. Deixe este campo vazio para nunca atualizar os mosaicos desta fonte. + Os mosaicos serão descarregados novamente após um tempo especificado em minutos. Deixe este campo vazio para nunca atualizar os mosaicos desta origem. \n \nUm dia são 1 440 minutos. \nUma semana são 10 080 minutos. \nUm mês são 43 829 minutos. Escolha como os mosaicos descarregados serão armazenados. - Padrão de tempo limite do ecrã + Tempo limite padrão do ecrã Forneça a largura do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos largos. Forneça a altura do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos altos. Forneça o peso do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos pesados. @@ -3635,7 +3635,7 @@ Mostrar ou ocultar detalhes adicionais do mapa Mapa noturno Cadeira de rodas - Go-cart + Kart Os alertas de radares de velocidade em alguns países são proibidos por lei. Manter ativo Forneça um nome para o ponto @@ -3657,7 +3657,7 @@ Forneça o comprimento do seu veículo, podem ser aplicadas algumas restrições de rota a veículos longos. Botões de volume como zoom Reinicie a aplicação para eliminar os dados da câmara de velocidade. - %1$s apagado + %1$s eliminado Se tocar neste botão de ação, mostra ou oculta a camada Mapillary no mapa. Definir altura da embarcação Motorizada de enduro @@ -3684,20 +3684,20 @@ \n Elimina o próximo destino na sua rota. Se for o destino final, a navegação será interrompida. Defina a altura da embarcação para evitar pontes baixas. Tenha em mente, se a ponte for móvel, o cálculo utiliza a sua altura no estado aberto. - Adicionar fonte online + Adicionar origem online Defina a largura da embarcação para evitar pontes estreitas Legal Pode definir a altura da embarcação para evitar pontes baixas. Lembre-se, se a ponte for móvel, usaremos sua altura no estado aberto. Cadeira de rodas (para a frente) Controlar o nível de ampliação do mapa pelos botões de volume do dispositivo. Desinstalar radares de velocidade - Anotaçaõ OSM fechada + Nota do OSM fechada Desinstalar e reiniciar Especifique o comprimento do veículo a ser permitido nas rotas. Limite de comprimento POIs de radares de velocidade Retomar - Direção + Rumo Defina dias úteis para continuar Rota entre pontos Planear uma rota @@ -3727,7 +3727,7 @@ Em seguida, encaixe a sua pista na estrada mais próxima permitida com um dos seus perfis de navegação para usar esta opção. Distância limiar Perfil de navegação - Selecione um ficheiro de trilhos para o qual um novo segmento será adicionado. + Selecione um ficheiro de trilho no qual será adicionado um novo segmento. Seguir o trilho Escolha o ficheiro de trilho a seguir Escolha o ficheiro de trilho a seguir ou importe um do seu dispositivo. @@ -3760,7 +3760,7 @@ Trilhos Adicionar ponto de passagem de trilho Gravação de viagem - REC + Gravar Especifique o intervalo de registo para a gravação geral do trilho (ligado através do widget de \'gravação de viagem\' no mapa). Pausar a gravação da viagem Retomar a gravação da viagem @@ -3810,11 +3810,11 @@ Evitar passeios Novidades Desenvolvimento - Dados do OsmAnd ao vivo - Dados do OsmAnd ao vivo + Dados do OsmAnd Live + Dados do OsmAnd Live Roteamento em duas fases para a navegação automotiva. Desenvolvimento nativos de transportes públicos - Mudar para o Cálculo de rotas de transporte público Java (seguro) + Mudar para o cálculo de rotas de transportes públicos Java (seguro) Entre com o OAuth para usar os recursos do osmedit Iniciar sessão com OAuth Limpar token do OpenStreetMap OAuth @@ -3846,7 +3846,7 @@ A assinatura do OsmAnd Live expirou A assinatura do OsmAnd Live foi pausada A assinatura do OsmAnd Live está em espera - Tem de iniciar sessão para enviar alterações novas ou modificadas. + Tem de iniciar sessão para enviar alterações. \n \nPode iniciar sessão usando o método seguro OAuth ou usar o seu nome de utilizador e a sua palavra-passe. Iniciar sessão no OpenStreetMap @@ -3860,7 +3860,7 @@ Introduza etiquetas separadas por vírgula. \"Público\" significa que o rastreamento é mostrado publicamente em Seus traços de GPS e em listas públicas de rastreamento de GPS, e na lista pública de rastreamento com carimbos de data e hora na forma bruta. Os dados servidos através da API não fazem referência à sua página de rastreamento. Os marcadores de ponto de rastreamento não estão disponíveis através da API de GPS pública, e os pontos de rastreamento não estão ordenados cronologicamente. \"Privado\" significa que o rastreamento não aparece em nenhuma listagem pública, mas os pontos de rastreamento dela em ordem não cronológica estão disponíveis através da API pública do GPS sem carimbos de tempo. - \"Identificável\" significa que o rastreamento será mostrado publicamente nos seus traços de GPS e nas listas públicas de rastreamento de GPS, ou seja, outros utilizadoes serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados públicos de pontos de rastreamento marcados com a hora da API do GPS servidos através da API de pontos de rastreamento farão referência à sua página de rastreamento original. + \"Identificável\" significa que o rastreamento será mostrado publicamente nos seus traços de GPS e nas listas públicas de rastreamento de GPS, ou seja, outros utilizadores serão capazes de descarregar o rastreamento bruto e associá-lo ao seu nome de utilizador. Os dados públicos de pontos de rastreamento marcados com a hora da API do GPS servidos através da API de pontos de rastreamento farão referência à sua página de rastreamento original. \"Rastreável\" significa que o rastreamento não aparece em nenhuma listagem pública, mas pontos de rastreamento processados com carimbos de tempo a partir dele (que não podem ser associados diretamente a si) fazem através de descarregadas da API pública do GPS. Fechar nota do OSM Comentário de nota do OSM @@ -3878,11 +3878,11 @@ Tamanho aproximado do ficheiro Selecione os dados a serem exportados para o ficheiro. Necessário para a importação - O seu dispositivo só tem %1$s livre. Por favor, liberte algum espaço ou desmarque alguns itens para exportar. + O seu dispositivo só tem %1$s livres. Por favor, liberte algum espaço ou desmarque alguns itens para exportar. Não há espaço suficiente Adicionar ao Mapillary Adicionar ao OpenPlaceReviews - OsmAnd mostra fotos de várias fontes: + OsmAnd mostra fotos de várias origens: \nOpenPlaceReviews - fotos de POI; \nMapillary - imagens ao nível da rua; \nWeb / Wikimedia - fotos de POI como nos dados do OpenStreetMap. @@ -3934,7 +3934,7 @@ Editar trilho Renomear trilho Mudar pasta - Sombras de relevo / Declives / Curvas de nível + Sombras de relevo / declives / curvas de nível OpenPlaceReviews é um projeto comunitário sobre lugares públicos como restaurantes, hotéis, museus, pontos de passagem. Recolhe toda a informação pública sobre eles, como fotos, resenhas, ligações para outros sistemas OpenStreetMap, Wikipédia. \n \nTodos os dados OpenPlaceReview estão abertos e disponíveis para todos: http://openplacereviews.org/data. From 54058f565084f47b89cd93033e3dec4a7d7cc7b0 Mon Sep 17 00:00:00 2001 From: Shjosan Date: Fri, 9 Apr 2021 08:49:49 +0000 Subject: [PATCH 09/37] Translated using Weblate (Swedish) Currently translated at 72.0% (2678 of 3718 strings) --- OsmAnd/res/values-sv/strings.xml | 142 +++++++++++++++---------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index db64f05967..13c1dff07a 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -24,7 +24,7 @@ Fäst på vägen Skapa POI-filter Transportsätt: - Välj transportsätt + Transportsätt: Soluppgång: %1$s \nSolnedgång: %2$s Dag-/nattinformation @@ -81,7 +81,7 @@ timmar minuter Bilen är parkerad vid - Välj animerad ruttacceleration + Ruttsimuleringshastighet: Allokerat minne %1$s MB (Android-gräns %2$s MB, Dalvik %3$s MB). Allokerat minne Totalt inbyggt minne allokerat av appen %1$s MB (Dalvik %2$s MB, övrigt %3$s MB). @@ -112,8 +112,8 @@ OsmAnd offlinenavigering är inte tillgänglig för tillfället. Vänstertrafik Välj för länder med vänstertrafik. - Startpunkten är ännu inte bestämd - Positionen är ännu inte känd + Avgångspunkten är ännu inte fastställd. + Positionen är ännu inte känd. Avbryt filhämtningen? Online-kartor och mellanlagrade kartrutor Standardkartor (vektor) @@ -210,7 +210,7 @@ Insticksmoduler Ge OSM-bidrag som att skapa eller modifiera OSM POI-objekt, öppna eller kommentera OSM-anteckningar och bidra med inspelade GPX-filer i OsmAnd genom att ange ditt användarnamn och lösenord. OpenStreetMap.org är ett community-driven, globalt kartläggningsprojekt för allmän domän. Vektorkartor ritas sannolikt upp snabbare. Fungerar kanske inte så bra på vissa enheter. - Spela upp kommandon med vald röst + Välj en röst och testa genom att spela meddelanden: Test av röstmeddelanden Det finns ingen offline vektorkarta för den här platsen. Du kan hämta en i Inställningar (Hantera kartfiler) eller byta till online-kartor (aktivera modulen för online-kartor för detta). OsmAnd (OSM Automated Navigation Directions) @@ -247,7 +247,7 @@ Sidled (8 sektorer) Medurs (12 sektorer) Riktningsstil - Välj sätt att uttrycka relativa riktningar under rörelse. + Välj sätt att uttrycka relativa riktningar under rörelse Börja meddela automatiskt Sluta meddela automatiskt Jag är här @@ -335,7 +335,7 @@ Starta simuleringen Filen kan inte döpas om. En fil med det namnet finns redan. - Hittade flera POI-kategorier som matchar frågan: + Hittade flera relaterade IP-kategorier. Lokala data för att söka POI är inte tillgängliga. Sök efter namn POI-datafilen \'%1$s\' är överflödig och kan tas bort. @@ -388,7 +388,7 @@ Intressepunktsdata TTS-röst Ny sökning - Välj textstorlek för namn på kartan. + Textstorlek för namn på kartan: Teckenstorlek på karta Renderingsfelsökningsinformation Visa renderingsprestanda. @@ -415,10 +415,10 @@ Transparens för baskartan Underläggskarta … Underläggskarta - Välj underläggskarta. + Välj underläggskarta Överläggskarta … Överläggskarta - Välj överläggskarta. + Välj överläggskarta Kartan är redan installerad; inställningarna kommer att uppdateras. Välj kartor/kartrutor att installera eller uppdatera. En anslutning till Internet krävs för denna åtgärd men någon sådan är inte tillgänglig. @@ -538,12 +538,12 @@ Denna karta kunde inte laddas ner Kontinuerlig rendering Visa kontinuerlig rendering istället för direkt-bild. - Ett fel uppstod vid renderingen av valt område + Det gick inte att rita valt område. Använd platsen … Renderaren lästes in - Kunde inte läsa in renderaren + Kunde inte ladda renderaren. Vektorrenderare - Välj renderingsutseende. + Välj renderingsutseende Visa POI-webbplats Visa POI-telefon OsmAnd offline-navigering är en experimentell funktion och den fungerar inte för sträckor över c:a 20 km.\n\nNavigeringstjänsten är tillfälligt kopplad till online CloudMade. @@ -559,7 +559,7 @@ Inspelad röst Vektorkartorna lästes inte in Hittar inga GPX-filer i spårmappen - Kunde inte läsa GPX-data + Kunde inte läsa GPX-data. Offline vektorkartor Sök transport vid stopp Ändra Intressepunkt @@ -567,14 +567,14 @@ Till kompass I färdriktningen Vrid inte (norr är uppåt) - Välj justering av kartskärmen. + Kartjustering: Kartorientering Ruttdetaljer Favoriterna importerades utan problem GPX-fil med favoriter finns inte på {0} Favoriterna sparade utan problem i {0} Inga favoritpunkter att spara - Kunde inte läsa in GPX + Kunde inte läsa in GPX. Skicka rapport Det gick inte att hitta några hämtade kartor på minneskortet. Ange sökfråga för att hitta POI @@ -596,9 +596,9 @@ Nätverk GPS sekunder - Ange väckningsintervall som används av bakgrundstjänsten. + Väckningsintervall som används av bakgrundstjänsten: GPS-väckningsintervall - Välj platsleverantör för bakgrundstjänsten. + Platsmetod som används av bakgrundstjänsten: Platsleverantör Kör OsmAnd i bakgrunden för att spåra din position medan skärmen är avstängd. Kör OsmAnd i bakgrunden @@ -635,7 +635,7 @@ Liggande Skärmorientering Stående, liggande eller som enheten. - Öppettider format stöds inte för redigering + Det går inte att ändra format för öppettider. Lägg till en ny regel Rutter Hållplats @@ -654,8 +654,8 @@ Visa hållplatser Navigationsappen OsmAnd POI-data uppdaterades ({0} lästes in) - Fel vid uppdatering av lokal POI-lista - Kunde inte läsa in data från servern + Det gick inte att uppdatera den lokala POI-listan. + Kunde inte läsa in data från servern. Inga offline POI-data tillgängliga för detta område Det går inte att uppdatera POI för små zoomnivåer Uppdatera intressepunkt @@ -699,7 +699,7 @@ Läser in gator… Läser in städer… POI - Du har anlänt till din destination + Du har anlänt. Läser in data… Läser lokala data … Appen ZXing Barcode Scanner är inte installerad. Vill du söka på Google Play? @@ -737,7 +737,7 @@ Meddelande Författarnamn Kommentaren lades till utan problem - Ett undantagsfel inträffade: kommentaren lades inte till + Det gick inte att lägga till kommentar. Redigera POI Skapa POI Ta bort {0} (ange kommentar)? @@ -750,7 +750,7 @@ Gör en ljudanteckning Gör en videoanteckning Inspelningsskikt - Inspelningen kan inte spelas upp + Det gick inte att spela upp inspelningen. Ta bort inspelningen Spela upp Inspelning %1$s %3$s %2$s @@ -786,9 +786,9 @@ Dropbox-modulen låter dig synkronisera spår och ljud-/videoanteckningar med ditt Dropbox-konto. Köp gärna pluginen Höjdkurvor på Market för att stödja fortsatt utveckling. Spela in ljud - Välj standardåtgärd för widget. + Standardåtgärd för widget: Standardåtgärd för widget - Välj videoformat. + Videoformat: Videoformat Använd systemets inspelare för video. Använd systemets inspelare @@ -811,10 +811,10 @@ Åtkomst nekades misslyckades Konverterar inhemska/engelska namn… - Ett fel uppstod när GPX sparades - Fel vid ruttberäkningen - Ett fel uppstod vid ruttberäkningen - Fel: Den beräknade rutten är tom + Det gick inte att spara GPX-filen. + Det gick inte att beräkna rutten. + Det gick inte att beräkna rutten. + Den beräknade rutten är tom. Ogiltiga koordinater Tillbaka till OsmAnd-kartan Den senaste körningen av OsmAnd kraschade. Loggen finns i {0}. Rapportera felet och bifoga gärna loggfilen. @@ -830,7 +830,7 @@ Spara aktuellt spår till SD-kortet nu. Spara aktuellt GPX-spår Loggningsintervall under navigering - Välj loggningsintervall för inspelning av spår under navigering. + Ange loggningsintervallet för spårinspelning under navigering Ett GPX-spår sparas automatiskt i spårmappen under navigering. Spela in spår automatiskt under navigering Uppdatera kartan @@ -928,7 +928,7 @@ Sök gator i grannstäder Mellanliggande mål ordnade för att optimera deras ordning från aktuell position till destinationen. Sortera dörr-till-dörr - Säkerhetskopieringen av OSM-ändringar misslyckades + Det gick inte att säkerhetskopiera OSM-ändringar. Säkerhetskopiera som OSM-förändring Ta bort punkt tid @@ -996,7 +996,7 @@ Definiera/Redigera … Baskarta (världen) Typ av kamerafokus - Välj läge för intern kamerafokus. + Kamerafokusläge: Autofokus Hyperfokal fokus Utökat skärpedjup (EDOF) @@ -1038,11 +1038,11 @@ Beräkna OsmAnd offline-rutt Lastbil Föredra motorvägar - Föredra motorvägar. + Föredra motorvägar Undvik vägtullar Undvik vägtullar Undvik oasfalterade vägar - Undvik oasfalterade vägar. + Undvik oasfalterade vägar Undvik färjor Undvik färjor Undvik motorvägar @@ -1219,7 +1219,7 @@ Sent De sista metrarna Fotostorlek - Välj fotostorlek för den interna kameran. + Ställ in kamerans bildstorlek Bil Cykel Fotgängare @@ -1347,8 +1347,8 @@ Hämta Skidkartsvy Sjökortsvy - För att kunna visa skidkartor måste den speciella offline-kartan hämtas - För att kunna visa sjökort måste den speciella offline-kartan hämtas + Ladda ner den speciella offline-kartan för att visa skidåkning. + Ladda ner den speciella offline-kartan för att visa nautiska detaljer. Pist- och spårpreparering Ledigt %1$s Intern lagring @@ -1639,7 +1639,7 @@ Välj kategori Antal rader di - M + knop min/mi min/km m/s @@ -1722,12 +1722,12 @@ Öppna anteckning igen Stäng anteckning En anteckning har skapats utan problem - Ett undantag uppstod: anteckningen skapades inte + Det gick inte att skapa anteckningen. Anteckningen stängdes utan problem - Ett undantag uppstod: anteckningen stängdes inte + Det gick inte att stänga anteckningen. Ta bort GPX-waypoint? Redigera GPX-waypoint - Menyknapp visar panelen och inte menyn. + Menyknappen startar instrumentpanelen snarare än menyn Tillgång från kartan GPX-färg GPX-bredd @@ -1766,7 +1766,7 @@ Avstånd: Tid: Appen har inte tillåtelse att använda SD-kortet - Appen saknar behörigheter för att komma åt platsdata. + Ge platsåtkomst. Appen har inte tillräckliga behörigheter för att komma åt kameran. Appen har inte tillräckliga behörigheter för att komma åt mikrofonen. Välj röstvägledning @@ -1785,7 +1785,7 @@ Varje vecka Morgon Inte markerad - Välj månad och land + Månad och land: Typ Startpunkt Post borttagen @@ -1846,7 +1846,7 @@ Publikt namn Visa inte mitt namn i rapporter Månadskostnad - Månadsbetalning. + Månadsbetalning Aktiv Inaktiv Ange en giltig e-postadress @@ -2141,13 +2141,13 @@ Välj stad Välj postnummer Autozoomning på/av - Ett tryck på denna åtgärdsknapp visar eller döljer OSM-anteckningar på kartan. + Knapp för att visa eller dölja OSM-anteckningar på kartan. Starta om sökningen Utöka sökradien Hittade ingenting - Ändra sökord eller utöka sökradien. + Ändra sökningen eller utöka sökradien. Sorterat efter avstånd - Sök Favoriter + Sök i Favoriter Insticksmodul Färgschema Gruppnamn @@ -2162,12 +2162,12 @@ Synlig Online-foton Lägg till foton - Vi har inga foton från denna plats. + Inga foton här. Mapillary-widget Mapillary Installera Tillstånd - OsmAnd kan inte importera filen. Kolla om OsmAnd har tillåtelse att läsa filen från sin plats. + Kan inte importera filen. Kolla om OsmAnd har tillåtelse att läsa filen. Distansen korrigerad Ange nytt namn Bakåt @@ -2179,15 +2179,15 @@ Rundtur Gör en rundtur Markörer - Undvik isvägar och vadställen - Undvik isvägar och vadställen. + Inga isvägar eller vadställen + Undviker isvägar och vadställen. Min plats Sortera Flytta till historiken Visa pilar på kartan Visa passerade Dölj passerade - Tag bort från kartmarkörer\' + Tag bort från \'Kartmarkörer\' Lista Grupper Senast använt: %1$s @@ -2229,12 +2229,12 @@ Planera rutt Exportera dina markörer till följande GPX-fil: Gruppen kommer att försvinna nästa gång du startar appen. - Datum tillagd + Tillagd Ordna efter: Alla kartmarkörer har flyttats till historiken Kartmarkören har flyttats till historiken Inga animeringar - Inaktiverar animeringar i appen. + Stänger av kartanimationer. Linje Spara som ruttpunkter Spara som linje @@ -2245,14 +2245,14 @@ Spara punkterna antingen som ruttpunkter eller som en linje. Lägg till minst en punkt. Visa på kartan när den sparats - Peta på denna knapp för att pausa eller fortsätta med navigeringen. - Peta på denna knapp för att starta eller avsluta navigeringen. + Knapp för att pausa eller fortsätta med navigeringen. + Knapp för att starta eller avsluta navigeringen. Mapillary-bild Öppna Mapillary Förbättra fototäckning med Mapillary Möjliggör snabba bidrag till Mapillary. - nedåt - uppåt + Z-A + A-Z Kartmarkören flyttad till aktiva Flytta alla till historiken Fortsätt att visa på kartan @@ -2268,9 +2268,9 @@ Importera fil Felaktig inmatning Waypoints tillagda i kartmarkörer - Lägg till kopia av startpunkten som destination. + Lägg till kopia av avgångspunkten som destination. Snabbinmatning av koordinater - Lägg till din position som första punkt för att planera den perfekta rutten. + Lägg till din position som avgångspunkt för att planera den perfekta rutten. Koordinatinmatning Ändra sökningen. Skapa eller ändra OSM-objekt @@ -2380,18 +2380,18 @@ Charlott ansluter punkter med vägar för den valda profilen. Uppdatera rutor för att se aktuell data. Tile-cache - Filtrera bilderna enligt inlämnare eller datum. Filter tillämpas endast för närbildszoom. + Filtrera bilder efter avsändare, efter datum eller typ. Endast aktiv i närbildszoom. Radielinjal - Installera Mapillary för att lägga till en eller flera bilder till denna plats på kartan. - Bidra med din egen gatnivåvy på denna plats via Mapillary. + Installera Mapillary för att lägga till bilder till denna plats på kartan. + Dela din vy på gatunivå via Mapillary. Online gatunivåbilder för alla. Upptäck platser, samarbeta, fånga världen. Gatunivå bilder för alla. Upptäck platser, samarbeta, fånga världen. - Din destination är belägen i ett område med privat tillträde. Tillåt tillgång till privata vägar för denna resa? - För att se relief-höjdskuggning på kartan, hämta höjdskuggskartan för denna region. - För att se höjdskuggningsrelief på kartan, behöver du köpa och installera insticksmodulen \'Konturlinjer\' - Dölja från zoom-nivå - Hämta \'konturlinjekarta\' över denna region. - För att se höjdkurvor på kartan, behöver du köpa och installera insticksmodulen \'Konturlinjer\' + Din destination är belägen i ett område med privat tillträde. Tillåt anvädning av privata vägar för denna resa\? + Ladda ner \'Hillshade\' överläggskartan för att visa vertikal skuggning. + Installera plugin-programmet \'Contour lines\' för att visa graderade vertikala områden. + Dölj start från zoomnivå + Ladda ner kartan \"Konturlinje\" för användning i denna region. + Köp och installera pluginprogrammet \'Contour lines\' för att visa graderade vertikala områden. Visa från zoom-nivå Tillåt privat åtkomst Tillåta åtkomst till privata områden. @@ -2692,7 +2692,7 @@ \nFrån Afghanistan till Zimbabwe, från Australien till USA. Argentina, Brasilien, Kanada, Frankrike, Tyskland, Mexiko, Storbritannien, Spanien, ... \n Detta meddelande ingår i kommentarsfältet. - Välj kategorin du vill spara favoriten i. + Kategori för att spara favoriten i: Välj en valfri kategori. POI-lista Lägga till en eller flera POI-kategorier som ska visas på kartan. From 8f52e17fa3747c6cdcc5f17f8a1364309179a7fa Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Fri, 9 Apr 2021 07:03:45 +0000 Subject: [PATCH 10/37] Translated using Weblate (Russian) Currently translated at 99.9% (3717 of 3718 strings) --- OsmAnd/res/values-ru/strings.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 9c2cced9f6..9909523cd3 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -1545,7 +1545,7 @@ Скачать недостающие карты %1$s (%2$d МБ)\? Путевые точки Дорожные предупреждения - Мои места рядом + Ближайшие избранные Ближайшие POI Туры Все @@ -4082,4 +4082,8 @@ Срок истёк Приостановлено Продление подписки + Объявлять о превышении + Точки пользователя + Вывод + %1$s → … \ No newline at end of file From 3565d4124ee6ca5fefd0fe125145af891f774733 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Thu, 8 Apr 2021 23:22:28 +0000 Subject: [PATCH 11/37] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-uk/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index ecfadc84d3..3ad683a6fb 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -425,7 +425,7 @@ GPX-файл з Закладками не знайдено в {0} Закладки збережено в {0} Відсутні точки Закладок для збереження - Імпортувати + Імпорт Не вдалося завантажити GPX. Надіслати звіт Не знайдено завантаженої мапи на карті пам\'яті. @@ -3851,7 +3851,7 @@ Обліковий запис Ім\'я користувача Увійти за допомогою OpenStreetMap - Історія маркерів + Історія позначок Надіслати файл GPX на OpenStreetMap Введіть мітки через коми. «Загальнодоступне» означає, що трасування показано загальнодоступно у ваших GPS-трасуваннях та у загальнодоступних списках GPS-трасування, а також у загальнодоступному списку трасування з позначками часу в необробленому вигляді.. Дані, що подаються через API, не посилаються на вашу сторінку трасування. Мітки часу точок трасування недоступні через загальнодоступний API GPS і не впорядковані хронологічно. From 218eb86d272f75959020a16bbf5f9f164ab768a2 Mon Sep 17 00:00:00 2001 From: Mirco Zorzo Date: Fri, 9 Apr 2021 17:57:06 +0000 Subject: [PATCH 12/37] Translated using Weblate (Italian) Currently translated at 91.5% (3404 of 3718 strings) --- OsmAnd/res/values-it/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 51b62a19ba..ef0211485d 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -4071,4 +4071,9 @@ In attesa Scaduto Aggiornare tutte le mappe aggiunte a %1$s\? + Numero uscita + Annuncia quando si supera + Punti utente + Output + %1$s → … \ No newline at end of file From cdbe91e27374a98423553ad04ba78cdcd42405e8 Mon Sep 17 00:00:00 2001 From: ace shadow Date: Fri, 9 Apr 2021 17:40:24 +0000 Subject: [PATCH 13/37] Translated using Weblate (Slovak) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-sk/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index c31e35dad4..b644da49d4 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -4076,4 +4076,9 @@ Pozdržané Expirované Aktualizovať všetky mapy pridané do %1$s\? + Číslo výjazdu + Hlásiť keď je prekročené + Body používateľa + Výstup + %1$s → … \ No newline at end of file From 58bdf9f81d349b772b2df4ddf2394c8c0c79b818 Mon Sep 17 00:00:00 2001 From: WaldiS Date: Fri, 9 Apr 2021 20:09:11 +0000 Subject: [PATCH 14/37] Translated using Weblate (Polish) Currently translated at 98.7% (3670 of 3718 strings) --- OsmAnd/res/values-pl/strings.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 4e37a6dcff..87e7bceca5 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -4044,4 +4044,25 @@ Anulowano Odnów subskrypcję Zaktualizować wszystkie mapy dodane do %1$s\? + Trasa mogłaby unikać silnych podjazdów. + Proszę wybrać inny typ barwy. + Interwał + Naturalne granice + Ślady nie zawierają danych o wysokości. + Ślady nie zawierają informacji o prędkości. + Interwały logowania ustala okres czasu, w któtym OsmAnd będzie prosił o dane obecnej lokalizacji pozycji. + Pokaż okno rozpocznij + Gdy wyłączone, nagrywanie rozpocznie się niezwłocznie po naciśnięciu w widżet lub w menu, pomijając okno potwierdzenia. + Zmień trasę nawigacji + Trasa nawigacji + Wygasł + • OsmAnd Live aktualizacje przeniesiono do \"Pobrane > Aktualizacje\" +\n +\n •Ślady mogą być pokolorowane względem wysokości, prędkości, wzniesień. +\n +\n • Dodano opcję zmiany wyglądu trasy nawigacji +\n +\n • zaktualizowano okno \"Nagrywanie Trasy\" +\n +\n \ No newline at end of file From b7a44c42d580ae39d33c881ea51f84e851820950 Mon Sep 17 00:00:00 2001 From: Softmap Date: Fri, 9 Apr 2021 09:54:33 +0000 Subject: [PATCH 15/37] Translated using Weblate (Arabic) Currently translated at 99.9% (3716 of 3718 strings) --- OsmAnd/res/values-ar/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 3b5b131c57..4cb0bab704 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -998,7 +998,7 @@ التوجيه مع الطرق استخدام الموقع… مفضلة - نقاط مفضلة مجاورة + مفضلة مجاورة حفظ كمجموعة مفضلة أدخل اسم المفضلة تم إضافة إحداثية المفضلة \'\'{0}\'\' بنجاح. @@ -4075,7 +4075,7 @@ سيارة نسخ اسم POI الرجاء اختيار أنواع أخرى من التلوين. - سيتم التقاط الرمز إلى مسار التنقل الحالي + سيتم القاط أيقونة المكان الحالي إلى مسار التنقل الحالي حدد الجزء %1$s يحتوي على أكثر من مقطع ، تحتاج إلى تحديد الجزء المطلوب للتنقل. الجزء %1$d @@ -4094,7 +4094,7 @@ عند الإيقاف المؤقت يلزم إعادة تشغيل التطبيق لتطبيق بعض الإعدادات. التوجيه يمكن أن يتجنب المرتفعات القوية. - تبديل لإظهار أو إخفاء أداة الإحداثيات على الخريطة. + مقبس لإظهار أو إخفاء أداة الإحداثيات على الخريطة. المسافة عن طريق الضغط آخر تحديث خريطة الشارع المفتوح المتاحة: تحديث: %s @@ -4153,6 +4153,6 @@ رقم الخروج الإعلان عند التجاوز نقاط المستخدم - المخرج + الإخراج %1$s ← … \ No newline at end of file From 7496b6842f5279a468c23fc844771ff5eb9ff367 Mon Sep 17 00:00:00 2001 From: iman Date: Fri, 9 Apr 2021 06:47:22 +0000 Subject: [PATCH 16/37] Translated using Weblate (Persian) Currently translated at 99.8% (3712 of 3718 strings) --- OsmAnd/res/values-fa/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 0030ca74d2..ba2b5c1601 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -4094,7 +4094,7 @@ اگر خریدهای شما اینجا نمایش داده نمی‌شود، روی «%1$s» بزنید یا با تیم پشتیبانی ما تماس بگیرید. تماس با پشتیبانی عیب‌یابی - اگر با مسئله‌ای در خرید مواجه شدید این پیوند را دنبال کنید. + اگر در خرید با مسئله‌ای مواجه هستید این پیوند را دنبال کنید. OsmAnd Live اشتراک سالانه اشتراک ماهانه @@ -4105,4 +4105,6 @@ در مهلت اضافه منقضی شده همهٔ نقشه‌های اضافه‌شده به %1$s روزآمد شود؟ + شمارهٔ خروج + خروجی \ No newline at end of file From a7e408c3ca1cfed69d1e988b2e531374830e998a Mon Sep 17 00:00:00 2001 From: Franco Date: Fri, 9 Apr 2021 17:37:36 +0000 Subject: [PATCH 17/37] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (3925 of 3925 strings) --- OsmAnd/res/values-es-rAR/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index f2af1b56db..0505f3549f 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -3924,4 +3924,6 @@ Jiu-jitsu Kárate Aros + Oficina diplomática + Tipo de bahía \ No newline at end of file From ab28abe880eb5a684a2a4a06a4031eabd5575945 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Fri, 9 Apr 2021 00:04:49 +0000 Subject: [PATCH 18/37] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 1e6872a0e8..620a3dd28e 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -4064,7 +4064,7 @@ Se suas compras não aparecerem aqui, toque em \"%1$s\", ou entre em contato com nossa equipe de suporte. Contato com o suporte Solução de problemas - Por favor, siga este link se você tiver algum problema com compras. + Por favor, siga este link se tiver problemas com as compras. OsmAnd Live Assinatura anual Assinatura mensal @@ -4076,4 +4076,9 @@ Em espera Expirado Atualizar todos os mapas adicionados a %1$s\? + Número de saída + Anunciar quando ultrapassado + Pontos do usuário + Saída + %1$s → … \ No newline at end of file From 80c2c119e9c55e67208085eb211e43c6e82c50ee Mon Sep 17 00:00:00 2001 From: phlostically Date: Fri, 9 Apr 2021 08:41:46 +0000 Subject: [PATCH 19/37] Translated using Weblate (Esperanto) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-eo/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 54026c0c08..5b9d9345b5 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -1526,7 +1526,7 @@ Okazis eraro dum malkonekta serĉado. Serĉi per pozici-trova servo Elekti lingvon de fasado (post ŝanĝi necesas restarti la aplikaĵon). - Unuoj de longo + Mezurunuoj de longo Ŝanĝi unuojn por reprezenti distancoj. Mejloj/futoj Mejloj/jardoj @@ -3137,7 +3137,7 @@ Montri mapon sur la ŝlos‑ekrano dum navigado. Agordoj pri kurs‑difinado por la elektita profilo: “%1$s”. Aktiveca periodo de ekrano - Unuoj kaj formoj + Mezurunuoj & formoj Alĝustigi mapon Map‑aspekto Instalitaj kromprogramoj From e4476da7833866621fa9db857f74af33b7ddd274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Fri, 9 Apr 2021 16:44:03 +0000 Subject: [PATCH 20/37] Translated using Weblate (Portuguese) Currently translated at 100.0% (3925 of 3925 strings) --- OsmAnd/res/values-pt/phrases.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml index f3831961df..1dc4d627b4 100644 --- a/OsmAnd/res/values-pt/phrases.xml +++ b/OsmAnd/res/values-pt/phrases.xml @@ -1409,7 +1409,7 @@ Sim Sem lareira Sim - Descoberto + Não coberto Não permitido Apenas do lado de fora Permitido @@ -1959,8 +1959,8 @@ Superfície: pavimentada Superfície: asfalto Superfície: cimento - Superfície: paralelepípedo - Superfície: piso de seixos + Superfície: paralelos + Superfície: pedras irregulares Superfície: piso intertravado Superfície: cascalho Superfície: pedra @@ -2789,7 +2789,7 @@ Cruzamento vigiado: pessoa física Cruzamento vigiado: câmara Sim - Emite receitas: não + Não vende medicamentos sujeitos a receita médica Internacional Regional Público @@ -3488,7 +3488,7 @@ Eletrónico Curso Rocha - Data final + Data de fim Loja de eletrodomésticos Afloramento Sem contacto @@ -3704,7 +3704,7 @@ Assentador de piso Padaria Marceneiro - Cobrança + Custo Banho e tosquia de animais Caixa automática: sim Levantamento de dinheiro From 41412a4a9f958cecc0a92c67543912277594335f Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 9 Apr 2021 02:13:26 +0000 Subject: [PATCH 21/37] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index bbb8ce3103..358a89a8ec 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -4074,4 +4074,9 @@ 保留 過期 更新所有新增至 %1$s 的地圖? + 出口編號 + 超過時宣佈 + 使用者點 + 輸出 + %1$s → … \ No newline at end of file From 0d59db88ce67b9bbe24c55966f7fe594a6127e8a Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Fri, 9 Apr 2021 02:14:33 +0000 Subject: [PATCH 22/37] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3925 of 3925 strings) --- OsmAnd/res/values-zh-rTW/phrases.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index efd182c75a..09f71464d7 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -3924,4 +3924,6 @@ 柔術 空手道 籃圈 + 外交部 + 海灣類型 \ No newline at end of file From bc51f9922333ff20d58b1bc991b4d02d3297db69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Morais?= Date: Fri, 9 Apr 2021 14:40:22 +0000 Subject: [PATCH 23/37] Translated using Weblate (Portuguese) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/pt/ --- OsmAnd-telegram/res/values-pt/strings.xml | 170 +++++++++++----------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/OsmAnd-telegram/res/values-pt/strings.xml b/OsmAnd-telegram/res/values-pt/strings.xml index 4412299008..28cb4ea7e7 100644 --- a/OsmAnd-telegram/res/values-pt/strings.xml +++ b/OsmAnd-telegram/res/values-pt/strings.xml @@ -2,12 +2,12 @@ Sem dados Selecionar - Distância mínima de registro - Filtro: distância mínima para registrar um novo ponto - Precisão mínima de registro - Filtro: sem registro, a menos que a precisão seja atingida - Velocidade mínima de registro - Filtro: sem registro abaixo da velocidade selecionada + Distância mínima de registo + Filtro: distância mínima para registar um novo ponto + Precisão mínima de registo + Filtro: sem registo, a não ser que seja atingida a precisão + Velocidade mínima de registo + Filtro: sem registo abaixo da velocidade selecionada Palavra-passe Nome de utilizador Ativar @@ -16,7 +16,7 @@ Altitude Pesquisar Ok - Rastreador OsmAnd + OsmAnd Tracker Telegram Aparência Atualizar @@ -35,13 +35,13 @@ Fim Iniciar Aplicar - Selecionar a hora para exibir + Selecionar a hora de visualização Data de início - fim - Não coletamos dados para o dia selecionado + Não temos dados recolhidos para o dia selecionado Configurações de GPX Chave Credenciais - Port + Porta Servidor Conexão Tipo de proxy @@ -50,16 +50,16 @@ Configurações de proxy Proxy Precisão - Rolamento - Pesquisar contatos - Pesquise em todos os seus grupos e contatos. - Digite o nome do contato ou do grupo + Rumo + Pesquisar contactos + Pesquise em todos os seus grupos e contactos. + Digite o nome do contacto ou do grupo Linha do tempo é um recurso disponível agora gratuitamente. - Desativar monitoramento + Desativar monitorização Gravação de localização ativada - Ative o monitoramento para gravar todos os locais no histórico. - Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas. - OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram. + Ative a monitorização para gravar todos os locais no histórico. + O Telegram (a aplicação de mensagens) é usado para conectar e comunicar com outras pessoas. + OsmAnd Tracker é um dos clientes que usam a Plataforma aberta do Telegram. Os seus contactos podem usar qualquer outro cliente Telegram. Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd. Aceitar Política de privacidade do Telegram @@ -67,68 +67,68 @@ Como funciona Pontos GPX recebidos: %1$s Mostrar pontos de GPS - Mostrar quantidade de pontos de GPS coletados e enviados. + Mostrar quantidade de pontos de GPS recolhidos e enviados. Por favor, atualize o OsmAnd para ver os dados no mapa enviado (%1$d em buffer) %1$d pontos - Coletado + Recolhidos Pontos de GPS Enviado - Monitoramento está ativado - Monitoramento está desativado + A monitorização está ativada + A monitorização está desativada Mostrar no OsmAnd - Data final + Data de fim Enviar localização como - Escolha como as mensagens com sua localização serão exibidas. + Escolha a forma como as mensagens com a sua localização serão mostradas. Mapa e texto Última atualização do Telegram Escolha um nome que ainda não usou %1$s adicionado. - Não foi possível adicionar novo aparelho - Nomeie seu novo aparelho no máximo 200 símbolos. - Nome do aparelho muito longo - O nome do aparelho não pode estar vazio - Nome do aparelho - Pode criar e visualizar o ID do aparelho no cliente de telegrama usando o bot de bate-papo %1$s. %2$s - Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização. + Não foi possível adicionar o novo dispositivo + Atribua um nome a seu novo dispositivo com o máximo de 200 caracteres. + Nome do dispositivo muito longo + O nome do dispositivo não pode estar vazio + Nome do dispositivo + Pode criar e visualizar o ID do dispositivo no cliente de Telegram usando o robô de bate-papo %1$s. %2$s + Se quer conectar vários dispositivos a uma conta no Telegram, é necessário usar um dispositivo diferente para partilhar a sua localização. Última localização atualizada: Enviado e atualizado com sucesso Não é possível enviar para bate-papo do Telegram: - Aguardando resposta do Telegram - enviando localização - Iniciando - Posicionando… + A aguardar a resposta do Telegram + A enviar a localização + A iniciar + A posicionar… Conectando-se à Internet - Altere as configurações de otimização da bateria para estabilizar o compartilhamento de local. + Altere as configurações de otimização da bateria para estabilizar a partilha da localização. Funcionamento em segundo plano Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano. - Compartilhando em segundo plano - Vá para as configurações + Partilha em segundo plano + Ir às configurações Ainda não enviado Ainda não encontrado Reenvie o local Última localização disponível - Estado de compartilhamento - Compartilhamento: %1$s + Estado da partilha + Partilha: %1$s Ativado Sem conexão GPS - Sem conexão com a internet + Sem ligação à Internet Desativar Gravar - Adicionar aparelho - Compartilhar localização como - Contatos e grupos compartilhando o local consigo. - Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\? + Adicionar dispositivo + Partilhar localização como + Contactos e grupos partilhando a localização consigo. + Tem a certeza de que quer sair do OsmAnd Tracker para que não possa partilhar a localização ou ver a localização de outras pessoas\? Sair do OsmAnd Tracker\? Nome Pela distância Por nome Por grupo Ordenar - Selecione a versão OsmAnd, onde os contatos serão exibidos no mapa. + Selecione a versão OsmAnd onde os contactos serão mostrados no mapa. Selecione a versão do OsmAnd para usar - Desativa o compartilhamento de local para todos os bate-papos selecionados (%1$d). - Desativar todo o compartilhamento + Desativa a partilha da localização para todos os bate-papos selecionados (%1$d). + Desativar todas as partilhas Desligue todos Sair atrás @@ -136,34 +136,34 @@ Grupo Conecte-se à Internet para efetuar a saída do Telegram corretamente. Fechar - Para revogar o acesso ao compartilhamento de local. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker. + Para revogar o acesso à partilha da localização. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker. Como desativar o OsmAnd Tracker para Telegram Como desativar o OsmAnd Tracker para Telegram Conta conectada Conta no %1$s - Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições. + Escolha a versão OsmAnd que OsmAnd Tracker usa para mostrar posições. Conectar OsmAnd Ocultar contactos que não foram movidos num determinado momento. Histórico de localização - A última vez que um contato foi movido. + A última vez que um contacto foi movido. Parado - Defina o intervalo mínimo para o compartilhamento de local. - Enviar minha localização + Defina o intervalo mínimo para a partilha da localização. + Enviar a minha localização Posição - Tempo de compartilhamento + Tempo de partilha Expira - O compartilhamento está ativado (desativado) - Desativar o compartilhamento de local + A partilha está ativada (desativar) + Desativar a partilha da localização Abrir OsmAnd - Vivo + Tempo real Robô - Registro no Telegram - Precisa de uma conta do Telegram para usar o compartilhamento de local. + Registo no Telegram + Precisa de uma conta do Telegram para usar a partilha de localização. Por favor, instale o Telegram e configure uma conta. - Então pode usar esta app. - Todos - Desligado + Depois pode usar esta aplicação. + Tudo + Desativado Precisa de uma conta e número de telefone registados no Telegram Não tenho uma conta do Telegram Digite o número de telefone @@ -173,42 +173,42 @@ %1$d m %1$d h Instalar - Compartilhar + Partilhar Voltar Hora visível para todos - Defina a hora em que seus contatos e grupos selecionados verão sua localização em tempo real. - Definir tempo - Selecione os contactos e grupos com os quais deseja compartilhar sua localização. - Pesquisa: Grupo ou contato - Compartilhar localização + Defina a hora em que os seus contactos e grupos selecionados verão a sua localização em tempo real. + Definir hora + Selecione os contactos e grupos com os quais deseja partilhar a sua localização. + Pesquisa: grupo ou contacto + Partilhar localização Mostrar no mapa OsmAnd Online GPS Tracker Número de telefone Número de telefone no formato internacional Palavra-passe Digite o código - Código de Autenticação - Uma faixa GPX é salva automaticamente durante a navegação. + Código de autenticação + O Telegram enviou-lhe um código para o OsmAnd para iniciar sessão na sua conta. Digite a palavra-passe - Palavra-passe do telegrama + Palavra-passe do Telegram Entrar Sair - Iniciando - Saindo - Fechando + A iniciar + A terminar sessão + A fechar Ativar \"Localização\"\? - você não está logado no + Não tem a sessão iniciada Continuar Cancelar Configurações - A app não tem permissão para acessar os dados de localização. - Por favor, ligue \"Localização\" nas configurações do sistema - Selecione um dos provedores de localização para compartilhar sua localização. + A aplicação não tem permissão para aceder aos dados de localização. + Por favor, ative a \"Localização\" nas configurações do sistema + Selecione um dos fornecedores de localização para partilhar a sua localização. Modo em segundo plano - OsmAnd Tracker é executado em segundo plano com o ecrã desligado. + O OsmAnd Tracker é executado em segundo plano com o ecrã desligado. Distância - Compartilhar localização - Compartilhando localização + Partilhar localização + A partilhar a localização Serviço OsmAnd Tracker Logotipo do OsmAnd Precisa instalar a versão gratuita ou paga do OsmAnd primeiro @@ -235,7 +235,7 @@ Metros por segundo Minutos por quilómetro Minutos por milha - Milhas náuticas por hora (nó) + Milhas náuticas por hora (nós) Milhas/pés Milhas/jardas Quilómetros/metros @@ -244,8 +244,8 @@ h min seg - OsmAnd Tracker permite que partilhe a sua localização e veja a dos outros no OsmAnd.

O app usa a API Telegram e precisa de uma conta do Telegram.
- Minha localização + OsmAnd Tracker permite que partilhe a sua localização e veja a dos outros no OsmAnd.

A aplicação usa a API do Telegram e é necessário ter uma conta no Telegram.
+ A minha posição Ao vivo agora Cronologia Mensagens gravadas @@ -259,7 +259,7 @@ Tempo máximo para armazenar pontos no buffer Tempo de expiração do buffer Sugerido - Estado do Rastreador de OsmAnd + Estado do OsmAnd Tracker Voltar para OsmAnd %1$s atrás Última resposta: %1$s atrás From d34ed7d8166a734e64371d18773c1590d0d0b18a Mon Sep 17 00:00:00 2001 From: Yannick A Date: Fri, 9 Apr 2021 15:50:40 +0000 Subject: [PATCH 24/37] Translated using Weblate (French) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/fr/ --- OsmAnd-telegram/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-fr/strings.xml b/OsmAnd-telegram/res/values-fr/strings.xml index bff9d36680..318316b293 100644 --- a/OsmAnd-telegram/res/values-fr/strings.xml +++ b/OsmAnd-telegram/res/values-fr/strings.xml @@ -266,7 +266,7 @@ Cacher les contacts qui ne se sont pas déplacés depuis un temps donné. Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel. OsmAnd connect - depuis + il y a Buffer Logcat Vérifier et partager les logs détaillés de l\'application Exporter From 593f1b5a88040fa263ba885cf340259dfcb85b55 Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Fri, 9 Apr 2021 15:49:05 +0000 Subject: [PATCH 25/37] Translated using Weblate (French) Currently translated at 100.0% (271 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/fr/ --- OsmAnd-telegram/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-fr/strings.xml b/OsmAnd-telegram/res/values-fr/strings.xml index 318316b293..6701385738 100644 --- a/OsmAnd-telegram/res/values-fr/strings.xml +++ b/OsmAnd-telegram/res/values-fr/strings.xml @@ -237,7 +237,7 @@ Impossible d\'envoyer dans les discussions Telegram : Envoyé et mis à jour avec succès Dernière position mise à jour : - Si vous voulez connecter plusieurs appareils à un même compte Telegram, vous devez utiliser un appareil différent pour partager votre position. + Si vous souhaitez connecter plusieurs appareils à un même compte Telegram, vous devez partager votre position depuis chaque appareil. Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s Nommez votre nouveau périphérique en max 200 symboles. Choisissez un nom que vous n\'avez pas encore utilisé From 8ab2c8252b24a26b60bd33b56cbc51aece32a369 Mon Sep 17 00:00:00 2001 From: phlostically Date: Fri, 9 Apr 2021 08:43:06 +0000 Subject: [PATCH 26/37] Translated using Weblate (Esperanto) Currently translated at 35.7% (97 of 271 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/eo/ --- OsmAnd-telegram/res/values-eo/strings.xml | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/OsmAnd-telegram/res/values-eo/strings.xml b/OsmAnd-telegram/res/values-eo/strings.xml index 33798442db..800e2c4d0c 100644 --- a/OsmAnd-telegram/res/values-eo/strings.xml +++ b/OsmAnd-telegram/res/values-eo/strings.xml @@ -64,4 +64,37 @@ Fino Horzono Sendi raporton + Serĉi kontaktojn + Direkto + Agordoj pri la Retperanto + Tipo de retperanto + Mezurunuoj & formoj + Elporti + %1$d punktoj + Aspekto + Reguloj pri Privateco de Telegram + Reguloj pri Privateco de OsmAnd + Ĝisdatigi + Kolektita + Montri per OsmAnd + Fona laboro + Sen interreta konekto + Stato + Retperanto + Agordoj pri GPX + Komenca – Fina datoj + Difinu la mezurunuon de rapido. + Mezurunuoj de longo + Mezurunuo de rapido + ERARO + Reen al OsmAnd + antaŭ %1$s + Lasta respondo: antaŭ %1$s + Lasta ĝisdatigo de Telegram: antaŭ %1$s + Lasta ĝisdatigo de Telegram: %1$s + Lasta respondo: %1$s + Montri uzantojn sur la mapo + Instali OsmAnd + Sugestataj + Mezuma rapido
\ No newline at end of file From df7369b404bf47ca317f3d0869cda8a0f418dfb4 Mon Sep 17 00:00:00 2001 From: WaldiS Date: Fri, 9 Apr 2021 20:10:03 +0000 Subject: [PATCH 27/37] Translated using Weblate (Polish) Currently translated at 98.7% (3671 of 3718 strings) --- OsmAnd/res/values-pl/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 87e7bceca5..710c835669 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -4065,4 +4065,5 @@ \n • zaktualizowano okno \"Nagrywanie Trasy\" \n \n
+ %1$s → … \ No newline at end of file From e28fd2d945d753debce7233050dc48a8ebe533dd Mon Sep 17 00:00:00 2001 From: solokot Date: Sat, 10 Apr 2021 15:01:27 +0000 Subject: [PATCH 28/37] Translated using Weblate (Russian) Currently translated at 99.5% (3907 of 3925 strings) --- OsmAnd/res/values-ru/phrases.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index a37c329c32..8ec2303a8b 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -3908,4 +3908,5 @@ Пилатес Каратэ Джиу-джитсу + Место остановки передвижной библиотеки \ No newline at end of file From 47e08d733898435094e5479b6d9cf4641a74bbe6 Mon Sep 17 00:00:00 2001 From: Roberto GEB Date: Sat, 10 Apr 2021 12:31:48 +0000 Subject: [PATCH 29/37] Translated using Weblate (Spanish) Currently translated at 100.0% (3718 of 3718 strings) --- OsmAnd/res/values-es/strings.xml | 168 ++++++++++++++++++++++++++----- 1 file changed, 144 insertions(+), 24 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 8ac570602c..7f25cba260 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -1294,7 +1294,7 @@ ¿Descargar los %1$s mapas que faltan (%2$d MB)? Puntos de referencia Advertencias de tráfico - Favoritos cerca + Favoritos cercanos PDI cercanos Todos Excursiones @@ -1988,7 +1988,7 @@ ¿Actualizar todos los mapas ahora? Limpiar todas las teselas Ruta de bajo consumo (corta) - ¿Reemplazar el Favorito «%1$s»? + ¿Seguro que quieres reemplazar el favorito «%1$s»\? Objetos en superficie Cambiar Empezar @@ -2000,12 +2000,12 @@ Ubicación no encontrada Sin conexión a Internet Necesario para descargar mapas. - Buscando la ubicación… + Buscando ubicación… Espacio libre Almacenamiento de datos de OsmAnd (para mapas, trazas, etc.): %1$s. Conceder permiso Permitir el acceso a la ubicación - Obtén direcciones y descubre sitios nuevos sin una conexión a Internet + Obtén indicaciones y descubre lugares nuevos sin conexión a Internet Encontrar mi ubicación La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en Google Play. Donaciones a la comunidad de OSM @@ -2066,7 +2066,7 @@ Guardar filtro Borrar filtro Nuevo filtro - Ingresa el nombre del nuevo filtro, que se añadirá en tu pestaña «Categorías». + Escribe el nombre del nuevo filtro, que se añadirá en tu pestaña «Categorías». Muy fino Serbio (latino) Chino (Hong Kong) @@ -2385,12 +2385,12 @@ Reiniciar búsqueda Aumentar radio de búsqueda Nada encontrado - Cambiar la búsqueda o aumentar su radio. + Cambia la búsqueda o aumenta su radio. Descarga la capa superpuesta del mapa «Sombreado» para mostrar el sombreado vertical. Instala el complemento «Curvas de nivel» para mostrar las áreas verticales graduadas. El destino se ubica en un área de acceso privado. ¿Permitir el uso de caminos privados para este viaje\? Widget de Mapillary - Fotos a nivel de calle en línea para todos. Descubre sitios, colabora, captura el mundo. + Fotos a nivel de calle en línea para todos. Descubre lugares, colabora, captura el mundo. Mapillary Añadir fotos Comparte tus imágenes a nivel de calle a través de Mapillary. @@ -2858,7 +2858,7 @@ Hormigón Adoquín Empedrado (adoquín) - Pavimento intertrabado / Adoquín prefabricado + Adoquinado Canto rodado Piedra Metal @@ -2875,7 +2875,7 @@ Muy horrible Intransitable Autopista - Carretera/ruta estatal + Carretera estatal Carretera principal Calle Vía de servicio @@ -2884,7 +2884,7 @@ Camino ecuestre Escalera Sendero - Ciclovía/Bicisenda + Ciclovía Indefinido Lea más sobre el cálculo de las rutas de OsmAnd en nuestro blog. La navegación en transporte público se encuentra actualmente en fase de pruebas beta, se esperan errores e imprecisiones. @@ -2898,7 +2898,7 @@ Sin empedrado y adoquinado Evitar las calles empedradas y adoquinadas Grados - Milésimas angulares + Milirradianes Unidad angular Cambiar el acimut en el que se mide. Sin tranvías @@ -2927,7 +2927,7 @@ Calcular la ruta a pie Tipo de transporte Buscando GPS - Widget de coordenadas + Control de coordenadas OVNI • Perfiles de aplicación: crea un perfil personalizado según tus necesidades, con un icono y color personalizado. \n @@ -3414,7 +3414,7 @@ Perfiles Acciones rápidas No hay nada seleccionado - Tipo de PDI + Tipos de PDI Preparando Ángulo mínimo entre mi ubicación y ruta Se mostrará un segmento recto adicional entre mi ubicación y la ruta calculada hasta que se vuelva a calcular la ruta @@ -3496,7 +3496,7 @@ Perfiles de navegación Crear o editar PDI Añadir o editar favorito - Agregar perfil + Añadir perfil Aragonés Color personalizado %1$s / %2$s @@ -3668,8 +3668,8 @@ Al aplicar estos cambios, los datos almacenados serán borrados para este repositorio de teselas Fijar la altura del navío Puedes establecer la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto. - Fija la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto. - Fija el ancho del navío para evitar puentes estrechos + Define la altura de la embarcación para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto. + Define el ancho de la embarcación para evitar puentes estrechos Un botón que alterna la capa de Mapillary en el mapa. Especifica la longitud del vehículo que se permitirá en las rutas. Límite de longitud @@ -3695,11 +3695,11 @@ Ingresar dirección Hecho Traza simplificada - Sólo se grabará la línea de la ruta, los puntos intermedios (waypoints) se borrarán. + Sólo se grabará la línea de la ruta, los puntos intermedios se borrarán. Nombre de archivo %s archivos de trazas marcados Grabar - Especifica el intervalo de grabación general para trazas (activado a través del widget de grabación en el mapa). + Especifica el intervalo de registro para la grabación general de trazas (activado a través del control \'Grabación de viaje\' en el mapa). Pausar grabación del viaje Reanudar grabación del viaje Predeterminado del sistema @@ -3765,7 +3765,7 @@ Seguir traza Elige el archivo de la traza a seguir Elige el archivo de la traza a seguir o impórtala desde el dispositivo. - Selecciona otra traza + Seleccionar otra traza Navegar desde mi ubicación a la traza Apuntar a la traza para navegar Inicio de la traza @@ -3924,15 +3924,15 @@ \nPuedes leer más en: https://openplacereviews.org OpenPlaceReviews La URL con todos los parámetros se verá así: - Motores de navegación en línea - Motor de navegación en línea + Enrutadores en línea + Enrutadores en línea Error de servidor: %1$s El nombre ya existe Acceder a OpenPlaceReviews - Si no, mantenerlo vacío + Mantenerlo vación si no Sombreado / Pendiente / Curvas de nivel Editar traza - Editar motor de navegación en línea + Editar enrutador en linea Borrar puntos de referencia ¿Borrar este motor de navegación en línea\? Copiar a «Marcadores del mapa» @@ -3951,7 +3951,7 @@ Has llegado al destino Acercarse Analizar intervalos divididos - Añadir motor de navegación en línea + Agregar enrutador en linea Invierno Agua Peatón @@ -3965,4 +3965,124 @@ Senderismo Bicicleta Automóvil + Clave API + Subido %1$d de %2$d + Límites de reservas naturales + %1$s → … + Subtipo + Vehículo + URL del servidor + Introduce parámetro + Cálculo de la ruta de prueba + Conduciendo + A pie + Bicicleta + Coche + Carpetas + Seleccionar carpeta + Selecciona carpeta o agrega una nueva + Vacío + Subir a OpenStreetMap + Renombrar traza + seg + Giro + Iniciar grabación + Mostrar pista en el mapa + Silla de ruedas + Senderismo + Andando + Ciclismo eléctrico + Ciclismo de montaña + Ciclismo de carretera + Ciclismo normal + Vehículo pesado + Camión pequeño + Camión + Escúter + Bicicleta de carreras + MTB + Subiendo + Subida completa + Subiendo %1$d de %2$d + Seleccionar segmentos + %1$s contiene más de un segmento, necesitas seleccionar la parte necesaria para la navegación. + Segmento %1$d + Seleccionar ediciones a subir + Utiliza las restricciones viales que están activas ahora en el mapa + Ruta más corta optimizada (ahorro de energía) + Selecciona el propósito de conducción para obtener una ruta más corta, más rápida o más segura + El icono de ubicación actual seguirá la ruta de navegación actual + No gira la vista del mapa si la velocidad es inferior a un umbral + Reiniciar + Todas las regiones + ¿Borrar %1$d archivos\? + Parar sin guardar + Guardar y detener la grabación + Grabación de traza detenida + ¿Seguro que quieres dejar de grabar\? +\nSe perderán todos los datos no guardados. + En pausa + Es necesario reiniciar la aplicación para aplicar algunos ajustes. + El enrutamiento podría evitar fuertes subidas. + Un conmutador para mostrar u ocultar el control de coordenadas en el mapa. + Distancia por toque + Última actualización de OpenStreetMap disponible: + Actualizado: %s + Última verificación: %s + Frecuencia de actualización + Las actualizaciones de los mapas se revisarán cada semana. La próxima vez %1$s en %2$s. + Las actualizaciones del mapa se comprobarán cada día. La próxima vez %1$s en %2$s. + Las actualizaciones del mapa se comprobarán cada hora. La próxima vez %1$s en %2$s. + Borrar las actualizaciones + ¿Seguro que deseas eliminar todas las %s actualizaciones en vivo\? + Compras + Selecciona una categoría o añada una nueva + La grabación continuará. + Copiar nombre de PDI + Mostrar/Ocultar + Intervalo + Ocultar los límites de las reservas naturales, las áreas protegidas y los parques nacionales + La traza no contiene dato de altitud. + La traza no contiene datos de velocidad. + Selecciona otro tipo de coloración. + El intervalo de registro establece el periodo de tiempo en el que OsmAnd pedirá los datos de la posición actual. + Guardar y continuar + Todos los datos no guardados se perderán. + Mostrar cuadro de diálogo de inicio + Si se desactiva, la grabación se iniciará justo después de tocar el control o el elemento de menú, saltándose el diálogo de confirmación. + Personalizar la línea de ruta + Línea de ruta + La línea de ruta sería usar %1$s especificada en el estilo de mapa seleccionado: %2$s. + Especifica el color para el modo de mapa: %1$s. + No tienes compras + Nuevo dispositivo / nueva cuenta + Si tienes alguna duda, ponte en contacto con nosotros en %1$s. + Por favor, sigue este enlace si tiense algún problema con las compras. + Contacta con asistencia + Si tus compras no aparecen aquí, pulsa sobre \"%1$s\", o ponte en contacto con nuestro equipo de asistencia. + Solución de problemas + OsmAnd En vivo + Suscripción anual + Suscripción mensual + Suscripción de tres meses + Próxima fecha de facturación: %1$s + Cancelado + Renovar la suscripción + En periodo de gracia + En espera + Expirado + - Las actualizaciones de OsmAnd Live se han movido a \"Descargas > Actualizaciones\". +\n +\n - Los tracks ahora pueden ser coloreados por altitud, velocidad o pendiente. +\n +\n - Añadida la opción de cambiar la apariencia de la línea de la ruta de navegación +\n +\n - Actualizado el cuadro de diálogo \"Grabación del viaje\". +\n +\n + ¿Actualizar todos los mapas añadidos a %1$s\? + Número de salida + Anunciar cuando se excede + Puntos de usuario + Salida \ No newline at end of file From 60b346373f94a68c7db5ae766dbac121a73d2767 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Sun, 11 Apr 2021 12:19:49 +0300 Subject: [PATCH 30/37] Fix MapMultiSelectionMenu menu for tracks --- .../plus/audionotes/AudioNotesLayer.java | 5 +++++ .../plus/mapillary/MapillaryVectorLayer.java | 6 +++++ .../measurementtool/MeasurementToolLayer.java | 6 +++++ .../net/osmand/plus/osmedit/OsmBugsLayer.java | 6 +++++ .../osmand/plus/osmedit/OsmEditsLayer.java | 5 +++++ .../plus/views/layers/AidlMapLayer.java | 10 +++++++-- .../plus/views/layers/ContextMenuLayer.java | 4 +++- .../views/layers/DownloadedRegionsLayer.java | 6 +++++ .../plus/views/layers/FavouritesLayer.java | 5 +++++ .../osmand/plus/views/layers/GPXLayer.java | 22 +++++++++++-------- .../views/layers/ImpassableRoadsLayer.java | 5 +++++ .../plus/views/layers/MapMarkersLayer.java | 5 +++++ .../osmand/plus/views/layers/POIMapLayer.java | 6 +++++ .../plus/views/layers/PointLocationLayer.java | 11 ++++++++-- .../views/layers/PointNavigationLayer.java | 9 +++++++- .../osmand/plus/views/layers/RouteLayer.java | 8 ++++++- .../views/layers/TransportStopsLayer.java | 15 +++++++++---- 17 files changed, 114 insertions(+), 20 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java index 96ce49d8db..727e7d683b 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java @@ -169,6 +169,11 @@ public class AudioNotesLayer extends OsmandMapLayer implements return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List objects, boolean unknownLocation) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java index 09d7e7b7e4..9f80a25201 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryVectorLayer.java @@ -6,6 +6,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import com.vividsolutions.jts.geom.Coordinate; @@ -346,6 +347,11 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + private void getImagesFromPoint(RotatedTileBox tb, PointF point, List images) { Map points = this.visiblePoints; if (points != null) { diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java index 7e6a1439ee..4da4e357f5 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import net.osmand.GPXUtilities.TrkSegment; @@ -516,6 +517,11 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + private Location getLocationFromLL(double lat, double lon) { Location l = new Location(""); l.setLatitude(lat); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index 013ba37d5b..23bff39f89 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.EditText; import android.widget.Toast; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import net.osmand.PlatformUtil; @@ -467,6 +468,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res, boolean unknownLocation) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java index a0fe1c1af2..3b416ac915 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditsLayer.java @@ -194,6 +194,11 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o, boolean unknownLocation) { if (tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java index 8107943408..45600b8592 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/AidlMapLayer.java @@ -24,13 +24,14 @@ import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.OsmandApplication; -import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MapContextMenu; +import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider; +import net.osmand.plus.views.layers.MapTextLayer.MapTextProvider; import net.osmand.plus.widgets.tools.CropCircleTransformation; import java.io.IOException; @@ -46,7 +47,7 @@ import java.util.concurrent.ConcurrentHashMap; import static net.osmand.aidl.ConnectedApp.AIDL_LAYERS_PREFIX; -public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider, MapTextLayer.MapTextProvider { +public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider, MapTextProvider { private static final float POINT_IMAGE_VERTICAL_OFFSET = 0.91f; @@ -281,6 +282,11 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o, boolean unknownLocation) { if (isLayerEnabled()) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java index 4c2a63db9e..1efe5972b8 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java @@ -609,7 +609,7 @@ public class ContextMenuLayer extends OsmandMapLayer { String title = pointDescription == null ? "" : pointDescription.getName(); mAddGpxPointBottomSheetHelper.setTitle(title); view.getAnimatedDraggingThread().startMoving(latLon.getLatitude(), latLon.getLongitude(), view.getZoom(), true); - } else { + } else if (provider == null || !provider.showMenuAction(object)) { selectedObjectContextMenuProvider = provider; hideVisibleMenues(); activity.getMapViewTrackingUtilities().setMapLinkedToLocation(false); @@ -1106,6 +1106,8 @@ public class ContextMenuLayer extends OsmandMapLayer { boolean isObjectClickable(Object o); boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation); + + boolean showMenuAction(@Nullable Object o); } public interface IMoveObjectProvider { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java index a624b8412c..f170e005cb 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/DownloadedRegionsLayer.java @@ -13,6 +13,7 @@ import android.util.DisplayMetrics; import android.view.WindowManager; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import net.osmand.IndexConstants; import net.osmand.binary.BinaryMapDataObject; @@ -580,6 +581,11 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + private void getWorldRegionFromPoint(RotatedTileBox tb, PointF point, List dataObjects) { int zoom = tb.getZoom(); if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION diff --git a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java index 5e4f95f136..656568b425 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java @@ -227,6 +227,11 @@ public class FavouritesLayer extends OsmandMapLayer implements IContextMenuProvi return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res, boolean unknownLocation) { if (this.settings.SHOW_FAVORITES.get() && tileBox.getZoom() >= startZoom) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index 24a6d244bb..2531b78a51 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -1108,13 +1108,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM @Override public boolean runExclusiveAction(Object object, boolean unknownLocation) { - if (unknownLocation || !(object instanceof SelectedGpxPoint)) { - return false; - } - MapActivity mapActivity = (MapActivity) view.getContext(); - SelectedGpxPoint point = (SelectedGpxPoint) object; - TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), point, null, null, false); - return true; + return false; } @Override @@ -1158,14 +1152,24 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM SelectedGpxPoint selectedGpxPoint = (SelectedGpxPoint) trackPoints.get(0); WptPt wptPt = selectedGpxPoint.getSelectedPoint(); PointDescription description = getObjectName(selectedGpxPoint); - ContextMenuLayer contextMenuLayer = mapActivity.getMapLayers().getContextMenuLayer(); - contextMenuLayer.showContextMenu(new LatLon(wptPt.lat, wptPt.lon), description, selectedGpxPoint, this); + mapActivity.getContextMenu().show(new LatLon(wptPt.lat, wptPt.lon), description, selectedGpxPoint); return true; } } return false; } + @Override + public boolean showMenuAction(@Nullable Object object) { + if (!(object instanceof SelectedGpxPoint)) { + return false; + } + MapActivity mapActivity = (MapActivity) view.getContext(); + SelectedGpxPoint point = (SelectedGpxPoint) object; + TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), point, null, null, false); + return true; + } + @Override public LatLon getTextLocation(WptPt o) { return new LatLon(o.lat, o.lon); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java index 09f84ba6e3..e2bd7944e2 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ImpassableRoadsLayer.java @@ -142,6 +142,11 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o, boolean unknownLocation) { if (tileBox.getZoom() >= START_ZOOM) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java index a8d79b4519..b6496222f8 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java @@ -531,6 +531,11 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi return true; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o, boolean unknownLocation) { if (tileBox.getZoom() < 3 || !map.getMyApplication().getSettings().SHOW_MAP_MARKERS.get()) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java index c264b67b0f..1adeed7671 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/POIMapLayer.java @@ -16,6 +16,7 @@ import android.widget.LinearLayout.LayoutParams; import android.widget.ScrollView; import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; @@ -408,6 +409,11 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public LatLon getTextLocation(Amenity o) { return o.getLocation(); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java index 2021f5d32f..29626e602e 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java @@ -13,6 +13,7 @@ import android.graphics.RectF; import android.graphics.drawable.LayerDrawable; import androidx.annotation.ColorInt; +import androidx.annotation.Nullable; import androidx.appcompat.content.res.AppCompatResources; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; @@ -22,14 +23,15 @@ import net.osmand.PlatformUtil; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; -import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.OsmAndLocationProvider; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.base.MapViewTrackingUtilities; import net.osmand.plus.profiles.ProfileIconColors; +import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider; import org.apache.commons.logging.Log; @@ -38,7 +40,7 @@ import java.util.List; import static android.graphics.Paint.ANTI_ALIAS_FLAG; import static android.graphics.Paint.FILTER_BITMAP_FLAG; -public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class PointLocationLayer extends OsmandMapLayer implements IContextMenuProvider { private static final Log LOG = PlatformUtil.getLog(PointLocationLayer.class); protected final static int RADIUS = 7; @@ -240,6 +242,11 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + private LatLon getMyLocation() { Location location = locationProvider.getLastKnownLocation(); if (location != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java index 26899516e3..17ddaf6c6c 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/PointNavigationLayer.java @@ -23,11 +23,13 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider; +import net.osmand.plus.views.layers.ContextMenuLayer.IMoveObjectProvider; import java.util.List; public class PointNavigationLayer extends OsmandMapLayer implements - IContextMenuProvider, ContextMenuLayer.IMoveObjectProvider { + IContextMenuProvider, IMoveObjectProvider { + protected final static int DIST_TO_SHOW = 80; private Paint mPoint; @@ -186,6 +188,11 @@ public class PointNavigationLayer extends OsmandMapLayer implements return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List o, boolean unknownLocation) { if (tileBox.getZoom() >= 3) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java index f73a44f0ba..01e6765000 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/RouteLayer.java @@ -46,6 +46,7 @@ import net.osmand.plus.routing.TransportRoutingHelper; import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider; import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWay; import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWayContext; import net.osmand.plus.views.layers.geometry.RouteGeometryWay; @@ -67,7 +68,7 @@ import java.util.Map; import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_WIDTH_ATTR; -public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class RouteLayer extends OsmandMapLayer implements IContextMenuProvider { private static final Log log = PlatformUtil.getLog(RouteLayer.class); @@ -815,4 +816,9 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont public boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation) { return false; } + + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java index 082b8998df..14a8575df0 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/TransportStopsLayer.java @@ -8,6 +8,7 @@ import android.util.DisplayMetrics; import android.view.WindowManager; import androidx.annotation.DrawableRes; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import net.osmand.ResultMatcher; @@ -21,16 +22,17 @@ import net.osmand.data.TransportStop; import net.osmand.osm.edit.Node; import net.osmand.osm.edit.Way; import net.osmand.plus.OsmandApplication; -import net.osmand.plus.base.PointImageDrawable; -import net.osmand.plus.settings.backend.CommonPreference; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.PointImageDrawable; import net.osmand.plus.render.RenderingIcons; +import net.osmand.plus.settings.backend.CommonPreference; +import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.transport.TransportStopRoute; import net.osmand.plus.transport.TransportStopType; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider; import net.osmand.plus.views.layers.geometry.GeometryWay; import java.io.IOException; @@ -40,7 +42,7 @@ import java.util.Comparator; import java.util.List; import java.util.TreeSet; -public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { +public class TransportStopsLayer extends OsmandMapLayer implements IContextMenuProvider { public static final String TRANSPORT_STOPS_OVER_MAP = "transportStops"; @@ -308,6 +310,11 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa return false; } + @Override + public boolean showMenuAction(@Nullable Object o) { + return false; + } + @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List res, boolean unknownLocation) { if(tileBox.getZoom() >= startZoomRoute && stopRoute != null) { From 1ce74b23eab4627852ad7cf91344a5b8ed729c0c Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Sun, 11 Apr 2021 20:47:07 +0300 Subject: [PATCH 31/37] Remove unused strings, use Unicode character instead three dots, move method getActionText() to parent class --- OsmAnd/res/values-ar/strings.xml | 1 - OsmAnd/res/values-de/strings.xml | 1 - OsmAnd/res/values-eo/strings.xml | 1 - OsmAnd/res/values-es-rAR/strings.xml | 1 - OsmAnd/res/values-fr/strings.xml | 1 - OsmAnd/res/values-hu/strings.xml | 1 - OsmAnd/res/values-iw/strings.xml | 1 - OsmAnd/res/values-pt/strings.xml | 1 - OsmAnd/res/values-uk/strings.xml | 1 - OsmAnd/res/values/strings.xml | 1 - .../plus/quickaction/SwitchableAction.java | 63 ++++++++++++++----- .../quickaction/actions/MapStyleAction.java | 7 --- .../plus/rastermaps/MapOverlayAction.java | 9 --- .../plus/rastermaps/MapSourceAction.java | 10 --- .../plus/rastermaps/MapUnderlayAction.java | 9 --- 15 files changed, 49 insertions(+), 59 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 3b5b131c57..073b26b6a2 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -4154,5 +4154,4 @@ الإعلان عند التجاوز نقاط المستخدم المخرج - %1$s ← … \ No newline at end of file diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 094ba47620..dae511a7f4 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -4089,5 +4089,4 @@ Meldung bei Überschreitung Anwenderpunkte Leistung - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 54026c0c08..5df11bbf9d 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -4085,5 +4085,4 @@ Numero de elirejo Poentoj de uzanto Eligo - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index bcf6918377..c7a7007a59 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -4087,5 +4087,4 @@ Anunciar al excederse Puntos de usuario Salida - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index b45c597a1a..8fa7588019 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -4075,5 +4075,4 @@ Numéro de sortie Annoncer en cas de dépassement Sortie - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 9709e8bce8..ced108288e 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -4074,7 +4074,6 @@ Várakoztatva Lejárt Frissüljön minden térkép, amely hozzá lett adva ehhez: %1$s\? - %1$s → … Kijárat száma Értesítés túllépéskor Felhasználói pontok diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index e7684a1670..8fee045082 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -4087,5 +4087,4 @@ להכריז בחריגה נקודות משתמש פלט - %1$s ← … \ No newline at end of file diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index e1558ef4be..9dd4028264 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -4089,5 +4089,4 @@ Anunciar quando ultrapassado Pontos do utilizador Saída - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index ecfadc84d3..051d717f3c 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -4084,5 +4084,4 @@ Повідомляти про перевищення Користувацькі точки Вивід - %1$s → … \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 5bac9b0326..9959488bd2 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -12,7 +12,6 @@ --> - %1$s %2$s … Output User points Announce when exceeded diff --git a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java index f1bc2c927a..f912e9260f 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java @@ -13,7 +13,6 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.StringRes; import androidx.appcompat.widget.SwitchCompat; @@ -32,12 +31,22 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static net.osmand.AndroidUtils.isLayoutRtl; + public abstract class SwitchableAction extends QuickAction { public static final String KEY_ID = "id"; - + protected static final String KEY_DIALOG = "dialog"; + private final static String MAP_STYLE_ACTION = "mapstyle.change"; + private final static String MAP_SOURCE_ACTION = "mapsource.change"; + private final static String MAP_OVERLAY_ACTION = "mapoverlay.change"; + private final static String MAP_UNDERLAY_ACTION = "mapunderlay.change"; + + private final static String KEY_NO_OVERLAY = "no_overlay"; + private final static String KEY_NO_UNDERLAY = "no_underlay"; + private transient EditText title; private transient Adapter adapter; @@ -62,7 +71,7 @@ public abstract class SwitchableAction extends QuickAction { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.quick_action_switchable_action, parent, false); - final SwitchCompat showDialog = (SwitchCompat) view.findViewById(R.id.saveButton); + final SwitchCompat showDialog = view.findViewById(R.id.saveButton); if (!getParams().isEmpty()) { showDialog.setChecked(Boolean.valueOf(getParams().get(KEY_DIALOG))); } @@ -74,7 +83,7 @@ public abstract class SwitchableAction extends QuickAction { } }); - RecyclerView list = (RecyclerView) view.findViewById(R.id.list); + RecyclerView list = view.findViewById(R.id.list); adapter = new Adapter(activity, new QuickActionListFragment.OnStartDragListener() { @Override public void onStartDrag(RecyclerView.ViewHolder viewHolder) { @@ -92,9 +101,9 @@ public abstract class SwitchableAction extends QuickAction { list.setAdapter(adapter); - TextView dscrTitle = (TextView) view.findViewById(R.id.textDscrTitle); - TextView dscrHint = (TextView) view.findViewById(R.id.textDscrHint); - Button addBtn = (Button) view.findViewById(R.id.btnAdd); + TextView dscrTitle = view.findViewById(R.id.textDscrTitle); + TextView dscrHint = view.findViewById(R.id.textDscrHint); + Button addBtn = view.findViewById(R.id.btnAdd); dscrTitle.setText(parent.getContext().getString(getDiscrTitle()) + ":"); dscrHint.setText(getDiscrHint()); @@ -104,10 +113,36 @@ public abstract class SwitchableAction extends QuickAction { parent.addView(view); } + @Override + public String getActionText(OsmandApplication application) { + String currentSource = ""; + switch (getActionType().getStringId()) { + case MAP_STYLE_ACTION: + currentSource = application.getSettings().RENDERER.get(); + break; + case MAP_SOURCE_ACTION: + currentSource = application.getSettings().MAP_ONLINE_DATA.get() + ? application.getSettings().MAP_TILE_SOURCES.get() + : application.getString(R.string.vector_data); + break; + case MAP_OVERLAY_ACTION: + currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY + : application.getSettings().MAP_OVERLAY.get(); + break; + case MAP_UNDERLAY_ACTION: + currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY + : application.getSettings().MAP_UNDERLAY.get(); + break; + } + String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; + + return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, currentSource), arrowDirection + "\u2026"); + } + @Override public boolean fillParams(View root, MapActivity activity) { - final RecyclerView list = (RecyclerView) root.findViewById(R.id.list); + final RecyclerView list = root.findViewById(R.id.list); final Adapter adapter = (Adapter) list.getAdapter(); boolean hasParams = adapter.itemsList != null && !adapter.itemsList.isEmpty(); @@ -124,7 +159,7 @@ public abstract class SwitchableAction extends QuickAction { public abstract List loadListFromParams(); public abstract void executeWithParams(MapActivity activity, String params); - + public abstract String getTranslatedItemName(Context context, String item); protected void showChooseDialog(FragmentManager fm) { @@ -143,7 +178,7 @@ public abstract class SwitchableAction extends QuickAction { private List itemsList = new ArrayList<>(); private final QuickActionListFragment.OnStartDragListener onStartDragListener; - private Context context; + private final Context context; public Adapter(Context context, QuickActionListFragment.OnStartDragListener onStartDragListener) { this.context = context; @@ -293,10 +328,10 @@ public abstract class SwitchableAction extends QuickAction { public ItemHolder(View itemView) { super(itemView); - title = (TextView) itemView.findViewById(R.id.title); - handleView = (ImageView) itemView.findViewById(R.id.handle_view); - closeBtn = (ImageView) itemView.findViewById(R.id.closeImageButton); - icon = (ImageView) itemView.findViewById(R.id.imageView); + title = itemView.findViewById(R.id.title); + handleView = itemView.findViewById(R.id.handle_view); + closeBtn = itemView.findViewById(R.id.closeImageButton); + icon = itemView.findViewById(R.id.imageView); } } } diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java index c487cd494c..3e2d297566 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java @@ -248,11 +248,4 @@ public class MapStyleAction extends SwitchableAction { : filters.get(0); } - @Override - public String getActionText(OsmandApplication application) { - String currentSource = application.getSettings().RENDERER.get(); - String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - - return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); - } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java index cc01b93e24..ac341d9b50 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java @@ -226,13 +226,4 @@ public class MapOverlayAction extends SwitchableAction> { getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked())); return super.fillParams(root, activity); } - - @Override - public String getActionText(OsmandApplication application) { - String currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY - : application.getSettings().MAP_OVERLAY.get(); - String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - - return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); - } } diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java index 187e6e262a..92c08f8745 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java @@ -216,14 +216,4 @@ public class MapSourceAction extends SwitchableAction> { getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked())); return super.fillParams(root, activity); } - - @Override - public String getActionText(OsmandApplication application) { - String currentSource = application.getSettings().MAP_ONLINE_DATA.get() - ? application.getSettings().MAP_TILE_SOURCES.get() - : application.getString(R.string.vector_data); - String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - - return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); - } } diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java index fa7aae54c0..704afc47a2 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java @@ -228,13 +228,4 @@ public class MapUnderlayAction extends SwitchableAction> { getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked())); return super.fillParams(root, activity); } - - @Override - public String getActionText(OsmandApplication application) { - String currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY - : application.getSettings().MAP_UNDERLAY.get(); - String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - - return application.getString(R.string.map_quick_action_arrow_direction_pattern, getTranslatedItemName(application, currentSource), arrowDirection); - } } From f73fd429315d3d4262ab9fa7626821cdd1cd2717 Mon Sep 17 00:00:00 2001 From: max-klaus Date: Sun, 11 Apr 2021 22:09:24 +0300 Subject: [PATCH 32/37] [WIP] test backups --- OsmAnd/AndroidManifest.xml | 1 + OsmAnd/res/layout/test_backup_layout.xml | 151 +++++++ OsmAnd/res/xml/development_settings.xml | 7 + .../src/net/osmand/AndroidNetworkUtils.java | 79 +++- .../src/net/osmand/plus/AnalyticsHelper.java | 2 +- .../DevelopmentSettingsFragment.java | 7 + .../plus/development/TestBackupActivity.java | 400 ++++++++++++++++++ .../plus/settings/backend/OsmandSettings.java | 7 + build.gradle | 2 +- 9 files changed, 649 insertions(+), 7 deletions(-) create mode 100644 OsmAnd/res/layout/test_backup_layout.xml create mode 100644 OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index 5cc90e170d..7ca98ddfc8 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -1026,6 +1026,7 @@ + diff --git a/OsmAnd/res/layout/test_backup_layout.xml b/OsmAnd/res/layout/test_backup_layout.xml new file mode 100644 index 0000000000..216820a9bf --- /dev/null +++ b/OsmAnd/res/layout/test_backup_layout.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/xml/development_settings.xml b/OsmAnd/res/xml/development_settings.xml index 231bd469bc..75079dd7ed 100644 --- a/OsmAnd/res/xml/development_settings.xml +++ b/OsmAnd/res/xml/development_settings.xml @@ -70,6 +70,13 @@ android:summary="@string/play_commands_of_currently_selected_voice" android:title="@string/test_voice_prompts" /> + + getAdditionalParams(@NonNull File file); + void onFileUploadProgress(@NonNull File file, int percent); + void onFilesUploadDone(@NonNull Map errors); + } + public static class RequestResponse { private Request request; private String response; @@ -156,7 +166,7 @@ public class AndroidNetworkUtils { String params = null; if (parameters != null && parameters.size() > 0) { StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : parameters.entrySet()) { + for (Entry entry : parameters.entrySet()) { if (sb.length() > 0) { sb.append("&"); } @@ -296,16 +306,18 @@ public class AndroidNetworkUtils { private static final String BOUNDARY = "CowMooCowMooCowCowCow"; - public static String uploadFile(String urlText, File file, boolean gzip, Map additionalParams) throws IOException { - return uploadFile(urlText, new FileInputStream(file), file.getName(), gzip, additionalParams); + public static String uploadFile(@NonNull String urlText, @NonNull File file, boolean gzip, + @NonNull Map additionalParams, @Nullable Map headers) throws IOException { + return uploadFile(urlText, new FileInputStream(file), file.getName(), gzip, additionalParams, headers); } - public static String uploadFile(String urlText, InputStream inputStream, String fileName, boolean gzip, Map additionalParams) { + public static String uploadFile(@NonNull String urlText, @NonNull InputStream inputStream, @NonNull String fileName, boolean gzip, + Map additionalParams, @Nullable Map headers) { URL url; try { boolean firstPrm = !urlText.contains("?"); StringBuilder sb = new StringBuilder(urlText); - for (Map.Entry entry : additionalParams.entrySet()) { + for (Entry entry : additionalParams.entrySet()) { sb.append(firstPrm ? "?" : "&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")); firstPrm = false; } @@ -320,6 +332,11 @@ public class AndroidNetworkUtils { conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); conn.setRequestProperty("User-Agent", "OsmAnd"); + if (headers != null) { + for (Entry header : headers.entrySet()) { + conn.setRequestProperty(header.getKey(), header.getValue()); + } + } OutputStream ous = conn.getOutputStream(); ous.write(("--" + BOUNDARY + "\r\n").getBytes()); @@ -376,6 +393,58 @@ public class AndroidNetworkUtils { } } + public static void uploadFilesAsync(final @NonNull String url, + final @NonNull List files, + final boolean gzip, + final @NonNull Map parameters, + final @Nullable Map headers, + final OnFilesUploadCallback callback) { + + new AsyncTask>() { + + @Override + @NonNull + protected Map doInBackground(Void... v) { + Map errors = new HashMap<>(); + for (File file : files) { + publishProgress(file, 0); + try { + Map params = new HashMap<>(parameters); + if (callback != null) { + Map additionalParams = callback.getAdditionalParams(file); + if (additionalParams != null) { + params.putAll(additionalParams); + } + } + String res = uploadFile(url, file, gzip, params, headers); + if (res != null) { + errors.put(file, res); + } + } catch (Exception e) { + errors.put(file, e.getMessage()); + } + publishProgress(file, 100); + } + return errors; + } + + @Override + protected void onProgressUpdate(Object... objects) { + if (callback != null) { + callback.onFileUploadProgress((File) objects[0], (Integer) objects[1]); + } + } + + @Override + protected void onPostExecute(@NonNull Map errors) { + if (callback != null) { + callback.onFilesUploadDone(errors); + } + } + + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + } + private static void showToast(OsmandApplication ctx, String message) { ctx.showToastMessage(message); } diff --git a/OsmAnd/src/net/osmand/plus/AnalyticsHelper.java b/OsmAnd/src/net/osmand/plus/AnalyticsHelper.java index 2fd12a11ac..e8d04254c3 100644 --- a/OsmAnd/src/net/osmand/plus/AnalyticsHelper.java +++ b/OsmAnd/src/net/osmand/plus/AnalyticsHelper.java @@ -184,7 +184,7 @@ public class AnalyticsHelper extends SQLiteOpenHelper { String jsonStr = json.toString(); InputStream inputStream = new ByteArrayInputStream(jsonStr.getBytes()); - String res = AndroidNetworkUtils.uploadFile(ANALYTICS_UPLOAD_URL, inputStream, ANALYTICS_FILE_NAME, true, additionalData); + String res = AndroidNetworkUtils.uploadFile(ANALYTICS_UPLOAD_URL, inputStream, ANALYTICS_FILE_NAME, true, additionalData, null); if (res != null) { return; } diff --git a/OsmAnd/src/net/osmand/plus/development/DevelopmentSettingsFragment.java b/OsmAnd/src/net/osmand/plus/development/DevelopmentSettingsFragment.java index d34a306b79..9ffe2d12bf 100644 --- a/OsmAnd/src/net/osmand/plus/development/DevelopmentSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/development/DevelopmentSettingsFragment.java @@ -48,6 +48,7 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment { setupSimulateInitialStartupPref(); setupShouldShowFreeVersionBannerPref(); setupTestVoiceCommandsPref(); + setupTestBackupsPref(); setupLogcatBufferPref(); Preference info = findPreference("info"); @@ -117,6 +118,12 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment { testVoiceCommands.setIconSpaceReserved(false); } + private void setupTestBackupsPref() { + Preference testBackups = findPreference("test_backup"); + testBackups.setIntent(new Intent(getActivity(), TestBackupActivity.class)); + testBackups.setIconSpaceReserved(false); + } + private void setupLogcatBufferPref() { Preference logcatBuffer = findPreference("logcat_buffer"); logcatBuffer.setIntent(new Intent(getActivity(), LogcatActivity.class)); diff --git a/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java new file mode 100644 index 0000000000..85bc84cd95 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java @@ -0,0 +1,400 @@ +package net.osmand.plus.development; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Patterns; +import android.util.TypedValue; +import android.view.View; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; + +import net.osmand.AndroidNetworkUtils; +import net.osmand.AndroidNetworkUtils.OnFilesUploadCallback; +import net.osmand.AndroidNetworkUtils.OnRequestResultListener; +import net.osmand.AndroidUtils; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.ProgressImplementation; +import net.osmand.plus.R; +import net.osmand.plus.UiUtilities; +import net.osmand.plus.UiUtilities.DialogButtonType; +import net.osmand.plus.activities.OsmandActionBarActivity; +import net.osmand.plus.settings.backend.OsmandSettings; +import net.osmand.util.Algorithms; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TestBackupActivity extends OsmandActionBarActivity { + + private static final String TEST_ORDER_ID = "460000687003939"; + + private OsmandApplication app; + private OsmandSettings settings; + + private ProgressBar progressBar; + private View buttonRegister; + private View buttonVerify; + private View buttonBackup; + private View buttonRestore; + private EditText emailEditText; + private EditText tokenEditText; + private TextView infoView; + + public interface OnResultListener { + void onResult(boolean success, @Nullable String result); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + app = getMyApplication(); + settings = app.getSettings(); + final WeakReference activityRef = new WeakReference<>(this); + + boolean nightMode = !app.getSettings().isLightContent(); + int themeId = nightMode ? R.style.OsmandDarkTheme_NoActionbar : R.style.OsmandLightTheme_NoActionbar; + setTheme(themeId); + super.onCreate(savedInstanceState); + setContentView(R.layout.test_backup_layout); + Toolbar tb = findViewById(R.id.toolbar); + tb.setTitle("Backup test"); + + tb.setClickable(true); + Drawable icBack = ((OsmandApplication) getApplication()).getUIUtilities().getIcon(AndroidUtils.getNavigationIconResId(app)); + tb.setNavigationIcon(icBack); + tb.setNavigationContentDescription(R.string.access_shared_string_navigate_up); + tb.setBackgroundColor(getResources().getColor(resolveResourceId(this, R.attr.pstsTabBackground))); + tb.setTitleTextColor(getResources().getColor(resolveResourceId(this, R.attr.pstsTextColor))); + tb.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(final View v) { + finish(); + } + }); + + buttonRegister = findViewById(R.id.btn_register); + UiUtilities.setupDialogButton(nightMode, buttonRegister, DialogButtonType.PRIMARY, "Register"); + buttonVerify = findViewById(R.id.btn_verify); + UiUtilities.setupDialogButton(nightMode, buttonVerify, DialogButtonType.PRIMARY, "Verify"); + buttonBackup = findViewById(R.id.btn_backup); + UiUtilities.setupDialogButton(nightMode, buttonBackup, DialogButtonType.PRIMARY, "Backup"); + buttonRestore = findViewById(R.id.btn_restore); + UiUtilities.setupDialogButton(nightMode, buttonRestore, DialogButtonType.PRIMARY, "Restore"); + + tokenEditText = findViewById(R.id.edit_token); + infoView = findViewById(R.id.text_info); + progressBar = findViewById(R.id.progress_bar); + + buttonVerify.setEnabled(false); + emailEditText = findViewById(R.id.edit_email); + String email = settings.BACKUP_USER_EMAIL.get(); + if (!Algorithms.isEmpty(email)) { + emailEditText.setText(email); + } + buttonRegister.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String email = emailEditText.getText().toString(); + if (isEmailValid(email)) { + buttonRegister.setEnabled(false); + settings.BACKUP_USER_EMAIL.set(email); + progressBar.setVisibility(View.VISIBLE); + registerUser(email, new OnResultListener() { + @Override + public void onResult(boolean success, @Nullable String result) { + TestBackupActivity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + a.progressBar.setVisibility(View.GONE); + a.buttonRegister.setEnabled(!success); + a.buttonVerify.setEnabled(success); + a.tokenEditText.requestFocus(); + } + } + }); + } else { + emailEditText.requestFocus(); + emailEditText.setError(getString(R.string.osm_live_enter_email)); + } + } + }); + buttonVerify.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String token = tokenEditText.getText().toString(); + if (isTokenValid(token)) { + buttonVerify.setEnabled(false); + progressBar.setVisibility(View.VISIBLE); + registerDevice(token, new OnResultListener() { + @Override + public void onResult(boolean success, @Nullable String result) { + TestBackupActivity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + a.progressBar.setVisibility(View.GONE); + a.buttonVerify.setEnabled(!success); + a.loadBackupInfo(); + } + } + }); + } else { + tokenEditText.requestFocus(); + tokenEditText.setError("Token is not valid"); + buttonVerify.setEnabled(true); + } + } + }); + buttonBackup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + uploadFiles(); + } + }); + buttonRestore.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + + loadBackupInfo(); + } + + private void loadBackupInfo() { + if (!Algorithms.isEmpty(getDeviceId()) && !Algorithms.isEmpty(getAccessToken())) { + final WeakReference activityRef = new WeakReference<>(this); + progressBar.setVisibility(View.VISIBLE); + loadBackupInfo(new OnResultListener() { + @Override + public void onResult(boolean success, @Nullable String result) { + TestBackupActivity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + a.progressBar.setVisibility(View.GONE); + a.infoView.setText(result); + a.infoView.requestFocus(); + } + } + }); + } + } + + private boolean isEmailValid(CharSequence target) { + return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches()); + } + + private String getOrderId() { + return TEST_ORDER_ID; + } + + private String getDeviceId() { + return settings.BACKUP_DEVICE_ID.get(); + } + + private String getAccessToken() { + return settings.BACKUP_ACCESS_TOKEN.get(); + } + + private void registerUser(@NonNull String email, @Nullable final OnResultListener listener) { + Map params = new HashMap<>(); + params.put("email", email); + params.put("orderid", getOrderId()); + params.put("deviceid", app.getUserAndroidId()); + AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/user-register", params, "Register user", true, true, new OnRequestResultListener() { + @Override + public void onResult(String resultJson) { + boolean success = false; + if (!Algorithms.isEmpty(resultJson)) { + try { + // {"status":"ok"} + JSONObject result = new JSONObject(resultJson); + String status = result.getString("status"); + success = status.equals("ok"); + app.showToastMessage(success + ? "You have been registered successfully. Please check for email with activation code." + : "User registration error: " + status); + } catch (JSONException e) { + app.showToastMessage("User registration error: json parsing"); + } + } else { + app.showToastMessage("User registration error: empty response"); + } + if (listener != null) { + listener.onResult(success, resultJson); + } + } + }); + } + + private void registerDevice(String token, @Nullable final OnResultListener listener) { + Map params = new HashMap<>(); + params.put("email", settings.BACKUP_USER_EMAIL.get()); + params.put("orderid", getOrderId()); + params.put("deviceid", app.getUserAndroidId()); + params.put("token", token); + AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/device-register", params, "Register device", true, true, new OnRequestResultListener() { + @Override + public void onResult(String resultJson) { + boolean success = false; + if (!Algorithms.isEmpty(resultJson)) { + try { + /* + { + "id": 1034, + "userid": 1033, + "deviceid": "2fa8080d2985a777", + "orderid": "460000687003939", + "accesstoken": "4bc0a61f-397a-4c3e-9ffc-db382ec00372", + "udpatetime": "Apr 11, 2021, 11:32:20 AM" + } + */ + JSONObject result = new JSONObject(resultJson); + settings.BACKUP_DEVICE_ID.set(result.getString("id")); + settings.BACKUP_USER_ID.set(result.getString("userid")); + settings.BACKUP_NATIVE_DEVICE_ID.set(result.getString("deviceid")); + settings.BACKUP_ACCESS_TOKEN.set(result.getString("accesstoken")); + settings.BACKUP_ACCESS_TOKEN_UPDATE_TIME.set(result.getString("udpatetime")); + success = true; + app.showToastMessage("Device have been registered successfully"); + } catch (JSONException e) { + app.showToastMessage("Device registration error: json parsing"); + } + } else { + app.showToastMessage("Device registration error: empty response"); + } + if (listener != null) { + listener.onResult(success, resultJson); + } + } + }); + } + + private void uploadFiles() { + //{"status":"ok"} + Map params = new HashMap<>(); + params.put("deviceid", getDeviceId()); + params.put("accessToken", getAccessToken()); + Map headers = new HashMap<>(); + headers.put("Accept-Encoding", "deflate, gzip"); + final List files = new ArrayList<>(); + + final ProgressImplementation progress = ProgressImplementation.createProgressDialog(this, + "Uploading files to server", "Files count: " + files.size(), ProgressDialog.STYLE_HORIZONTAL); + + File favoritesFile = app.getFavorites().getExternalFile(); + files.add(favoritesFile); + + AndroidNetworkUtils.uploadFilesAsync("https://osmand.net/userdata/upload-file", files, true, params, headers, new OnFilesUploadCallback() { + @Nullable + @Override + public Map getAdditionalParams(@NonNull File file) { + Map additionaParams = new HashMap<>(); + additionaParams.put("name", file.getName()); + additionaParams.put("type", Algorithms.getFileExtension(file)); + return additionaParams; + } + + @Override + public void onFileUploadProgress(@NonNull File file, int percent) { + if (percent < 100) { + progress.startTask(file.getName(), percent); + } else { + progress.finishTask(); + } + } + + @Override + public void onFilesUploadDone(@NonNull Map errors) { + app.runInUIThread(new Runnable() { + @Override + public void run() { + try { + if (progress.getDialog().isShowing()) { + progress.getDialog().dismiss(); + } + } catch (Exception e) { + //ignored + } + } + }, 300); + app.showToastMessage("Uploaded " + (files.size() - errors.size() + " files" + + (errors.size() > 0 ? ". Errors: " + errors.size() : ""))); + loadBackupInfo(); + } + }); + } + + private void loadBackupInfo(@Nullable final OnResultListener listener) { + Map params = new HashMap<>(); + params.put("deviceid", getDeviceId()); + params.put("accessToken", getAccessToken()); + AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/list-files", params, "Get backup info", true, false, new OnRequestResultListener() { + @Override + public void onResult(String resultJson) { + boolean success = false; + StringBuilder resultString = new StringBuilder(); + if (!Algorithms.isEmpty(resultJson)) { + try { + /* + { + "totalZipSize": 21792, + "totalFileSize": 185920, + "totalFiles": 1, + "totalFileVersions": 2, + "uniqueFiles": [ + { + "userid": 1033, + "id": 7, + "deviceid": 1034, + "filesize": 92960, + "type": "gpx", + "name": "test/Day 2.gpx", + "updatetime": "Apr 11, 2021, 1:49:01 PM", + "updatetimems": 1618141741822, + "zipSize": 10896 + } + ], + "deviceid": 1034 + } + */ + JSONObject result = new JSONObject(resultJson); + String totalZipSize = result.getString("totalZipSize"); + String totalFiles = result.getString("totalFiles"); + String totalFileVersions = result.getString("totalFileVersions"); + JSONArray files = result.getJSONArray("uniqueFiles"); + resultString.append("Total files: ").append(totalFiles).append("\n"); + resultString.append("Total zip size: ").append(AndroidUtils.formatSize(app, Long.parseLong(totalZipSize))).append("\n"); + resultString.append("Total file versions: ").append(totalFileVersions); + + success = true; + } catch (JSONException e) { + } + } + if (listener != null) { + listener.onResult(success, resultString.toString()); + } + } + }); + } + + private boolean isTokenValid(String token) { + return token.matches("[0-9]+"); + } + + private int resolveResourceId(final Activity activity, final int attr) { + final TypedValue typedvalueattr = new TypedValue(); + activity.getTheme().resolveAttribute(attr, typedvalueattr, true); + return typedvalueattr.resourceId; + } +} diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index 501d84d608..1a77de50fb 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -1165,6 +1165,13 @@ public class OsmandSettings { public final OsmandPreference DISCOUNT_TOTAL_SHOW = new IntPreference(this, "discount_total_show", 0).makeGlobal(); public final OsmandPreference DISCOUNT_SHOW_DATETIME_MS = new LongPreference(this, "show_discount_datetime_ms", 0).makeGlobal(); + public final OsmandPreference BACKUP_USER_EMAIL = new StringPreference(this, "backup_user_email", "").makeGlobal(); + public final OsmandPreference BACKUP_USER_ID = new StringPreference(this, "backup_user_id", "").makeGlobal(); + public final OsmandPreference BACKUP_DEVICE_ID = new StringPreference(this, "backup_device_id", "").makeGlobal(); + public final OsmandPreference BACKUP_NATIVE_DEVICE_ID = new StringPreference(this, "backup_native_device_id", "").makeGlobal(); + public final OsmandPreference BACKUP_ACCESS_TOKEN = new StringPreference(this, "backup_access_token", "").makeGlobal(); + public final OsmandPreference BACKUP_ACCESS_TOKEN_UPDATE_TIME = new StringPreference(this, "backup_access_token_update_time", "").makeGlobal(); + // this value string is synchronized with settings_pref.xml preference name public final OsmandPreference USER_OSM_BUG_NAME = new StringPreference(this, "user_osm_bug_name", "NoName/OsmAnd").makeGlobal().makeShared(); diff --git a/build.gradle b/build.gradle index 48bcc21248..9c0feb1c3d 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { //classpath 'com.android.tools.build:gradle:2.+' - classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'com.android.tools.build:gradle:4.1.3' classpath 'com.google.gms:google-services:3.0.0' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" From 84e25fa00b5cb3557d18d7be7cd11820742488aa Mon Sep 17 00:00:00 2001 From: max-klaus Date: Mon, 12 Apr 2021 11:16:57 +0300 Subject: [PATCH 33/37] Backup gpx files --- .../plus/development/TestBackupActivity.java | 238 ++++++++++++++++-- 1 file changed, 216 insertions(+), 22 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java index 85bc84cd95..fa76beffca 100644 --- a/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java @@ -3,6 +3,7 @@ package net.osmand.plus.development; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.drawable.Drawable; +import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.util.Patterns; @@ -20,6 +21,7 @@ import net.osmand.AndroidNetworkUtils; import net.osmand.AndroidNetworkUtils.OnFilesUploadCallback; import net.osmand.AndroidNetworkUtils.OnRequestResultListener; import net.osmand.AndroidUtils; +import net.osmand.IndexConstants; import net.osmand.plus.OsmandApplication; import net.osmand.plus.ProgressImplementation; import net.osmand.plus.R; @@ -281,56 +283,79 @@ public class TestBackupActivity extends OsmandActionBarActivity { } private void uploadFiles() { + LoadGpxTask loadGpxTask = new LoadGpxTask(this, new LoadGpxTask.OnLoadGpxListener() { + @Override + public void onLoadGpxDone(@NonNull List result) { + uploadFiles(result); + } + }); + loadGpxTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this); + } + + private void uploadFiles(List gpxFiles) { //{"status":"ok"} + final WeakReference activityRef = new WeakReference<>(this); + Map params = new HashMap<>(); params.put("deviceid", getDeviceId()); params.put("accessToken", getAccessToken()); Map headers = new HashMap<>(); headers.put("Accept-Encoding", "deflate, gzip"); - final List files = new ArrayList<>(); - - final ProgressImplementation progress = ProgressImplementation.createProgressDialog(this, - "Uploading files to server", "Files count: " + files.size(), ProgressDialog.STYLE_HORIZONTAL); + final Map gpxInfos = new HashMap<>(); + for (GpxInfo gpxFile : gpxFiles) { + gpxInfos.put(gpxFile.file, gpxFile); + } + final List files = new ArrayList<>(gpxInfos.keySet()); File favoritesFile = app.getFavorites().getExternalFile(); files.add(favoritesFile); + final ProgressImplementation progress = ProgressImplementation.createProgressDialog(this, + "Create backup", "Uploading " + files.size() + " file(s) to server", ProgressDialog.STYLE_HORIZONTAL); + AndroidNetworkUtils.uploadFilesAsync("https://osmand.net/userdata/upload-file", files, true, params, headers, new OnFilesUploadCallback() { @Nullable @Override public Map getAdditionalParams(@NonNull File file) { + GpxInfo gpxInfo = gpxInfos.get(file); Map additionaParams = new HashMap<>(); - additionaParams.put("name", file.getName()); + additionaParams.put("name", gpxInfo == null ? file.getName() : gpxInfo.getFileName(true)); additionaParams.put("type", Algorithms.getFileExtension(file)); return additionaParams; } @Override public void onFileUploadProgress(@NonNull File file, int percent) { - if (percent < 100) { - progress.startTask(file.getName(), percent); - } else { - progress.finishTask(); + Activity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + if (percent < 100) { + progress.startTask(file.getName(), percent); + } else { + progress.finishTask(); + } } } @Override public void onFilesUploadDone(@NonNull Map errors) { - app.runInUIThread(new Runnable() { - @Override - public void run() { - try { - if (progress.getDialog().isShowing()) { - progress.getDialog().dismiss(); + Activity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + app.runInUIThread(new Runnable() { + @Override + public void run() { + try { + if (progress.getDialog().isShowing()) { + progress.getDialog().dismiss(); + } + } catch (Exception e) { + //ignored } - } catch (Exception e) { - //ignored } - } - }, 300); - app.showToastMessage("Uploaded " + (files.size() - errors.size() + " files" + - (errors.size() > 0 ? ". Errors: " + errors.size() : ""))); - loadBackupInfo(); + }, 300); + app.showToastMessage("Uploaded " + (files.size() - errors.size() + " files" + + (errors.size() > 0 ? ". Errors: " + errors.size() : ""))); + loadBackupInfo(); + } } }); } @@ -397,4 +422,173 @@ public class TestBackupActivity extends OsmandActionBarActivity { activity.getTheme().resolveAttribute(attr, typedvalueattr, true); return typedvalueattr.resourceId; } + + private static class LoadGpxTask extends AsyncTask> { + + private final OsmandApplication app; + private final OnLoadGpxListener listener; + private final WeakReference activityRef; + private List result; + private ProgressImplementation progress; + + interface OnLoadGpxListener { + void onLoadGpxDone(@NonNull List result); + } + + LoadGpxTask(@NonNull Activity activity, @Nullable OnLoadGpxListener listener) { + this.activityRef = new WeakReference<>(activity); + this.app = (OsmandApplication) activity.getApplication(); + this.listener = listener; + } + + public List getResult() { + return result; + } + + @NonNull + @Override + protected List doInBackground(Activity... params) { + List result = new ArrayList<>(); + loadGPXData(app.getAppPath(IndexConstants.GPX_INDEX_DIR), result, this); + return result; + } + + public void loadFile(GpxInfo... loaded) { + publishProgress(loaded); + } + + @Override + protected void onPreExecute() { + Activity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + progress = ProgressImplementation.createProgressDialog(a, + "Create backup", "Collecting gpx files...", ProgressDialog.STYLE_HORIZONTAL); + } + } + + @Override + protected void onProgressUpdate(GpxInfo... values) { + Activity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + progress.startTask(values[0].getFileName(true), -1); + } + } + + @Override + protected void onPostExecute(@NonNull List result) { + this.result = result; + if (listener != null) { + listener.onLoadGpxDone(result); + } + Activity a = activityRef.get(); + if (AndroidUtils.isActivityNotDestroyed(a)) { + progress.finishTask(); + app.runInUIThread(new Runnable() { + @Override + public void run() { + try { + if (progress.getDialog().isShowing()) { + progress.getDialog().dismiss(); + } + } catch (Exception e) { + //ignored + } + } + }, 300); + } + } + + private void loadGPXData(File mapPath, List result, LoadGpxTask loadTask) { + if (mapPath.canRead()) { + List progress = new ArrayList<>(); + loadGPXFolder(mapPath, result, loadTask, progress, ""); + if (!progress.isEmpty()) { + loadTask.loadFile(progress.toArray(new GpxInfo[0])); + } + } + } + + private void loadGPXFolder(File mapPath, List result, LoadGpxTask loadTask, List progress, + String gpxSubfolder) { + File[] listFiles = mapPath.listFiles(); + if (listFiles != null) { + for (File gpxFile : listFiles) { + if (gpxFile.isDirectory()) { + String sub = gpxSubfolder.length() == 0 ? gpxFile.getName() : gpxSubfolder + "/" + + gpxFile.getName(); + loadGPXFolder(gpxFile, result, loadTask, progress, sub); + } else if (gpxFile.isFile() && gpxFile.getName().toLowerCase().endsWith(IndexConstants.GPX_FILE_EXT)) { + GpxInfo info = new GpxInfo(); + info.subfolder = gpxSubfolder; + info.file = gpxFile; + result.add(info); + progress.add(info); + if (progress.size() > 7) { + loadTask.loadFile(progress.toArray(new GpxInfo[0])); + progress.clear(); + } + } + } + } + } + } + + private static class GpxInfo { + public File file; + public String subfolder; + + private String name = null; + private int sz = -1; + private String fileName = null; + + public String getName() { + if (name == null) { + name = formatName(file.getName()); + } + return name; + } + + private String formatName(String name) { + int ext = name.lastIndexOf('.'); + if (ext != -1) { + name = name.substring(0, ext); + } + return name.replace('_', ' '); + } + + // Usage: AndroidUtils.formatSize(v.getContext(), getSize() * 1024l); + public int getSize() { + if (sz == -1) { + if (file == null) { + return -1; + } + sz = (int) ((file.length() + 512) >> 10); + } + return sz; + } + + public long getFileDate() { + if (file == null) { + return 0; + } + return file.lastModified(); + } + + public String getFileName(boolean includeSubfolder) { + String result; + if (fileName != null) { + result = fileName; + } else { + if (file == null) { + result = ""; + } else { + result = fileName = file.getName(); + } + } + if (includeSubfolder && !Algorithms.isEmpty(subfolder)) { + result = subfolder + "/" + result; + } + return result; + } + } } From 28df99cffb1a5ae8edcee7d172deebf995e7eb20 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 12 Apr 2021 11:31:24 +0300 Subject: [PATCH 34/37] Small fixes --- .../plus/quickaction/SwitchableAction.java | 30 ++----------------- .../quickaction/actions/MapStyleAction.java | 2 -- .../plus/rastermaps/MapOverlayAction.java | 4 +-- .../plus/rastermaps/MapSourceAction.java | 2 -- .../plus/rastermaps/MapUnderlayAction.java | 4 +-- 5 files changed, 4 insertions(+), 38 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java index f912e9260f..412eba2323 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java @@ -39,14 +39,6 @@ public abstract class SwitchableAction extends QuickAction { protected static final String KEY_DIALOG = "dialog"; - private final static String MAP_STYLE_ACTION = "mapstyle.change"; - private final static String MAP_SOURCE_ACTION = "mapsource.change"; - private final static String MAP_OVERLAY_ACTION = "mapoverlay.change"; - private final static String MAP_UNDERLAY_ACTION = "mapunderlay.change"; - - private final static String KEY_NO_OVERLAY = "no_overlay"; - private final static String KEY_NO_UNDERLAY = "no_underlay"; - private transient EditText title; private transient Adapter adapter; @@ -115,28 +107,10 @@ public abstract class SwitchableAction extends QuickAction { @Override public String getActionText(OsmandApplication application) { - String currentSource = ""; - switch (getActionType().getStringId()) { - case MAP_STYLE_ACTION: - currentSource = application.getSettings().RENDERER.get(); - break; - case MAP_SOURCE_ACTION: - currentSource = application.getSettings().MAP_ONLINE_DATA.get() - ? application.getSettings().MAP_TILE_SOURCES.get() - : application.getString(R.string.vector_data); - break; - case MAP_OVERLAY_ACTION: - currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY - : application.getSettings().MAP_OVERLAY.get(); - break; - case MAP_UNDERLAY_ACTION: - currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY - : application.getSettings().MAP_UNDERLAY.get(); - break; - } + String item = getSelectedItem(application); String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, currentSource), arrowDirection + "\u2026"); + return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, item), arrowDirection + "\u2026"); } @Override diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java index 3e2d297566..eedfe1beb7 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java @@ -30,8 +30,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapStyleAction extends SwitchableAction { diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java index ac341d9b50..2dc809488e 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java @@ -28,8 +28,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapOverlayAction extends SwitchableAction> { private final static String KEY_OVERLAYS = "overlays"; @@ -61,7 +59,7 @@ public class MapOverlayAction extends SwitchableAction> { @Override public String getSelectedItem(OsmandApplication app) { - return app.getSettings().MAP_OVERLAY.get(); + return app.getSettings().MAP_OVERLAY.get() != null ? app.getSettings().MAP_OVERLAY.get() : KEY_NO_OVERLAY; } @Override diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java index 92c08f8745..8ace30844b 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java @@ -29,8 +29,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapSourceAction extends SwitchableAction> { public static final String LAYER_OSM_VECTOR = "LAYER_OSM_VECTOR"; diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java index 704afc47a2..167338add1 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java @@ -28,8 +28,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapUnderlayAction extends SwitchableAction> { @@ -61,7 +59,7 @@ public class MapUnderlayAction extends SwitchableAction> { @Override public String getSelectedItem(OsmandApplication app) { - return app.getSettings().MAP_UNDERLAY.get(); + return app.getSettings().MAP_UNDERLAY.get() != null ? app.getSettings().MAP_UNDERLAY.get() : KEY_NO_UNDERLAY; } @Override From 796f167c3dc5f9d4f9bcadc98da1ca0926960880 Mon Sep 17 00:00:00 2001 From: vshcherb Date: Mon, 12 Apr 2021 10:41:04 +0200 Subject: [PATCH 35/37] Update TestBackupActivity.java --- OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java index fa76beffca..0f1d1775bd 100644 --- a/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java @@ -44,7 +44,8 @@ import java.util.Map; public class TestBackupActivity extends OsmandActionBarActivity { - private static final String TEST_ORDER_ID = "460000687003939"; + // TODO pass actual sub order id! + private static final String TEST_ORDER_ID = ""; private OsmandApplication app; private OsmandSettings settings; From a418f94cd1cd60185e5764284e5427ffe3b0430a Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Mon, 12 Apr 2021 12:30:46 +0300 Subject: [PATCH 36/37] Refactor, profilechange overide --- .../plus/quickaction/SwitchableAction.java | 30 ++----------------- .../quickaction/actions/MapStyleAction.java | 2 -- .../actions/SwitchProfileAction.java | 9 ++++++ .../plus/rastermaps/MapOverlayAction.java | 4 +-- .../plus/rastermaps/MapSourceAction.java | 2 -- .../plus/rastermaps/MapUnderlayAction.java | 4 +-- 6 files changed, 13 insertions(+), 38 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java index f912e9260f..412eba2323 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/SwitchableAction.java @@ -39,14 +39,6 @@ public abstract class SwitchableAction extends QuickAction { protected static final String KEY_DIALOG = "dialog"; - private final static String MAP_STYLE_ACTION = "mapstyle.change"; - private final static String MAP_SOURCE_ACTION = "mapsource.change"; - private final static String MAP_OVERLAY_ACTION = "mapoverlay.change"; - private final static String MAP_UNDERLAY_ACTION = "mapunderlay.change"; - - private final static String KEY_NO_OVERLAY = "no_overlay"; - private final static String KEY_NO_UNDERLAY = "no_underlay"; - private transient EditText title; private transient Adapter adapter; @@ -115,28 +107,10 @@ public abstract class SwitchableAction extends QuickAction { @Override public String getActionText(OsmandApplication application) { - String currentSource = ""; - switch (getActionType().getStringId()) { - case MAP_STYLE_ACTION: - currentSource = application.getSettings().RENDERER.get(); - break; - case MAP_SOURCE_ACTION: - currentSource = application.getSettings().MAP_ONLINE_DATA.get() - ? application.getSettings().MAP_TILE_SOURCES.get() - : application.getString(R.string.vector_data); - break; - case MAP_OVERLAY_ACTION: - currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY - : application.getSettings().MAP_OVERLAY.get(); - break; - case MAP_UNDERLAY_ACTION: - currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY - : application.getSettings().MAP_UNDERLAY.get(); - break; - } + String item = getSelectedItem(application); String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6"; - return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, currentSource), arrowDirection + "\u2026"); + return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, item), arrowDirection + "\u2026"); } @Override diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java index 3e2d297566..eedfe1beb7 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/MapStyleAction.java @@ -30,8 +30,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapStyleAction extends SwitchableAction { diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java index da31b61466..24bff5e458 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import static net.osmand.AndroidUtils.isLayoutRtl; + public class SwitchProfileAction extends SwitchableAction { private final static String KEY_PROFILES = "profiles"; @@ -230,4 +232,11 @@ public class SwitchProfileAction extends SwitchableAction { } } } + + @Override + public String getActionText(OsmandApplication application) { + String item = getSelectedItem(application); + + return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, item), "\u2026"); + } } diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java index ac341d9b50..2dc809488e 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapOverlayAction.java @@ -28,8 +28,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapOverlayAction extends SwitchableAction> { private final static String KEY_OVERLAYS = "overlays"; @@ -61,7 +59,7 @@ public class MapOverlayAction extends SwitchableAction> { @Override public String getSelectedItem(OsmandApplication app) { - return app.getSettings().MAP_OVERLAY.get(); + return app.getSettings().MAP_OVERLAY.get() != null ? app.getSettings().MAP_OVERLAY.get() : KEY_NO_OVERLAY; } @Override diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java index 92c08f8745..8ace30844b 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapSourceAction.java @@ -29,8 +29,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapSourceAction extends SwitchableAction> { public static final String LAYER_OSM_VECTOR = "LAYER_OSM_VECTOR"; diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java index 704afc47a2..167338add1 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/MapUnderlayAction.java @@ -28,8 +28,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import static net.osmand.AndroidUtils.isLayoutRtl; - public class MapUnderlayAction extends SwitchableAction> { @@ -61,7 +59,7 @@ public class MapUnderlayAction extends SwitchableAction> { @Override public String getSelectedItem(OsmandApplication app) { - return app.getSettings().MAP_UNDERLAY.get(); + return app.getSettings().MAP_UNDERLAY.get() != null ? app.getSettings().MAP_UNDERLAY.get() : KEY_NO_UNDERLAY; } @Override From e1ea59b4928be85983d515410ed8eb55b0810804 Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Mon, 12 Apr 2021 13:01:25 +0300 Subject: [PATCH 37/37] Revert quick switch profile --- .../osmand/plus/quickaction/actions/SwitchProfileAction.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java index 24bff5e458..456028881d 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java @@ -235,8 +235,6 @@ public class SwitchProfileAction extends SwitchableAction { @Override public String getActionText(OsmandApplication application) { - String item = getSelectedItem(application); - - return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, item), "\u2026"); + return getName(application); } }