From 30f245ce24bb5c87c591d7054d0053eec9dcded9 Mon Sep 17 00:00:00 2001 From: Nazar-Kutz Date: Mon, 17 Aug 2020 15:01:38 +0300 Subject: [PATCH 01/27] Fix #9585 (Show photos from Wikimedia Commons) --- .../main/java/net/osmand/data/Amenity.java | 1 + .../builders/AmenityMenuBuilder.java | 12 +- .../builders/cards/ImageCard.java | 12 +- .../plus/wikimedia/WikiImageHelper.java | 176 ++++++++++++------ 4 files changed, 142 insertions(+), 59 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java index 38854cb33b..a5c68f1938 100644 --- a/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java +++ b/OsmAnd-java/src/main/java/net/osmand/data/Amenity.java @@ -39,6 +39,7 @@ public class Amenity extends MapObject { public static final String CONTENT = "content"; public static final String CUISINE = "cuisine"; public static final String WIKIDATA = "wikidata"; + public static final String WIKIMEDIA_COMMONS = "wikimedia_commons"; public static final String DISH = "dish"; public static final String REF = "ref"; public static final String OSM_DELETE_VALUE = "delete"; diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java index fa1d0e7e6e..5a4618ca4f 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java @@ -471,7 +471,9 @@ public class AmenityMenuBuilder extends MenuBuilder { } textPrefix = app.getString(R.string.poi_cuisine); vl = sb.toString(); - } else if (key.contains(Amenity.ROUTE) || key.equals(Amenity.WIKIDATA)) { + } else if (key.contains(Amenity.ROUTE) + || key.equals(Amenity.WIKIDATA) + || key.equals(Amenity.WIKIMEDIA_COMMONS)) { continue; } else { if (key.contains(Amenity.DESCRIPTION)) { @@ -784,7 +786,8 @@ public class AmenityMenuBuilder extends MenuBuilder { Map additionalInfo = amenity.getAdditionalInfo(); String imageValue = additionalInfo.get("image"); String mapillaryValue = additionalInfo.get("mapillary"); - String wikidataValue = additionalInfo.get("wikidata"); + String wikidataValue = additionalInfo.get(Amenity.WIKIDATA); + String wikimediaValue = additionalInfo.get(Amenity.WIKIMEDIA_COMMONS); if (!Algorithms.isEmpty(imageValue)) { params.put("osm_image", imageValue); } @@ -792,7 +795,10 @@ public class AmenityMenuBuilder extends MenuBuilder { params.put("osm_mapillary_key", mapillaryValue); } if (!Algorithms.isEmpty(wikidataValue)) { - params.put("wikidata_id", wikidataValue); + params.put(Amenity.WIKIDATA, wikidataValue); + } + if (!Algorithms.isEmpty(wikimediaValue)) { + params.put(Amenity.WIKIMEDIA_COMMONS, wikimediaValue); } return params; } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/cards/ImageCard.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/cards/ImageCard.java index 94c045fa4d..c7cf92df0f 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/cards/ImageCard.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/cards/ImageCard.java @@ -17,6 +17,7 @@ import androidx.appcompat.widget.AppCompatButton; import net.osmand.AndroidNetworkUtils; import net.osmand.AndroidUtils; import net.osmand.Location; +import net.osmand.data.Amenity; import net.osmand.data.LatLon; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; @@ -438,10 +439,15 @@ public abstract class ImageCard extends AbstractCard { pms.put("lang", preferredLang); } if (this.params != null) { - String wikidataId = this.params.get("wikidata_id"); + String wikidataId = this.params.get(Amenity.WIKIDATA); if (wikidataId != null) { - this.params.remove("wikidata_id"); - WikiImageHelper.fillWikiMediaCards(mapActivity, wikidataId, result); + this.params.remove(Amenity.WIKIDATA); + WikiImageHelper.addWikidataImageCards(mapActivity, wikidataId, result); + } + String wikimediaContent = this.params.get(Amenity.WIKIMEDIA_COMMONS); + if (wikimediaContent != null) { + this.params.remove(Amenity.WIKIMEDIA_COMMONS); + WikiImageHelper.addWikimediaImageCards(mapActivity, wikimediaContent, result); } pms.putAll(this.params); } diff --git a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java index eded246941..68f3545129 100644 --- a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java @@ -23,63 +23,113 @@ import java.util.List; public class WikiImageHelper { private static final String WIKIDATA_API_ENDPOINT = "https://www.wikidata.org/w/api.php"; - private static final String ACTION = "?action=wbgetclaims&property=P18&entity="; + private static final String WIKIMEDIA_API_ENDPOINT = "https://commons.wikimedia.org/w/api.php"; + private static final String WIKIDATA_ACTION = "?action=wbgetclaims&property=P18&entity="; + private static final String WIKIMEDIA_ACTION = "?action=query&list=categorymembers&cmtitle="; + private static final String CM_LIMIT = "&cmlimit=500"; private static final String FORMAT_JSON = "&format=json"; private static final String IMAGE_BASE_URL = "https://upload.wikimedia.org/wikipedia/commons/"; + private static final String WIKIDATA_PREFIX = "Q"; + private static final String WIKIMEDIA_FILE = "File:"; + private static final String WIKIMEDIA_CATEGORY = "Category:"; + private static final int THUMB_SIZE = 500; private static final Log LOG = PlatformUtil.getLog(WikiImageHelper.class); - public static void fillWikiMediaCards(@NonNull MapActivity mapActivity, @NonNull String wikidata, - List images) { - if (wikidata.startsWith(WIKIDATA_PREFIX)) { - StringBuilder rawResponse = new StringBuilder(); - String url = WIKIDATA_API_ENDPOINT + ACTION + wikidata + FORMAT_JSON; - String error = NetworkUtils.sendGetRequest(url, null, rawResponse); - if (error == null) { - try { - Gson gson = new Gson(); - WikipediaResponse response = gson.fromJson(rawResponse.toString(), WikipediaResponse.class); - for (WikiImage img : getImageData(response)) { - images.add(new WikiImageCard(mapActivity, img)); + public static void addWikidataImageCards(@NonNull MapActivity mapActivity, @NonNull String wikidataId, + @NonNull List imageCards) { + if (wikidataId.startsWith(WIKIDATA_PREFIX)) { + String url = WIKIDATA_API_ENDPOINT + WIKIDATA_ACTION + wikidataId + FORMAT_JSON; + WikidataResponse response = + (WikidataResponse) sendWikipediaApiRequest(url, WikidataResponse.class); + if (response != null) { + for (P18 p18 : response.claims.p18) { + String imageFileName = p18.mainsnak.datavalue.value; + if (imageFileName != null) { + addImageCard(mapActivity, imageCards, imageFileName); } - return; - } catch (JsonSyntaxException e) { - error = e.getLocalizedMessage(); } } - LOG.error(error); } else { - LOG.error("Wrong WikiMedia ID"); + LOG.error("Wrong Wikidata ID"); } } - private static List getImageData(WikipediaResponse response) { - List images = new ArrayList<>(); - for (P18 p18 : response.claims.p18) { - String imageFileName = p18.mainsnak.datavalue.value; - if (imageFileName != null) { - try { - String imageName = URLDecoder.decode(imageFileName, "UTF-8"); - imageFileName = imageName.replace(" ", "_"); - imageName = imageName.substring(0, imageName.lastIndexOf(".")); - String[] urlHashParts = getHash(imageFileName); - - String imageHiResUrl = IMAGE_BASE_URL + - urlHashParts[0] + "/" + urlHashParts[1] + "/" + - imageFileName; - String imageStubUrl = IMAGE_BASE_URL + "thumb/" + - urlHashParts[0] + "/" + urlHashParts[1] + "/" + - imageFileName + "/" + THUMB_SIZE + "px-" + - imageFileName; - images.add(new WikiImage(imageName, imageStubUrl, imageHiResUrl)); - - } catch (UnsupportedEncodingException e) { - LOG.error(e.getLocalizedMessage()); + public static void addWikimediaImageCards(@NonNull MapActivity mapActivity, @NonNull String wikiMediaTagContent, + @NonNull List imageCards) { + if (wikiMediaTagContent.startsWith(WIKIMEDIA_FILE)) { + String fileName = wikiMediaTagContent.substring(WIKIMEDIA_FILE.length()); + addImageCard(mapActivity, imageCards, fileName); + } else if (wikiMediaTagContent.startsWith(WIKIMEDIA_CATEGORY)) { + String url = WIKIMEDIA_API_ENDPOINT + WIKIMEDIA_ACTION + wikiMediaTagContent + CM_LIMIT + FORMAT_JSON; + WikimediaResponse response = + (WikimediaResponse) sendWikipediaApiRequest(url, WikimediaResponse.class); + if (response != null) { + List subCategories = new ArrayList<>(); + for (Categorymember cm : response.query.categorymembers) { + String memberTitle = cm.title; + if (memberTitle != null) { + if (memberTitle.startsWith(WIKIMEDIA_CATEGORY)) { + subCategories.add(memberTitle); + } else { + addWikimediaImageCards(mapActivity, memberTitle, imageCards); + } + } + } + for (String subCategory : subCategories) { + addWikimediaImageCards(mapActivity, subCategory, imageCards); } } + } else { + LOG.error("Wrong Wikimedia category member"); } - return images; + } + + private static Object sendWikipediaApiRequest(@NonNull String url, @NonNull Class responseClass) { + StringBuilder rawResponse = new StringBuilder(); + String errorMessage = NetworkUtils.sendGetRequest(url, null, rawResponse); + if (errorMessage == null) { + try { + return new Gson().fromJson(rawResponse.toString(), responseClass); + } catch (JsonSyntaxException e) { + errorMessage = e.getLocalizedMessage(); + } + } + LOG.error(errorMessage); + return null; + } + + private static void addImageCard(@NonNull MapActivity mapActivity, @NonNull List images, + @NonNull String fileName) { + WikiImage img = getImageData(fileName); + if (img != null) { + images.add(new WikiImageCard(mapActivity, img)); + } + } + + private static WikiImage getImageData(@NonNull String imageFileName) { + try { + String imageName = URLDecoder.decode(imageFileName, "UTF-8"); + imageFileName = imageName.replace(" ", "_"); + imageName = imageName.substring(0, imageName.lastIndexOf(".")); + String[] urlHashParts = getHash(imageFileName); + + String imageHiResUrl = IMAGE_BASE_URL + + urlHashParts[0] + "/" + urlHashParts[1] + "/" + + imageFileName; + + String imageStubUrl = IMAGE_BASE_URL + "thumb/" + + urlHashParts[0] + "/" + urlHashParts[1] + "/" + + imageFileName + "/" + THUMB_SIZE + "px-" + + imageFileName; + + return new WikiImage(imageName, imageStubUrl, imageHiResUrl); + + } catch (UnsupportedEncodingException e) { + LOG.error(e.getLocalizedMessage()); + } + return null; } @NonNull @@ -88,19 +138,23 @@ public class WikiImageHelper { return new String[]{md5.substring(0, 1), md5.substring(0, 2)}; } + // Wikidata response classes + private static class WikidataResponse { + @SerializedName("claims") + @Expose + private Claims claims; + } + private static class Claims { @SerializedName("P18") @Expose private List p18 = null; } - private static class Datavalue { - @SerializedName("value") + private static class P18 { + @SerializedName("mainsnak") @Expose - private String value; - @SerializedName("type") - @Expose - private String type; + private Mainsnak mainsnak; } private static class Mainsnak { @@ -112,15 +166,31 @@ public class WikiImageHelper { private String datatype; } - private static class P18 { - @SerializedName("mainsnak") + private static class Datavalue { + @SerializedName("value") @Expose - private Mainsnak mainsnak; + private String value; + @SerializedName("type") + @Expose + private String type; } - private static class WikipediaResponse { - @SerializedName("claims") + // Wikimedia response classes + public class WikimediaResponse { + @SerializedName("query") @Expose - private Claims claims; + private Query query; + } + + public class Query { + @SerializedName("categorymembers") + @Expose + private List categorymembers; + } + + public class Categorymember { + @SerializedName("title") + @Expose + private String title; } } From 2d37a05c7a1993602fc85273508b37d903b453ef Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 17 Aug 2020 16:51:51 +0300 Subject: [PATCH 02/27] Fix exit without saving UI --- ...ottom_sheet_item_list_title_with_descr.xml | 43 +++++++++++++++++++ .../bottom_sheet_plan_route_select_file.xml | 4 +- ...ute_between_points_bottom_sheet_dialog.xml | 4 +- OsmAnd/res/values/sizes.xml | 2 + .../ExitBottomSheetDialogFragment.java | 8 ++-- 5 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml diff --git a/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml b/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml new file mode 100644 index 0000000000..e56e68e416 --- /dev/null +++ b/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml @@ -0,0 +1,43 @@ + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/bottom_sheet_plan_route_select_file.xml b/OsmAnd/res/layout/bottom_sheet_plan_route_select_file.xml index 8c04121290..2e00611e3d 100644 --- a/OsmAnd/res/layout/bottom_sheet_plan_route_select_file.xml +++ b/OsmAnd/res/layout/bottom_sheet_plan_route_select_file.xml @@ -14,8 +14,8 @@ android:paddingLeft="@dimen/content_padding" android:paddingEnd="@dimen/content_padding" android:paddingRight="@dimen/content_padding" - android:paddingTop="@dimen/multi_selection_menu_padding_top" - android:paddingBottom="@dimen/bottom_sheet_title_padding_bottom" + android:paddingTop="@dimen/measurement_tool_menu_title_padding_top" + android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom" android:text="@string/plan_route_open_existing_track" android:textAppearance="@style/TextAppearance.ListItemTitle" osmand:typeface="@string/font_roboto_medium" /> diff --git a/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml b/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml index a138c7ee2c..7536d6ab90 100644 --- a/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml +++ b/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml @@ -20,8 +20,10 @@ 12dp 8dp 8dp + 13dp + 5dp 8dp 12dp 4dp diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java index a7c946cf00..9cc768dad8 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java @@ -14,7 +14,6 @@ import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton; import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.ShortDescriptionItem; -import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment { @@ -27,12 +26,11 @@ public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment @Override public void createMenuItems(Bundle savedInstanceState) { - items.add(new TitleItem(getString(R.string.exit_without_saving))); - items.add(new ShortDescriptionItem.Builder() .setDescription(getString(R.string.plan_route_exit_dialog_descr)) .setDescriptionColorId(nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light) - .setLayoutId(R.layout.bottom_sheet_item_description_long) + .setTitle(getString(R.string.exit_without_saving)) + .setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr) .create()); items.add(new DividerSpaceItem(getContext(), @@ -75,7 +73,7 @@ public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment @Override protected int getDismissButtonTextId() { - return R.string.shared_string_close; + return R.string.shared_string_cancel; } public static void showInstance(@NonNull FragmentManager fragmentManager, @Nullable Fragment targetFragment) { From 1155144b1a928a1e085ef89a9899e0332f361b8c Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Mon, 17 Aug 2020 17:30:55 +0300 Subject: [PATCH 03/27] Fix plan a road UI --- .../bottom_sheet_item_list_title_with_descr.xml | 4 ---- ...ment_route_between_points_bottom_sheet_dialog.xml | 2 -- .../ExitBottomSheetDialogFragment.java | 1 - .../measurementtool/SnapTrackWarningBottomSheet.java | 12 ++++-------- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml b/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml index e56e68e416..a47932f22d 100644 --- a/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml +++ b/OsmAnd/res/layout/bottom_sheet_item_list_title_with_descr.xml @@ -20,7 +20,6 @@ android:ellipsize="end" android:gravity="center_vertical" android:maxLines="1" - android:letterSpacing="@dimen/text_button_letter_spacing" android:paddingBottom="@dimen/measurement_tool_menu_title_padding_bottom" android:textColor="?android:textColorPrimary" android:textSize="@dimen/default_list_text_size" @@ -31,9 +30,6 @@ android:id="@+id/description" android:layout_width="match_parent" android:layout_height="wrap_content" - android:ellipsize="end" - android:maxLines="2" - android:letterSpacing="@dimen/description_letter_spacing" android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" android:textColor="?android:textColorPrimary" android:textSize="@dimen/default_desc_text_size" diff --git a/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml b/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml index 7536d6ab90..cc796a9b20 100644 --- a/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml +++ b/OsmAnd/res/layout/fragment_route_between_points_bottom_sheet_dialog.xml @@ -44,7 +44,6 @@ android:textColor="?android:textColorPrimary" android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" osmand:typeface="@string/font_roboto_regular" - android:letterSpacing="@dimen/description_letter_spacing" android:textSize="@dimen/default_desc_text_size" /> @@ -63,7 +62,6 @@ android:textColor="?android:textColorPrimary" android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" osmand:typeface="@string/font_roboto_regular" - android:letterSpacing="@dimen/description_letter_spacing" android:textSize="@dimen/default_desc_text_size" /> diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java index 9cc768dad8..df7b4ae9b7 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/ExitBottomSheetDialogFragment.java @@ -28,7 +28,6 @@ public class ExitBottomSheetDialogFragment extends MenuBottomSheetDialogFragment items.add(new ShortDescriptionItem.Builder() .setDescription(getString(R.string.plan_route_exit_dialog_descr)) - .setDescriptionColorId(nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light) .setTitle(getString(R.string.exit_without_saving)) .setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr) .create()); diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SnapTrackWarningBottomSheet.java b/OsmAnd/src/net/osmand/plus/measurementtool/SnapTrackWarningBottomSheet.java index 666cb58b3f..93194aa035 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/SnapTrackWarningBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/SnapTrackWarningBottomSheet.java @@ -8,14 +8,12 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import net.osmand.PlatformUtil; -import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription; import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; -import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; import net.osmand.plus.helpers.GpxTrackAdapter; import org.apache.commons.logging.Log; @@ -38,15 +36,13 @@ public class SnapTrackWarningBottomSheet extends MenuBottomSheetDialogFragment { if (activity instanceof MapActivity) { activity.findViewById(R.id.snap_to_road_image_button).setVisibility(View.GONE); } - OsmandApplication app = requiredMyApplication(); - items.add(new TitleItem(getString(R.string.route_between_points))); BaseBottomSheetItem description = new BottomSheetItemWithDescription.Builder() - .setDescription(app.getString(R.string.rourte_between_points_warning_desc)) - .setDescriptionColorId(R.color.text_color_primary_light) - .setLayoutId(R.layout.bottom_sheet_item_description_long) + .setDescription(getString(R.string.rourte_between_points_warning_desc)) + .setTitle(getString(R.string.route_between_points)) + .setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr) .create(); items.add(description); - items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.content_padding_half))); + items.add(new DividerSpaceItem(getContext(), getResources().getDimensionPixelSize(R.dimen.content_padding_half))); } @Override From 4406b60c6d0efe72f97914388007cddca8706311 Mon Sep 17 00:00:00 2001 From: Guillaume Gonnet Date: Mon, 17 Aug 2020 18:35:12 +0200 Subject: [PATCH 04/27] Allow custom "user-agent" for tile download --- .../main/java/net/osmand/map/ITileSource.java | 2 ++ .../java/net/osmand/map/MapTileDownloader.java | 3 ++- .../java/net/osmand/map/TileSourceManager.java | 18 ++++++++++++++++++ .../src/net/osmand/plus/SQLiteTileSource.java | 15 ++++++++++++++- .../plus/resources/AsyncLoadingThread.java | 3 ++- .../net/osmand/plus/resources/TilesCache.java | 2 +- .../plus/settings/backend/SettingsHelper.java | 5 ++++- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/map/ITileSource.java b/OsmAnd-java/src/main/java/net/osmand/map/ITileSource.java index 38ba3493e1..7c643bbf5b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/ITileSource.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/ITileSource.java @@ -32,6 +32,8 @@ public interface ITileSource { public String getReferer(); + public String getUserAgent(); + public void deleteTiles(String path); public int getAvgSize(); diff --git a/OsmAnd-java/src/main/java/net/osmand/map/MapTileDownloader.java b/OsmAnd-java/src/main/java/net/osmand/map/MapTileDownloader.java index 058942f494..c6e99519b4 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/MapTileDownloader.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/MapTileDownloader.java @@ -90,6 +90,7 @@ public class MapTileDownloader { public final int yTile; public String url; public String referer = null; + public String userAgent = null; public boolean error; public DownloadRequest(String url, File fileToSave, int xTile, int yTile, int zoom) { @@ -266,7 +267,7 @@ public class MapTileDownloader { request.setError(false); try { URLConnection connection = NetworkUtils.getHttpURLConnection(request.url); - connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$ + connection.setRequestProperty("User-Agent", Algorithms.isEmpty(request.userAgent) ? USER_AGENT : request.userAgent); //$NON-NLS-1$ if (request.referer != null) connection.setRequestProperty("Referer", request.referer); //$NON-NLS-1$ connection.setConnectTimeout(CONNECTION_TIMEOUT); diff --git a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java index e093fc6d0c..9885aa2fbf 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/TileSourceManager.java @@ -68,6 +68,7 @@ public class TileSourceManager { private String[] randomsArray; private String rule; private String referer; + private String userAgent; private boolean hidden; // if hidden in configure map settings, for example mapillary sources private boolean isRuleAcceptable = true; @@ -261,6 +262,14 @@ public class TileSourceManager { this.referer = referer; } + public String getUserAgent() { + return userAgent; + } + + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + @Override public int getTileSize() { return tileSize; @@ -484,6 +493,9 @@ public class TileSourceManager { if (!Algorithms.isEmpty(tm.getReferer())) { properties.put("referer", tm.getReferer()); } + if (!Algorithms.isEmpty(tm.getUserAgent())) { + properties.put("user_agent", tm.getUserAgent()); + } properties.put("ext", tm.getTileFormat()); properties.put("min_zoom", tm.getMinimumZoomSupported() + ""); @@ -708,6 +720,12 @@ public class TileSourceManager { } String randoms = attributes.get("randoms"); TileSourceTemplate templ = new TileSourceTemplate(name, urlTemplate, ext, maxZoom, minZoom, tileSize, bitDensity, avgTileSize); + if (attributes.get("referer") != null) { + templ.setReferer(attributes.get("referer")); + } + if (attributes.get("user_agent") != null) { + templ.setUserAgent(attributes.get("user_agent")); + } if(expirationTime >= 0) { templ.setExpirationTimeMinutes(expirationTime); } diff --git a/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java b/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java index 4ef77d76c7..b3d7ceb144 100644 --- a/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java +++ b/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java @@ -39,6 +39,7 @@ public class SQLiteTileSource implements ITileSource { private static final String ELLIPSOID = "ellipsoid"; private static final String INVERTED_Y = "inverted_y"; private static final String REFERER = "referer"; + private static final String USER_AGENT = "useragent"; private static final String TIME_COLUMN = "timecolumn"; private static final String EXPIRE_MINUTES = "expireminutes"; private static final String RULE = "rule"; @@ -62,6 +63,7 @@ public class SQLiteTileSource implements ITileSource { private String[] randomsArray; private String rule = null; private String referer = null; + private String userAgent = null; int tileSize = 256; boolean tileSizeSpecified = false; @@ -93,7 +95,7 @@ public class SQLiteTileSource implements ITileSource { } public SQLiteTileSource(OsmandApplication ctx, String name, int minZoom, int maxZoom, String urlTemplate, - String randoms, boolean isEllipsoid, boolean invertedY, String referer, + String randoms, boolean isEllipsoid, boolean invertedY, String referer, String userAgent, boolean timeSupported, long expirationTimeMillis, boolean inversiveZoom, String rule) { this.ctx = ctx; this.name = name; @@ -104,6 +106,7 @@ public class SQLiteTileSource implements ITileSource { this.expirationTimeMillis = expirationTimeMillis; this.randoms = randoms; this.referer = referer; + this.userAgent = userAgent; this.rule = rule; this.invertedY = invertedY; this.timeSupported = timeSupported; @@ -120,6 +123,7 @@ public class SQLiteTileSource implements ITileSource { this.expirationTimeMillis = tileSource.getExpirationTimeMillis(); this.randoms = tileSource.getRandoms(); this.referer = tileSource.getReferer(); + this.userAgent = tileSource.getUserAgent(); this.invertedY = tileSource.isInvertedYTile(); this.timeSupported = tileSource.isTimeSupported(); this.inversiveZoom = tileSource.getInversiveZoom(); @@ -139,6 +143,7 @@ public class SQLiteTileSource implements ITileSource { addInfoColumn(db, ELLIPSOID, isEllipsoid ? "1" : "0"); addInfoColumn(db, INVERTED_Y, invertedY ? "1" : "0"); addInfoColumn(db, REFERER, referer); + addInfoColumn(db, USER_AGENT, userAgent); addInfoColumn(db, TIME_COLUMN, timeSupported ? "yes" : "no"); addInfoColumn(db, EXPIRE_MINUTES, String.valueOf(getExpirationTimeMinutes())); @@ -264,6 +269,10 @@ public class SQLiteTileSource implements ITileSource { if(refererId != -1) { referer = cursor.getString(refererId); } + int userAgentId = list.indexOf(USER_AGENT); + if(userAgentId != -1) { + userAgent = cursor.getString(userAgentId); + } int tnumbering = list.indexOf(TILENUMBERING); if(tnumbering != -1) { inversiveZoom = BIG_PLANET_TILE_NUMBERING.equalsIgnoreCase(cursor.getString(tnumbering)); @@ -673,4 +682,8 @@ public class SQLiteTileSource implements ITileSource { return referer; } + public String getUserAgent() { + return userAgent; + } + } diff --git a/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java b/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java index 27559ee966..59f62e30b5 100644 --- a/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java +++ b/OsmAnd/src/net/osmand/plus/resources/AsyncLoadingThread.java @@ -105,12 +105,13 @@ public class AsyncLoadingThread extends Thread { } public TileLoadDownloadRequest(File dirWithTiles, String url, File fileToSave, String tileId, ITileSource source, int tileX, - int tileY, int zoom, String referer) { + int tileY, int zoom, String referer, String userAgent) { super(url, fileToSave, tileX, tileY, zoom); this.dirWithTiles = dirWithTiles; this.tileSource = source; this.tileId = tileId; this.referer = referer; + this.userAgent = userAgent; } public void saveTile(InputStream inputStream) throws IOException { diff --git a/OsmAnd/src/net/osmand/plus/resources/TilesCache.java b/OsmAnd/src/net/osmand/plus/resources/TilesCache.java index 4548e1e42c..ce8ae27c18 100644 --- a/OsmAnd/src/net/osmand/plus/resources/TilesCache.java +++ b/OsmAnd/src/net/osmand/plus/resources/TilesCache.java @@ -144,7 +144,7 @@ public abstract class TilesCache { } } TileLoadDownloadRequest req = new TileLoadDownloadRequest(dirWithTiles, url, toSave, - tileId, map, x, y, zoom, map.getReferer()); + tileId, map, x, y, zoom, map.getReferer(), map.getUserAgent()); if (sync) { return getRequestedTile(req); } else { diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/SettingsHelper.java b/OsmAnd/src/net/osmand/plus/settings/backend/SettingsHelper.java index 35ba432b9f..ed18b4f695 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/SettingsHelper.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/SettingsHelper.java @@ -2035,6 +2035,7 @@ public class SettingsHelper { boolean ellipsoid = object.optBoolean("ellipsoid", false); boolean invertedY = object.optBoolean("inverted_y", false); String referer = object.optString("referer"); + String userAgent = object.optString("userAgent"); boolean timeSupported = object.optBoolean("timesupported", false); long expire = object.optLong("expire", -1); boolean inversiveZoom = object.optBoolean("inversiveZoom", false); @@ -2054,13 +2055,14 @@ public class SettingsHelper { tileSourceTemplate.setRule(rule); tileSourceTemplate.setRandoms(randoms); tileSourceTemplate.setReferer(referer); + tileSourceTemplate.setUserAgent(userAgent); tileSourceTemplate.setEllipticYTile(ellipsoid); tileSourceTemplate.setInvertedYTile(invertedY); tileSourceTemplate.setExpirationTimeMillis(timeSupported ? expire : -1); template = tileSourceTemplate; } else { - template = new SQLiteTileSource(app, name, minZoom, maxZoom, url, randoms, ellipsoid, invertedY, referer, timeSupported, expire, inversiveZoom, rule); + template = new SQLiteTileSource(app, name, minZoom, maxZoom, url, randoms, ellipsoid, invertedY, referer, userAgent, timeSupported, expire, inversiveZoom, rule); } items.add(template); } @@ -2087,6 +2089,7 @@ public class SettingsHelper { jsonObject.put("ellipsoid", template.isEllipticYTile()); jsonObject.put("inverted_y", template.isInvertedYTile()); jsonObject.put("referer", template.getReferer()); + jsonObject.put("userAgent", template.getUserAgent()); jsonObject.put("timesupported", template.isTimeSupported()); jsonObject.put("expire", template.getExpirationTimeMinutes()); jsonObject.put("inversiveZoom", template.getInversiveZoom()); From c42838463247738da5f23e492ef9105919cb9428 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Tue, 18 Aug 2020 00:10:57 +0200 Subject: [PATCH 05/27] Fix compilation --- .../net/osmand/plus/mapsource/EditMapSourceDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/mapsource/EditMapSourceDialogFragment.java b/OsmAnd/src/net/osmand/plus/mapsource/EditMapSourceDialogFragment.java index 0b710f9f25..fcd6f86bb2 100644 --- a/OsmAnd/src/net/osmand/plus/mapsource/EditMapSourceDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapsource/EditMapSourceDialogFragment.java @@ -392,7 +392,7 @@ public class EditMapSourceDialogFragment extends BaseOsmAndDialogFragment SQLiteTileSource sqLiteTileSource = new SQLiteTileSource(app, newName, minZoom, maxZoom, urlToLoad, "", - elliptic, false, "", expireTimeMinutes > 0, + elliptic, false, "", "", expireTimeMinutes > 0, expireTimeMinutes * 60 * 1000L, false, "" ); sqLiteTileSource.createDataBase(); From 869848b704de2535a71794008b8c0c2f4e86fafd Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Tue, 18 Aug 2020 12:14:38 +0300 Subject: [PATCH 06/27] Fix dark theme --- OsmAnd/res/layout/fragment_measurement_tool.xml | 2 +- .../RouteBetweenPointsBottomSheetDialogFragment.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/layout/fragment_measurement_tool.xml b/OsmAnd/res/layout/fragment_measurement_tool.xml index 12ab48d201..50df9e1ee8 100644 --- a/OsmAnd/res/layout/fragment_measurement_tool.xml +++ b/OsmAnd/res/layout/fragment_measurement_tool.xml @@ -304,7 +304,7 @@ android:paddingLeft="@dimen/measurement_tool_button_padding" android:paddingRight="@dimen/measurement_tool_button_padding" android:text="@string/shared_string_apply" - android:textColor="?attr/color_dialog_buttons" + android:textColor="@color/color_white" android:textAllCaps="false" android:paddingEnd="@dimen/measurement_tool_button_padding" android:paddingStart="@dimen/measurement_tool_button_padding" /> diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java index 8c43b02c0a..59b7936587 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java @@ -70,8 +70,9 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial nightMode = app.getDaynightHelper().isNightModeForMapControls(); FragmentActivity activity = requireActivity(); portrait = AndroidUiHelper.isOrientationPortrait(activity); - final View mainView = inflater.inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog, - container, false); + final View mainView = UiUtilities.getInflater(getContext(), nightMode) + .inflate(R.layout.fragment_route_between_points_bottom_sheet_dialog, + container, false); AndroidUtils.setBackground(activity, mainView, nightMode, portrait ? R.drawable.bg_bottom_menu_light : R.drawable.bg_bottom_sheet_topsides_landscape_light, portrait ? R.drawable.bg_bottom_menu_dark : R.drawable.bg_bottom_sheet_topsides_landscape_dark); From 7b602f303a1359f915894ea49def01a205a48af9 Mon Sep 17 00:00:00 2001 From: Dima-1 Date: Tue, 18 Aug 2020 12:25:50 +0300 Subject: [PATCH 07/27] Fix straight line NPE --- .../RouteBetweenPointsBottomSheetDialogFragment.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java index 59b7936587..f32ddbaa72 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java @@ -37,6 +37,7 @@ import java.util.List; import static net.osmand.plus.UiUtilities.CustomRadioButtonType.*; import static net.osmand.plus.measurementtool.MeasurementEditingContext.CalculationMode.NEXT_SEGMENT; import static net.osmand.plus.measurementtool.MeasurementEditingContext.CalculationMode.WHOLE_TRACK; +import static net.osmand.plus.measurementtool.MeasurementEditingContext.DEFAULT_APP_MODE; public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDialogFragment { @@ -102,7 +103,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial @Override public void onClick(View view) { snapToRoadEnabled = false; - ApplicationMode mode = null; + ApplicationMode mode = DEFAULT_APP_MODE; if ((int) view.getTag() != STRAIGHT_LINE_TAG) { mode = modes.get((int) view.getTag()); snapToRoadEnabled = true; @@ -117,7 +118,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetDial Drawable icon = app.getUIUtilities().getIcon(R.drawable.ic_action_split_interval, nightMode); addProfileView(navigationType, onClickListener, STRAIGHT_LINE_TAG, icon, - app.getText(R.string.routing_profile_straightline), snapToRoadAppMode == null); + app.getText(R.string.routing_profile_straightline), snapToRoadAppMode == DEFAULT_APP_MODE); addDelimiterView(navigationType); for (int i = 0; i < modes.size(); i++) { From 91b18967f84138bf66190354da37377506177e13 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Mon, 17 Aug 2020 06:07:45 +0000 Subject: [PATCH 08/27] Translated using Weblate (Japanese) Currently translated at 96.3% (3328 of 3453 strings) --- OsmAnd/res/values-ja/strings.xml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 89f05af146..8a85dde06d 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -3737,4 +3737,32 @@ POIの更新は利用できません 電源ボタン 端末の音量ボタンでマップのズームレベルを変更できるようにします。 音量ボタンでズーム + 出発・目的地アイコンを表示 + 幅の選択 + 距離または時間のマーカーが経路に表示される間隔を選択します。 + 時間または距離で、必要な分割オプションを選択します。 + カスタム + 方向矢印 + 最終編集日時 + 経路のインポート + 既存の経路を開く + 新しいルートの作成 + 開きたい経路ファイルを選択します。 + 完了 + 経路を上書き + 新しい経路として保存 + ルート反転 + 選択したプロファイルを使用して、次のセグメントのみ再計算します。 + 選択したプロファイルを使用して、経路全体が再計算されます。 + 直線で地点間をつなげる方法をとるか、選択したプロファイルで地点間のルートを計算します。 + 全経路 + 次のセグメント + このオプションを使用するには、OsmAndで経路をマップ上の道路にスナップする必要があります。 +\n +\n次にナビゲーションプロファイルを選択して、利用予定の道路(一般道、高速道路)と、道路を追跡するおおよその距離を検出する必要があります。 + 限界距離 + ナビゲーションプロファイル + 新しいセグメントを追加するための経路ファイルを選択します。 + ストリート画像 + 保存せずにルート計画を終了した場合すべての変更が失われます。よろしいですか? \ No newline at end of file From 2cff0b8b45b2da6c721ff72073bb58b792822de8 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Mon, 17 Aug 2020 13:08:42 +0000 Subject: [PATCH 09/27] Translated using Weblate (Russian) Currently translated at 100.0% (3453 of 3453 strings) --- OsmAnd/res/values-ru/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index dcf88d12aa..e38a1f69a1 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -2308,7 +2308,7 @@ Виджет Mapillary Позволяет быстро внести свой вклад в Mapillary. Фото с улиц онлайн для каждого. Открывайте для себя места, сотрудничайте, снимайте мир. - Mapillary + Изображения на уровне улиц Уличные фотографии для всех. Открывайте для себя места, сотрудничайте, снимайте мир. Название содержит слишком много заглавных букв. Вы хотите продолжить? Переключатель, чтобы приостановить или возобновить навигацию. @@ -3853,4 +3853,5 @@ Выберите как соединять точки: по прямой линии или построением маршрута. В случае обратного направления Закрыть план маршрута без сохранения\? Все изменения будут потеряны. + Изображения на уровне улиц \ No newline at end of file From 74f0fcf2c936976e9ca74aff5dff268dc89c2890 Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 16 Aug 2020 12:15:18 +0000 Subject: [PATCH 10/27] Translated using Weblate (Russian) Currently translated at 100.0% (3453 of 3453 strings) --- OsmAnd/res/values-ru/strings.xml | 60 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index e38a1f69a1..d9369c61ad 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -297,8 +297,8 @@ Западнофризский Албанский (тоскский) Планируемые объекты - Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта. -\n + Обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта. +\n \nГлобальные данные (между 70° на севере и 70° на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems). Рассмотрите возможность покупки плагина «Линии высот» в Google Play, чтобы поддержать последующую разработку. Линии высот @@ -327,7 +327,7 @@ Запись %1$s %3$s %2$s Запись Аудиозаметки - OsmAnd плагин для линий высот + OsmAnd-плагин для линий высот Измерение расстояний Нажмите «Использовать местоположение…» чтобы добавить заметку к данному местоположению. Аудиозаметки @@ -346,11 +346,11 @@ Только дороги Стандартная карта Карта дорог - Запустить приложение в безопасном режиме (замедляет работу приложения, используя только Android функции). + Запустить приложение в безопасном режиме (замедляет работу приложения, используя только функции Android). Безопасный режим Приложение работает в безопасном режиме (отключите его в разделе «Настройки»). Фоновая служба OsmAnd всё ещё работает. Остановите её тоже\? - Закрыть changeset + Закрыть пакет правок Приложение ZXing Barcode Scanner не найдено. Искать в Google Play? Быстрое построение маршрута (возможно неоптимально) ч. @@ -413,7 +413,7 @@ Интервал онлайн-слежения Укажите веб-адрес со следующими параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}. Web адрес онлайн-слежения - Записать трек можно с помощью виджета GPX или выбрав «Запись поездки» в Настройках. + Записать трек можно с помощью виджета GPX или выбрав «Запись поездки» в настройках. Показывать текущий путь Вы можете скачать или обновить карты %1$s. Бесплатная версия @@ -748,7 +748,7 @@ Ландшафт Ориентация экрана Выберите ориентацию экрана. - Не могу изменить формат часов работы. + Невозможно изменить формат часов работы. Новое правило Маршруты Остановка @@ -1104,7 +1104,7 @@ Без грунтовых дорог Без паромов Избегать… - Установка оповещений дорожного движения (ограничения скорости, вынужденные остановки, искусственные неровности, тоннели), камер скорости, информации о полосах. + Установка оповещений дорожного движения (ограничения скорости, вынужденные остановки, искусственные неровности, туннели), камер скорости, информации о полосах. Флуоресцентные маршруты Показывать сигналы… Линейка @@ -1184,7 +1184,7 @@ Добавить последним промежуточным пунктом Добавить первым промежуточным пунктом Добавить последним промежуточным пунктом - Добавить как первый промежуточный пункт + Добавить первым промежуточным пунктом Заменить пункт назначения Пункт назначения уже установлен: Пункт %1$s @@ -1379,7 +1379,7 @@ Выберите отображаемые профили. Профили приложения Выберите существующий… - Задать/отредактировать … + Задать/редактировать… В Android 4.4 (KitKat) и выше прежнее хранилище (%s) объявлено устаревшим. Скопировать все файлы OsmAnd в новое хранилище\? \n Примечание 1: ваши старые файлы останутся нетронутыми (но могут быть удалены вручную). \n Примечание 2: в новом хранилище совместное использование файлов OsmAnd и OsmAnd+ невозможно. @@ -1422,7 +1422,7 @@ Латышский Литовский Маратхи - Норвежский Букмол + Норвежский букмол Польский Португальский Румынский @@ -1577,8 +1577,8 @@ Запись трека в файл GPX Интервал записи Ведение записи местоположений в файл GPX можно включить или выключить с помощью виджета записи GPX на карте. - Плагин активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на карте, или также автоматически записывает все ваши маршруты навигации в файл GPX. -\n + Активирует функции для записи и сохранения ваших треков вручную нажатием на виджет записи GPX на карте, или также автоматически записывает все ваши маршруты навигации в файл GPX. +\n \nЗаписанными треками можно поделиться с вашими друзьями или использовать их для вклада в OSM. Спортсмены могут использовать записанные треки для контроля за тренировками. Некоторый базовый анализ треков может быть выполнен непосредственно в OsmAnd, например, время прохождения круга, средняя скорость и т.д., треки, конечно, позднее также могут быть проанализированы в специальных инструментах анализа сторонних производителей. Онлайн OSM классификация карт с изображениями. Всегда спрашивать @@ -1767,7 +1767,7 @@ Удалить действие Изменить действие Создать действие - OSM правки + Правки OSM ч. м. осталось @@ -1780,15 +1780,15 @@ Укажите время задержки на экране планирования маршрута. Начать пошаговое ведение через… Поехали - Плагин расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта. -\n -\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.). -\n + Расширяет возможности OsmAnd, делая доступными морские карты для катания на лодках, парусного спорта и других видов спорта. +\n +\nСпециальная дополнительная карта для OsmAnd добавляет морские навигационные и условные знаки как для внутренней, так и для прибрежной навигации. Описание навигационных отметок содержит информацию, необходимую для их идентификации, а также их характеристики (категория, форма, цвет, последовательность мерцания огней и т.д.). +\n \nЧтобы вернуться к одному из традиционных стилей карт в OsmAnd, просто деактивируйте этот плагин или измените на желаемый «Стиль карты» в разделе «Настройки карты». Вы уверены, что хотите отправить %1$d изменений в OSM\? Очистить историю? - Плагин обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулёрах и горнолыжных подъёмниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального «зимнего» стиля карты, который заключается в том, что используются «снежные» цвета зимнего пейзажа. -\n + Обеспечивает вам доступ к данным о горнолыжных трассах, маршрутах для беговых лыж, альпийских спусках, фуникулёрах и горнолыжных подъёмниках. Маршруты и спуски отмечены разными цветами в зависимости от их сложности и изображены с использованием специального «зимнего» стиля карты, который заключается в том, что используются «снежные» цвета зимнего пейзажа. +\n \nВ случае активации этого вида, стиль карты меняется на «Зимний/лыжный», показывая все детали пейзажа так, как они выглядят зимой. Такой (зимний) вид может быть отменён либо путём деактивации здесь, либо если вы поменяете «Стиль карты» в меню «Настройки карты» на желаемый вид. Текущий маршрут Скачать карты @@ -1999,7 +1999,7 @@ Выберите, где вы хотите хранить файлы карт и другие данные. При выключении сразу открывается карта. Карта загружена - QR код + QR-код Показать карту Мировая обзорная карта (охватывающая весь мир при низком уровне масштабирования) отсутствует или устарела. Пожалуйста, загрузите её для глобального обзора. Карта %1$s готова к использованию. @@ -2066,7 +2066,7 @@ Выберите дороги, которых следует избегать при навигации. Отменить все Тип - OSM правки отправлены через OsmAnd + Правки OSM отправлены через OsmAnd Время обновления Количество участников Количество правок @@ -2135,7 +2135,7 @@ \nНеобходимо {3} МБ временного хранилища и {1} МБ постоянного. \n(Доступно только {2} МБ) Отправьте свою заметку OSM анонимно или используя свой профиль OpenStreetMap.org. - Отправить OSM заметку + Отправить заметку OSM Использовать меню Использовать панель управления Панель управления или меню @@ -2247,7 +2247,7 @@ Получить за %1$s Получить Получайте неограниченное количество загрузок карт, вдобавок к еженедельным, ежедневным и даже почасовым обновлениям. - Неограниченный доступ к картам, обновлениям и плагину Wikipedia. + Неограниченный доступ к картам, обновлениям и плагину «Википедия». Выберите голосовое сопровождение Абонентская плата взимается за выбранный период. Отменить подписку можно в Google Play в любой момент. Пожертвование для сообщества OSM @@ -2544,8 +2544,8 @@ \n• Позволяет вам выбрать как отображать названия на карте: на английском, местным или с фонетическим написанием \n• Отображает специальные онлайн-тайлы, спутниковые снимки (с Bing), различные метки, как туристические/навигационные треки GPX и дополнительные слои с настраиваемой прозрачностью \n - Катание на лыжах -\n• OsmAnd плагин лыжные карты позволяет видеть лыжные трассы с уровнем сложности и некоторой дополнительной информацией, как расположение подъёмников и других объектов. + Катание на лыжах +\n• OsmAnd-плагин лыжные карты позволяет видеть лыжные трассы с уровнем сложности и некоторой дополнительной информацией, как расположение подъёмников и других объектов. Езда на велосипеде \n• Поиск велосипедных дорожек на карте \n• GPS навигация в велосипедном режиме строит маршрут используя велосипедные дорожки @@ -2633,7 +2633,7 @@ \n • Возможность записи путешествие в фоновом режиме (в то время, как устройство находится в спящем режиме) \n OsmAnd это активно развивающееся программное обеспечение с открытым исходным кодом. Каждый может внести свой вклад в приложение, сообщая об ошибках, улучшая переводы или кодируя новые функции. Кроме того, проект опирается на финансовые взносы для финансирования разработки и тестирования новых функциональных возможностей. \n - Создать или изменить OSM объекты + Создать или изменить объекты OSM Создавайте или изменяйте OSM POI, открывайте или комментируйте заметки OSM, а также отправляйте записанные файлы GPX. Удалено Отредактировано @@ -2699,7 +2699,7 @@ Экспортировать как: заметки OSM, POI или оба. Все данные Заметки OSM - Впереди тоннель + Впереди туннель Туннели Сделать отправной точкой Введите имя файла. @@ -3236,7 +3236,7 @@ Управление профилями приложения… OsmAnd использует формат UTM Standard, который похож, но не идентичен формату UTM NATO. UTM Стандарт - Open Location Code + Открытый код местоположения (OLC) Выбранный формат будет применён во всём приложении. Параметр выбран по умолчанию для профилей: %s Настройки для маршрутизации в выбранном профиле «%1$s». @@ -3847,7 +3847,7 @@ Только следующий сегмент будет перестроен с использованием выбранного профиля. Следующий сегмент Весь трек - Для использования данной опции OsmAnd проложет ваш трек по дорогам. + Для использования данной возможности OsmAnd проложит ваш трек по дорогам. \n \nДалее вам следует выбрать профиль для построения маршрута с учётом ограничений этого профиля. Выберите как соединять точки: по прямой линии или построением маршрута. From a98684e3f882ae5c98149a6a575825a6edab95b6 Mon Sep 17 00:00:00 2001 From: Mateusz Konieczny Date: Mon, 17 Aug 2020 05:05:18 +0000 Subject: [PATCH 11/27] Translated using Weblate (Polish) Currently translated at 99.7% (3804 of 3812 strings) --- OsmAnd/res/values-pl/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index e3b275e09e..a4e5c2ab83 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -304,7 +304,7 @@ Brama miasta Fort Fontanna - Zabytkowe ruiny + Ruiny o znaczeniu historycznym Kamień runiczny Wrak statku Zabytkowy statek From 273f40a444af72efef954365a8aeabbd45d81eb9 Mon Sep 17 00:00:00 2001 From: Attila Farkas Date: Sun, 16 Aug 2020 09:42:41 +0000 Subject: [PATCH 12/27] Translated using Weblate (Slovak) Currently translated at 92.9% (3545 of 3812 strings) --- OsmAnd/res/values-sk/phrases.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/OsmAnd/res/values-sk/phrases.xml b/OsmAnd/res/values-sk/phrases.xml index ba068a29c3..14f1a5e6be 100644 --- a/OsmAnd/res/values-sk/phrases.xml +++ b/OsmAnd/res/values-sk/phrases.xml @@ -3556,4 +3556,15 @@ SMS Lezecká stena Vstup do pivnice + Umelý trávnik + Bankomat: áno + Prírodná medicína + Manuálna terapia + Optometria + Pôrodníctvo (cisársky rez) + Družstevná kancelária + Močiar + Šípka + Vibrácie + Tlak \ No newline at end of file From 7d95c2ba4b1035e3ff7c0fb923d3de6e6bf85f08 Mon Sep 17 00:00:00 2001 From: aevw Date: Tue, 18 Aug 2020 13:32:38 +0000 Subject: [PATCH 13/27] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3453 of 3453 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 92 +++++++++------------------- 1 file changed, 30 insertions(+), 62 deletions(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 35dafc2ea7..9ff320c538 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -63,7 +63,6 @@ Simular rota Lista simples Lat %1$s -\n \nLon %2$s Respostas às perguntas frequentes, mudanças recentes e outras. Configurações de navegação @@ -2463,34 +2462,22 @@ \n • Opção de gravação GPX permite-lhe gravar a sua viagem e compartilhá-la \n • Através de plugin adicionais, você pode ativar curvas de nível e sombreamento de relevo Passeio, caminhada, turismo pela cidade -\n -\n• O mapa mostra caminhos para passeios e caminhadas -\n -\n• A Wikipédia no seu idioma preferido pode dizer muito durante um turismo pela cidade -\n -\n• Paradas de transportes públicos (ônibus, troleibus, trem) incluindo nomes de linha, ajuda a navegar em uma nova cidade -\n -\n• Navegação GPS em modo pedestre constrói a sua rota usando caminhos para pedestres -\n -\n• Fazer upload e seguir uma rota GPX ou gravar e compartilhar a sua própria rota +\n • O mapa mostra caminhos para passeios e caminhadas +\n • A Wikipédia no seu idioma preferido pode dizer muito durante um turismo pela cidade +\n • Paradas de transportes públicos (ônibus, troleibus, trem) incluindo nomes de linha, ajuda a navegar em uma nova cidade +\n • Navegação GPS em modo pedestre constrói a sua rota usando caminhos para pedestres +\n • Fazer upload e seguir uma rota GPX ou gravar e compartilhar a sua própria rota \n Contribua para o OSM -\n -\n• Comunique falha de dados -\n -\n• Carregue trilhas GPX diretamente do app -\n -\n• Adicione POIs e carregue-os diretamente ao OSM (ou mais tarde se off-line) +\n • Comunique falha de dados +\n • Carregue trilhas GPX diretamente do app +\n • Adicione POIs e carregue-os diretamente ao OSM (ou mais tarde se off-line) \n Recursos de segurança -\n -\n• Alternância de exibição dia/noite automatizada opcional -\n -\n• Exibição de limite de velocidade opcional, com lembrete se você ultrapassá-lo -\n -\n• Zoom dependente da velocidade opcional -\n -\n• Compartilhe sua localização para que seus amigos possam encontrar você +\n • Alternância de exibição dia/noite automatizada opcional +\n • Exibição de limite de velocidade opcional, com lembrete se você ultrapassá-lo +\n • Zoom dependente da velocidade opcional +\n • Compartilhe sua localização para que seus amigos possam encontrar você \n Especificar um buffer de tempo para manter locais para enviar sem conexão Um botão para adicionar uma nota de áudio no meio da tela. @@ -2559,18 +2546,12 @@ Mover Ponto Destinatários OSM Recursos de Ciclismo e Pedestre -\n -\n• Visualização de caminhos a pé, pistas de caminhadas e ciclovias, ideal para atividades ao ar livre -\n -\n• Roteamento e modos de exibição especiais para bicicleta e pedestres -\n -\n• Paradas de transporte público opcionais (ônibus, troleibus, trem) incluindo nomes de linhas -\n -\n• Gravação opcional de viagem para arquivo GPX local ou serviço on-line -\n -\n• Exibição opcional de velocidade e altitudes -\n -\n• Exibição de curvas de nível e sombreamento de relevo (via plugin adicional) +\n • Visualização de caminhos a pé, pistas de caminhadas e ciclovias, ideal para atividades ao ar livre +\n • Roteamento e modos de exibição especiais para bicicleta e pedestres +\n • Paradas de transporte público opcionais (ônibus, troleibus, trem) incluindo nomes de linhas +\n • Gravação opcional de viagem para arquivo GPX local ou serviço on-line +\n • Exibição opcional de velocidade e altitudes +\n • Exibição de curvas de nível e sombreamento de relevo (via plugin adicional) Sem nome Cobertura de mapa e qualidade aproximada: \n• Europa Ocidental: **** @@ -2646,19 +2627,12 @@ Pontos de passagem removidos dos marcadores de mapa Resultado Navegação -\n -\n• Funciona on-line (rápido) ou offline (sem custo de roaming quando estiver no exterior) -\n -\n• Orientação por voz passo-a-passo (vozes gravadas e sintetizadas) -\n -\n• Orientação de faixas opcional, exibição do nome da rua e tempo estimado de chegada -\n -\n• Suporta pontos intermediários do seu itinerário -\n -\n• Correção de rota automático sempre que você sair da rota -\n -\n• Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas -\n +\n • Funciona on-line (rápido) ou offline (sem custo de roaming quando estiver no exterior) +\n • Orientação por voz passo-a-passo (vozes gravadas e sintetizadas) +\n • Orientação de faixas opcional, exibição do nome da rua e tempo estimado de chegada +\n • Suporta pontos intermediários do seu itinerário +\n • Correção de rota automático sempre que você sair da rota +\n • Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas Visualização de mapa \n• Exiba sua posição e orientação \n• Opcionalmente alinhe a tela de acordo com a bússola ou a direção de seu movimento @@ -2668,19 +2642,13 @@ \n• Opcionalmente exiba nomes de lugares em inglês, língua local ou fonético \n Use dados OSM e da Wikipédia +\n • Informações de alta qualidade dos melhores projetos colaborativos do mundo +\n • Dados OSM disponíveis por país ou região +\n • POIs da Wikipédia, ótimo para visitas turísticas +\n • Downloads grátis ilimitados, diretamente do aplicativo +\n • Mapas vetoriais offline compactos e atualizados mensalmente \n -\n• Informações de alta qualidade dos melhores projetos colaborativos do mundo -\n -\n• Dados OSM disponíveis por país ou região -\n -\n• POIs da Wikipédia, ótimo para visitas turísticas -\n -\n• Downloads grátis ilimitados, diretamente do aplicativo -\n -\n• Mapas vetoriais offline compactos e atualizados mensalmente -\n -\n -\n• Escolha entre região completa ou apenas rede rodoviária (Exemplo: Japão inteiro tem 700 MB ou apenas 200 MB para rede rodoviária) +\n • Escolha entre região completa ou apenas rede rodoviária (Exemplo: Japão inteiro tem 700 MB ou apenas 200 MB para rede rodoviária) Página disponível só online. Abrir num navegador web? Cache de imagens Apagar histórico de pesquisa From 445ce39236d9214f1d1224f7b62bc1266bdb18c1 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Mon, 17 Aug 2020 15:51:30 +0000 Subject: [PATCH 14/27] Translated using Weblate (Russian) Currently translated at 100.0% (267 of 267 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/ru/ --- OsmAnd-telegram/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-telegram/res/values-ru/strings.xml b/OsmAnd-telegram/res/values-ru/strings.xml index fd9ca28bca..669e4f1ba7 100644 --- a/OsmAnd-telegram/res/values-ru/strings.xml +++ b/OsmAnd-telegram/res/values-ru/strings.xml @@ -122,7 +122,7 @@ Выберите версию OsmAnd которую OsmAnd Tracker использует для отображения положений на карте. OsmAnd подключение Связанная учетная запись - Учетная запись + Учётная запись Начать отправку локации Вам необходимо сначала установить бесплатную или платную версию OsmAnd Как отключить OsmAnd Tracker от Telegram From 7fd0113c877570f46ca62a286ae023e6806d315f Mon Sep 17 00:00:00 2001 From: solokot Date: Mon, 17 Aug 2020 04:26:50 +0000 Subject: [PATCH 15/27] Translated using Weblate (Russian) Currently translated at 100.0% (3812 of 3812 strings) --- OsmAnd/res/values-ru/phrases.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index da85dfc64a..fe982654dd 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -326,7 +326,7 @@ Аптека Больница Врач;Доктор - Поликлиника, клиника + Поликлиника;Клиника Первая помощь Стоматология;Лечение зубов;Зубной врач Дом престарелых @@ -1937,7 +1937,7 @@ Кожаная Карнавальные костюмы Традиционная - Костюмы, смокинги + Костюмы;Смокинги Для беременных Старинная Для больших людей @@ -3308,8 +3308,8 @@ Тип камня: кварцит Тип камня: гнейс Тип камня: порфир - Надежность камней: прочно - Надежность камней: ненадёжно + Надёжность камней: надёжно + Надёжность камней: ненадёжно Фиксированные зацепы: есть Фиксированные зацепы: нет Ориентация стены: С From 96b39316441d26a68de7225d9eabfa4c8ff9a8e9 Mon Sep 17 00:00:00 2001 From: Nazar-Kutz Date: Tue, 18 Aug 2020 19:43:59 +0300 Subject: [PATCH 16/27] Fix #9408 Show "My Position" context menu fragment when long tap on location button. Don't show "Whats here" menu --- .../plus/views/layers/ContextMenuLayer.java | 25 ++++++++++++++++--- .../plus/views/layers/MapControlsLayer.java | 12 +++------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java index ad8f68ee83..f4e5b18a2d 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/ContextMenuLayer.java @@ -574,11 +574,21 @@ public class ContextMenuLayer extends OsmandMapLayer { applyingMarkerLatLon = null; } + public boolean showContextMenuForMyLocation() { + PointLocationLayer provider = view.getLayerByClass(PointLocationLayer.class); + if (provider != null) { + LatLon ll = provider.getObjectLocation(null); + if (ll != null) { + PointDescription pointDescription = provider.getObjectName(null); + return showContextMenu(ll, pointDescription, ll, provider); + } + } + return false; + } + public boolean showContextMenu(double latitude, double longitude, boolean showUnknownLocation) { - RotatedTileBox cp = activity.getMapView().getCurrentRotatedTileBox(); - float x = cp.getPixXFromLatLon(latitude, longitude); - float y = cp.getPixYFromLatLon(latitude, longitude); - return showContextMenu(new PointF(x, y), activity.getMapView().getCurrentRotatedTileBox(), showUnknownLocation); + return showContextMenu(getPointFromLatLon(latitude, longitude), + activity.getMapView().getCurrentRotatedTileBox(), showUnknownLocation); } public boolean showContextMenu(@NonNull LatLon latLon, @@ -803,6 +813,13 @@ public class ContextMenuLayer extends OsmandMapLayer { return false; } + private PointF getPointFromLatLon(double latitude, double longitude) { + RotatedTileBox cp = activity.getMapView().getCurrentRotatedTileBox(); + float x = cp.getPixXFromLatLon(latitude, longitude); + float y = cp.getPixYFromLatLon(latitude, longitude); + return new PointF(x, y); + } + private List getValues(@Nullable QStringStringHash set) { List res = new ArrayList<>(); if (set != null) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java index e6ce1ce4f1..cd6bf62ced 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java @@ -439,15 +439,9 @@ public class MapControlsLayer extends OsmandMapLayer { } private void showContextMenuForMyLocation() { - OsmAndLocationProvider lp = app.getLocationProvider(); - Location lastKnownLocation = lp.getLastKnownLocation(); - Location lastStaleKnownLocation = lp.getLastStaleKnownLocation(); - Location location = lastKnownLocation != null ? lastKnownLocation : lastStaleKnownLocation; - if (location != null) { - ContextMenuLayer cml = mapActivity.getMapView().getLayerByClass(ContextMenuLayer.class); - if (cml != null) { - cml.showContextMenu(location.getLatitude(), location.getLongitude(), true); - } + ContextMenuLayer cml = mapActivity.getMapView().getLayerByClass(ContextMenuLayer.class); + if (cml != null) { + cml.showContextMenuForMyLocation(); } } From 9f314907938661bae94d0db1cc741d26cb1c64b9 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 19 Aug 2020 17:59:49 +0200 Subject: [PATCH 17/27] Combine ids to make context menu appearance persistent --- .../src/net/osmand/plus/activities/MapActivityActions.java | 3 +-- OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 57c499407f..0a6bc44260 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -400,7 +400,7 @@ public class MapActivityActions implements DialogProvider { ContextMenuItem editGpxItem = new ItemBuilder() .setTitleId(R.string.context_menu_item_edit_waypoint, mapActivity) - .setId(MAP_CONTEXT_MENU_EDIT_GPX_WP) + .setId(MAP_CONTEXT_MENU_ADD_GPX_WAYPOINT) .setIcon(R.drawable.ic_action_edit_dark) .setOrder(EDIT_GPX_WAYPOINT_ITEM_ORDER) .setListener(listener).createItem(); @@ -412,7 +412,6 @@ public class MapActivityActions implements DialogProvider { .setListener(listener).createItem(); if (all) { - adapter.addItem(editGpxItem); adapter.addItem(addGpxItem); } else if (selectedObj instanceof WptPt && getMyApplication().getSelectedGpxHelper().getSelectedGPXFile((WptPt) selectedObj) != null) { diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index 00ea982116..121536418e 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -265,14 +265,14 @@ public class OsmEditingPlugin extends OsmandPlugin { } if (isEditable) { adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify, mapActivity) - .setId(MAP_CONTEXT_MENU_MODIFY_POI) + .setId(MAP_CONTEXT_MENU_CREATE_POI) .setIcon(R.drawable.ic_action_edit_dark) .setOrder(MODIFY_POI_ITEM_ORDER) .setListener(listener) .createItem()); } else if (selectedObj instanceof OpenstreetmapPoint && ((OpenstreetmapPoint) selectedObj).getAction() != Action.DELETE) { adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify_osm_change, mapActivity) - .setId(MAP_CONTEXT_MENU_MODIFY_OSM_CHANGE) + .setId(MAP_CONTEXT_MENU_CREATE_POI) .setIcon(R.drawable.ic_action_edit_dark) .setOrder(MODIFY_OSM_CHANGE_ITEM_ORDER) .setListener(listener) @@ -287,7 +287,7 @@ public class OsmEditingPlugin extends OsmandPlugin { } if (selectedObj instanceof OsmNotesPoint) { adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_modify_note, mapActivity) - .setId(MAP_CONTEXT_MENU_MODIFY_OSM_NOTE) + .setId(MAP_CONTEXT_MENU_OPEN_OSM_NOTE) .setIcon(R.drawable.ic_action_edit_dark) .setOrder(MODIFY_OSM_NOTE_ITEM_ORDER) .setListener(listener) From 4d9a7f10566c4edbf1bc7b1b9283982b3aec4a82 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 19 Aug 2020 18:07:37 +0200 Subject: [PATCH 18/27] Fix context menu --- OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java | 4 ++-- OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 0a6bc44260..76a5615572 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -343,7 +343,7 @@ public class MapActivityActions implements DialogProvider { final double longitude, final ContextMenuAdapter adapter, Object selectedObj, - boolean all) { + boolean configureMenu) { ItemBuilder itemBuilder = new ItemBuilder(); adapter.addItem(itemBuilder @@ -411,7 +411,7 @@ public class MapActivityActions implements DialogProvider { .setOrder(ADD_GPX_WAYPOINT_ITEM_ORDER) .setListener(listener).createItem(); - if (all) { + if (configureMenu) { adapter.addItem(addGpxItem); } else if (selectedObj instanceof WptPt && getMyApplication().getSelectedGpxHelper().getSelectedGPXFile((WptPt) selectedObj) != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index bfc8838ef0..b703544963 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -1062,7 +1062,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL } } - public ContextMenuAdapter getActionsContextMenuAdapter(boolean all) { + public ContextMenuAdapter getActionsContextMenuAdapter(boolean configure) { MapActivity mapActivity = getMapActivity(); final ContextMenuAdapter menuAdapter = new ContextMenuAdapter(getMyApplication()); if (mapActivity != null) { @@ -1070,7 +1070,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL for (OsmandMapLayer layer : mapActivity.getMapView().getLayers()) { layer.populateObjectContextMenu(latLon, getObject(), menuAdapter, mapActivity); } - mapActivity.getMapActions().addActionsToAdapter(all ? 0 : latLon.getLatitude(), all ? 0 : latLon.getLongitude(), menuAdapter, getObject(), all); + mapActivity.getMapActions().addActionsToAdapter(configure ? 0 : latLon.getLatitude(), configure ? 0 : latLon.getLongitude(), menuAdapter, getObject(), configure); } return menuAdapter; } From 7339007314e32d5327a05c08ff7b673deffa3ff4 Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Wed, 19 Aug 2020 03:07:33 +0000 Subject: [PATCH 19/27] Translated using Weblate (Japanese) Currently translated at 96.6% (3337 of 3453 strings) --- OsmAnd/res/values-ja/strings.xml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 8a85dde06d..bdda01ab38 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -88,9 +88,9 @@ POIを索引中… 交通機関を索引化… I/Oエラーです - キロメートル + km km/h - メートル + m 重複したマップ データ形式 \'\'{0}\'\' はサポートされていません 自動車用施設 @@ -3765,4 +3765,13 @@ POIの更新は利用できません 新しいセグメントを追加するための経路ファイルを選択します。 ストリート画像 保存せずにルート計画を終了した場合すべての変更が失われます。よろしいですか? + エンデューロバイク + 電動スクーター + 車椅子 + ゴーカート + OSMのメモを閉じました + 続けるには営業日を設定する必要があります + 地点間のルート + ルートを計画 + 経路に追加 \ No newline at end of file From 2bb9dccaa2e1a70944697d74363414d9b103df29 Mon Sep 17 00:00:00 2001 From: Boris Petrov Date: Tue, 18 Aug 2020 15:15:14 +0000 Subject: [PATCH 20/27] Translated using Weblate (French) Currently translated at 100.0% (3453 of 3453 strings) --- OsmAnd/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 3750c8f27e..e705c38fde 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -1117,7 +1117,7 @@ Indiquez le poids du véhicule à respecter sur les routes. Sélectionner GPX… Définissez l\'arrivée - Sélectionner sur la carte + Sélectionnez sur la carte Favori Préférences d\'itinéraire Informations sur l\'itinéraire From d351f55e06850c5ae0622c31385180c3212b8b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Kotr=C4=8D?= Date: Wed, 19 Aug 2020 11:54:22 +0000 Subject: [PATCH 21/27] Translated using Weblate (Czech) Currently translated at 79.0% (2729 of 3453 strings) --- OsmAnd/res/values-cs/strings.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 9ed07ed243..43b3ad38e3 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -3480,4 +3480,22 @@ Zobrazená oblast: %1$s x %2$s Zvolte způsob uložení stažených dlaždic. Rychlé akce můžete importovat nebo exportovat prostřednictvím profilů. Odstranit vše\? + Motokára + Uzavřená OSM poznámka + Pro pokračování je potřeba nastavit pracovní dny + Trasa mezi body + Naplánovat trasu + Přidat k trase + Zobrazit ikony startu a cíle + Zvolte šířku + Vyberte interval pro zobrazování značek na trase se vzdáleností nebo časem. + Vyberte požadované dělení: podle času nebo podle vzdálenosti. + Vlastní + Směrové šipky + Naposledy upraveno + Importovat trasu + Otevřít existující trasu + Vytvořit novou trasu + Vyberte trasu k otevření. + Hotovo \ No newline at end of file From 31b934adf9b5348ed57f14f030bb479cf2adf551 Mon Sep 17 00:00:00 2001 From: aevw Date: Tue, 18 Aug 2020 13:50:50 +0000 Subject: [PATCH 22/27] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3453 of 3453 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 32 ++++++++++++---------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 9ff320c538..30cf2447b1 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -62,8 +62,8 @@ Passar antes Simular rota Lista simples - Lat %1$s -\nLon %2$s + Latitude %1$s +\nLongitude %2$s Respostas às perguntas frequentes, mudanças recentes e outras. Configurações de navegação Configurações gerais @@ -779,7 +779,7 @@ Minutos O carro foi estacionado em Gerenciar mapas - Pesquise nas proximidades + Pesquise por perto Gerenciar mapas. Usar posição… Exibir rota @@ -1363,7 +1363,7 @@ Vire levemente à esquerda e siga Aguardando sinal… Pesquisar próximo ao centro do mapa - Pesquise nas proximidades + Pesquise por perto Mesma do aparelho Vertical Horizontal @@ -1811,7 +1811,7 @@ Atualizar Somente baixar via Wi-Fi Atualização ao vivo - Atualizar agora + Atualizar Distância: Tempo: OsmAnd não tem permissão para usar o cartão de memória @@ -1834,7 +1834,7 @@ Limite de tempo máximo para clipes gravados. Limite de armazenamento Quantidade de espaço que pode ser ocupado por todos os clipes gravados. - Última alteração no mapa: %s + Última alteração: %s A cada hora Diariamente Semanalmente @@ -2086,7 +2086,7 @@ Sem estradas de gelo ou vaus Evitar estradas de gelo e vaus. Limite para orientação do mapa - Exibir notificação \'Navegação finalizada\' + Exibir notif. \'Navegação finalizada\' Cache de quadrícula Régua de raio Exibir a partir do nível de zoom @@ -2632,7 +2632,8 @@ \n • Orientação de faixas opcional, exibição do nome da rua e tempo estimado de chegada \n • Suporta pontos intermediários do seu itinerário \n • Correção de rota automático sempre que você sair da rota -\n • Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas +\n • Busque lugares por endereço, pelo tipo (ex.: restaurante, hotel, posto de gasolina, museu), ou por coordenadas geográficas +\n Visualização de mapa \n• Exiba sua posição e orientação \n• Opcionalmente alinhe a tela de acordo com a bússola ou a direção de seu movimento @@ -2785,16 +2786,11 @@ \n \nAlgumas das principais características: Contribua diretamente para o OSM -\n -\n• Avisar erros de dados -\n -\n• Fazer upload de trilhas GPX para o OSM diretamente do app -\n -\n• Adicionar POIs e fazer o upload diretamente para OSM (ou mais tarde se offline) -\n -\n• Gravação de viagem opcional também em modo background (enquanto o dispositivo está no modo sleep) -\n -\nOsmAnd é um software de código aberto desenvolvido ativamente. Todos podem contribuir para o app, reportando bugs, melhorando as traduções ou programando novas funcionalidades. Além disso, o projeto conta com as contribuições financeiras para financiar o desenvolvimento e testes de novas funcionalidades. +\n • Avisar erros de dados +\n • Fazer upload de trilhas GPX para o OSM diretamente do app +\n • Adicionar POIs e fazer o upload diretamente para OSM (ou mais tarde se offline) +\n • Gravação de viagem opcional também em modo background (enquanto o dispositivo está no modo sleep) +\n OsmAnd é um software de código aberto desenvolvido ativamente. Todos podem contribuir para o app, reportando bugs, melhorando as traduções ou programando novas funcionalidades. Além disso, o projeto conta com as contribuições financeiras para financiar o desenvolvimento e testes de novas funcionalidades. \n Ponto %1$s foi excluído Mundo From 2f31e4be570986db9bbe3d34696b2de6026036cb Mon Sep 17 00:00:00 2001 From: ssantos Date: Wed, 19 Aug 2020 19:05:42 +0000 Subject: [PATCH 23/27] Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (267 of 267 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/pt_PT/ --- OsmAnd-telegram/res/values-pt-rPT/strings.xml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/OsmAnd-telegram/res/values-pt-rPT/strings.xml b/OsmAnd-telegram/res/values-pt-rPT/strings.xml index 40b67220ba..6cbbce3ee6 100644 --- a/OsmAnd-telegram/res/values-pt-rPT/strings.xml +++ b/OsmAnd-telegram/res/values-pt-rPT/strings.xml @@ -2,7 +2,7 @@ Posicionando… Milhas náuticas por hora (nó) - Você precisa instalar a versão gratuita ou paga do OsmAnd primeiro + Precisa instalar a versão gratuita ou paga do OsmAnd primeiro Telegram Entrar Data de início - fim @@ -10,7 +10,7 @@ Por favor, ligue \"Localização\" nas configurações do sistema Sem dados enviando localização - Selecione os contatos e grupos com os quais você deseja compartilhar sua localização. + Selecione os contactos e grupos com os quais deseja compartilhar sua localização. Aguardando resposta do Telegram Conta conectada Política de privacidade do OsmAnd @@ -33,7 +33,7 @@ Última localização atualizada: Parado Mostrar quantidade de pontos de GPS coletados e enviados. - Você precisa de uma conta e número de telefone registrados no Telegram + Precisa de uma conta e número de telefone registados no Telegram Filtro: sem registro abaixo da velocidade selecionada Ordenar por Enviado @@ -42,7 +42,7 @@ Enviado e atualizado com sucesso Escolha como as mensagens com sua localização serão exibidas. Conexão - Se você deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar sua localização. + Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização. Palavra-passe Autorização Selecionar @@ -51,7 +51,7 @@ Robô Altitude média Data de início - Contatos e grupos compartilhando o local para você. + Contatos e grupos compartilhando o local consigo. Todos Pontos GPX recebidos: %1$s Aparência @@ -59,7 +59,7 @@ Pela distância Desativar o compartilhamento de local Coletado - Escolha um nome que você ainda não usou + Escolha um nome que ainda não usou Adicionar Mostrar utilitadoes no mapa Digite o código de autenticação @@ -81,8 +81,8 @@ Conectado m O compartilhamento está ativado (desativado) - Eu não tenho conta Telegram - Você precisa de uma conta do Telegram para usar o compartilhamento de local. + Não tenho uma conta do Telegram + Precisa de uma conta do Telegram para usar o compartilhamento de local. Desativar todo o compartilhamento Status de compartilhamento Fim @@ -92,11 +92,11 @@ Mais tarde Minha localização Instalar OsmAnd - Telegrama (a app de mensagens) é usado para conectar e se comunicar com as pessoas. + Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas. Não é possível enviar para bate-papo do Telegram: Ainda não enviado %1$d pontos - OsmAnd Tracker permite que partilhe a sua localização e veja a dos outros no OsmAnd.

O app usa a API Telegram e você precisa de uma conta do Telegram.
+ 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.
Filtro: distância mínima para registrar um novo ponto O nome do aparelho não pode estar vazio yd @@ -152,7 +152,7 @@ %1$d h %2$d m Nome do aparelho muito longo Pontos de GPS - Ative o monitoramento para salvar todos os locais no histórico. + Ative o monitoramento para gravar todos os locais no histórico. Mostrar no mapa Enviar minha localização Compartilhar localização como @@ -160,7 +160,7 @@ mph Minutos por milha Última atualização do Telegram - Tem certeza de que deseja sair do OsmAnd Tracker para que você não possa compartilhar o local ou ver a localização de outras pessoas\? + 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\? Servidor Metros por segundo Compartilhamento: %1$s @@ -199,7 +199,7 @@ Por favor, insira o número de telefone do seu Telegram em formato internacional Definir tempo visível para todos Número de telefone - Ao clicar em \"Continuar\" você concorda com as condições da política de privacidade do Telegram e OsmAnd. + Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd. Milhas/pés Monitoramento está ativado Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições. From f88c1c5ab1f3b4ffef9b1af15ec0e022fe0b26bd Mon Sep 17 00:00:00 2001 From: ssantos Date: Wed, 19 Aug 2020 19:06:18 +0000 Subject: [PATCH 24/27] Translated using Weblate (Portuguese) Currently translated at 100.0% (267 of 267 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/pt/ --- OsmAnd-telegram/res/values-pt/strings.xml | 45 +++++++++++------------ 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/OsmAnd-telegram/res/values-pt/strings.xml b/OsmAnd-telegram/res/values-pt/strings.xml index ecd23c5bcd..8b114893d7 100644 --- a/OsmAnd-telegram/res/values-pt/strings.xml +++ b/OsmAnd-telegram/res/values-pt/strings.xml @@ -57,10 +57,10 @@ Linha do tempo é um recurso disponível agora gratuitamente. Desativar monitoramento Gravação de localização ativada - Ative o monitoramento para salvar todos os locais no histórico. - Telegrama (a app de mensagens) é usado para conectar e se comunicar com as pessoas. + 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. - Ao clicar em \"Continuar\" você concorda com as condições da política de privacidade do Telegram e OsmAnd. + 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 Política de privacidade do OsmAnd @@ -82,7 +82,7 @@ Escolha como as mensagens com sua localização serão exibidas. Mapa e texto Última atualização do Telegram - Escolha um nome que você ainda não usou + 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. @@ -90,7 +90,7 @@ 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 você deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar sua localização. + Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização. Última localização atualizada: Enviado e atualizado com sucesso Não é possível enviar para bate-papo do Telegram: @@ -117,8 +117,8 @@ Gravar Adicionar aparelho Compartilhar localização como - Contatos e grupos compartilhando o local para você. - Tem certeza de que deseja sair do OsmAnd Tracker para que você não possa compartilhar o local ou ver a localização de outras pessoas\? + 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\? Sair do OsmAnd Tracker\? Nome Pela distância @@ -159,13 +159,13 @@ Vivo Robô Registro no Telegram - Você precisa de uma conta do Telegram para usar o compartilhamento de local. + Precisa de uma conta do Telegram para usar o compartilhamento de local. Por favor, instale o Telegram e configure uma conta. Então pode usar esta app. Todos - Desligado - Você precisa de uma conta e número de telefone registrados no Telegram - Eu não tenho conta Telegram + 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 Digite o código de autenticação Definir tempo visível para todos @@ -173,12 +173,12 @@ %1$d m %1$d h Instalar - Partilhar + Compartilhar 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 contatos e grupos com os quais você deseja compartilhar sua localização. + Selecione os contactos e grupos com os quais deseja compartilhar sua localização. Pesquisa: Grupo ou contato Compartilhar localização Mostrar no mapa @@ -190,7 +190,7 @@ Código de Autenticação Uma faixa GPX é salva automaticamente durante a navegação. Digite a palavra-passe - Palavra-passe do Telegram + Palavra-passe do telegrama Entrar Sair Iniciando @@ -204,14 +204,14 @@ 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. - Modo de fundo + Modo em segundo plano OsmAnd Tracker é executado em segundo plano com o ecrã desligado. Distância Compartilhar localização Compartilhando localização Serviço OsmAnd Tracker Logotipo do OsmAnd - Você precisa instalar a versão gratuita ou paga do OsmAnd primeiro + Precisa instalar a versão gratuita ou paga do OsmAnd primeiro Instalar OsmAnd Mostrar utilitadoes no mapa Bate-papos ativos @@ -230,30 +230,29 @@ m/s km/h mph - Quilómetros por hora + Quilômetros por hora Milhas por hora Metros por segundo - Minutos por quilómetro + Minutos por quilômetro Minutos por milha Milhas náuticas por hora (nó) Milhas/pés Milhas/jardas - Quilómetros/metros + Quilômetros/metros Milhas náuticas Milhas/metros h min seg - O OsmAnd Tracker permite que partilhe sua localização e veja a dos outros no OsmAnd.
-
O app usa a API Telegram e você precisa de uma conta da Telegram.
+ 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 Ao vivo agora Cronologia Mensagens gravadas - Selecione o fuso horário para mostrar nas suas mensagens de localização. + Selecione o fuso horário a mostrar nas suas mensagens de localização. Fuso horário Unidades e formatos - Alterar unidade de medida de distância. + Alterar unidade de distância. Unidades de comprimento Definir unidade de velocidade. Unidade de velocidade From 350524c2c3afc478c2abd635ad27a4615440a16b Mon Sep 17 00:00:00 2001 From: Hinagiku Zeppeki Date: Wed, 19 Aug 2020 03:00:45 +0000 Subject: [PATCH 25/27] Translated using Weblate (Japanese) Currently translated at 90.2% (241 of 267 strings) Translation: OsmAnd/Telegram Translate-URL: https://hosted.weblate.org/projects/osmand/telegram/ja/ --- OsmAnd-telegram/res/values-ja/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd-telegram/res/values-ja/strings.xml b/OsmAnd-telegram/res/values-ja/strings.xml index 1c15afa46d..71c5af7daf 100644 --- a/OsmAnd-telegram/res/values-ja/strings.xml +++ b/OsmAnd-telegram/res/values-ja/strings.xml @@ -221,8 +221,8 @@ ヤード フィート マイル - キロメートル - メートル + km + m 海里 min/m min/km From 265f488874803d7769378ed595da5787fcad2f12 Mon Sep 17 00:00:00 2001 From: Nazar-Kutz Date: Thu, 20 Aug 2020 09:08:27 +0300 Subject: [PATCH 26/27] refactoring --- .../osmand/plus/wikimedia/WikiImageHelper.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java index 68f3545129..b02af687bb 100644 --- a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java @@ -26,7 +26,7 @@ public class WikiImageHelper { private static final String WIKIMEDIA_API_ENDPOINT = "https://commons.wikimedia.org/w/api.php"; private static final String WIKIDATA_ACTION = "?action=wbgetclaims&property=P18&entity="; private static final String WIKIMEDIA_ACTION = "?action=query&list=categorymembers&cmtitle="; - private static final String CM_LIMIT = "&cmlimit=500"; + private static final String CM_LIMIT = "&cmlimit=5000"; private static final String FORMAT_JSON = "&format=json"; private static final String IMAGE_BASE_URL = "https://upload.wikimedia.org/wikipedia/commons/"; @@ -41,8 +41,7 @@ public class WikiImageHelper { @NonNull List imageCards) { if (wikidataId.startsWith(WIKIDATA_PREFIX)) { String url = WIKIDATA_API_ENDPOINT + WIKIDATA_ACTION + wikidataId + FORMAT_JSON; - WikidataResponse response = - (WikidataResponse) sendWikipediaApiRequest(url, WikidataResponse.class); + WikidataResponse response = sendWikipediaApiRequest(url, WikidataResponse.class); if (response != null) { for (P18 p18 : response.claims.p18) { String imageFileName = p18.mainsnak.datavalue.value; @@ -63,8 +62,7 @@ public class WikiImageHelper { addImageCard(mapActivity, imageCards, fileName); } else if (wikiMediaTagContent.startsWith(WIKIMEDIA_CATEGORY)) { String url = WIKIMEDIA_API_ENDPOINT + WIKIMEDIA_ACTION + wikiMediaTagContent + CM_LIMIT + FORMAT_JSON; - WikimediaResponse response = - (WikimediaResponse) sendWikipediaApiRequest(url, WikimediaResponse.class); + WikimediaResponse response = sendWikipediaApiRequest(url, WikimediaResponse.class); if (response != null) { List subCategories = new ArrayList<>(); for (Categorymember cm : response.query.categorymembers) { @@ -86,7 +84,7 @@ public class WikiImageHelper { } } - private static Object sendWikipediaApiRequest(@NonNull String url, @NonNull Class responseClass) { + private static T sendWikipediaApiRequest(@NonNull String url, @NonNull Class responseClass) { StringBuilder rawResponse = new StringBuilder(); String errorMessage = NetworkUtils.sendGetRequest(url, null, rawResponse); if (errorMessage == null) { @@ -176,19 +174,19 @@ public class WikiImageHelper { } // Wikimedia response classes - public class WikimediaResponse { + private static class WikimediaResponse { @SerializedName("query") @Expose private Query query; } - public class Query { + private static class Query { @SerializedName("categorymembers") @Expose private List categorymembers; } - public class Categorymember { + private static class Categorymember { @SerializedName("title") @Expose private String title; From 84b710772a2331805b50d7475fe614ef6893f4a5 Mon Sep 17 00:00:00 2001 From: Nazar-Kutz Date: Thu, 20 Aug 2020 09:09:43 +0300 Subject: [PATCH 27/27] change members limit --- OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java index b02af687bb..27d657d960 100644 --- a/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikimedia/WikiImageHelper.java @@ -26,7 +26,7 @@ public class WikiImageHelper { private static final String WIKIMEDIA_API_ENDPOINT = "https://commons.wikimedia.org/w/api.php"; private static final String WIKIDATA_ACTION = "?action=wbgetclaims&property=P18&entity="; private static final String WIKIMEDIA_ACTION = "?action=query&list=categorymembers&cmtitle="; - private static final String CM_LIMIT = "&cmlimit=5000"; + private static final String CM_LIMIT = "&cmlimit=500"; private static final String FORMAT_JSON = "&format=json"; private static final String IMAGE_BASE_URL = "https://upload.wikimedia.org/wikipedia/commons/";